0评论

Unity 2D 效应器与来回移动的实现

清风 2019-03-21 136浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏开发行业精英群711501594

这篇内容我们来看看unity开发中的2D 效应器是什么,以及如何实现来回移动。

1、效应器

Point Effector 2D: 点效应器。进入区域,吸引或排斥物体

Area Effector 2D: 区域效应器,可以用来做马里奥的管道移动效果

Surface Effector 2D :表面效应器。实现传送带效果

PlatForm Effector 2D:平台效应器。实现2D游戏里面的台阶效果

关于效应器的详细介绍可以参考:《Unity2D 效应器详解

2、控制移动
// Update is called once per frame
    void Update () {
        if (Input.GetKey(KeyCode.A))
        {
            MoveLeft();
        }
        if (Input.GetKey(KeyCode.D))
        {
            MoveRight();
        }
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Jump();
        }
    }
        void MoveLeft()
    {
        var v = rgbd.velocity;
        v.x = -movespeed;
        rgbd.velocity = v;
        //gameObject.GetComponent<Rigidbody2D>().AddForce(Vector2.left * movespeed, ForceMode2D.Force);
    }
    void MoveRight()
    {
        var v = rgbd.velocity;
        v.x = movespeed;
        rgbd.velocity = v;
        //gameObject.GetComponent<Rigidbody2D>().AddForce(Vector2.right * movespeed, ForceMode2D.Force);
    }
    public void Jump()
    {
        if (isground)
        {
            gameObject.GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpspeed, ForceMode2D.Impulse);
            isground = false;
        }
    }

3、敌人来回移动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class laihui : MonoBehaviour {
    public float movespeed=3.0f;
    private Vector2 currentposition;
    public float distnation=10.0f;
    private int face = 1;
    // Use this for initialization
    void Start () {
        currentposition = gameObject.transform.position;
    }
    // Update is called once per frame
    void Update () {
        if (face == 1)
        {
            gameObject.transform.Translate(Vector2.right * movespeed * Time.deltaTime);
        }
        if (face == 0)
        {
            gameObject.transform.Translate(Vector2.left * movespeed * Time.deltaTime);
        }
        if (gameObject.transform.position.x > currentposition.x+distnation)
        {
            face = 0;
        }
        if (gameObject.transform.position.x < currentposition.x)
        {
            face = 1;
        }
    }
}