Unity3d中的人物移动

对于第三人称的游戏,主人公身上一般加一个character controller用来控制移动。这时候需要自己模拟重力,让主人公站在地板上。如果用A D控制左右, W S控制前后,那么控制移动代码可以这么写:

public class Move : MonoBehaviour {
    public CharacterController character;
    public float speed;
    // Use this for initialization
    void Start () {
        character = this.GetComponent<CharacterController>();
        speed=1f;
    }
    
    // Update is called once per frame
    void Update () {
        float horizontal = Input.GetAxis("Horizontal"); //A D 左右
        float vertical = Input.GetAxis("Vertical"); //W S 上 下
        float moveY = 0;
        float gravity = -9.8f;
        moveY = gravity*Time.deltaTime;
        character.Move(new Vector3(horizontal, moveY, vertical) * speed * Time.deltaTime);
    }
}

使用Input.GetAxis方法获取下列默认轴: "Horizontal" 和"Vertical" 映射于控制杆、A、W、S、D和箭头键(方向键)。horizontal和verical分别是两个介于[-1,1]之间的数。利用这段代码,人物只在xz平面上移动。

移动还可以用transform.Translate方法,或者使用Rigidbody并赋予刚体速度。但有一点要注意,如果移动命令是在Update()函数里面,物体移动时会有抖动情况,因为每一帧时间不固定,移动的距离有长有短。解决这个问题的方法是把移动语句写在FixedUpdate()函数里面,因为该函数每一帧的长度固定。

具体其他移动方法可以看http://www.jianshu.com/p/5653b0be5fd4

posted @ 2017-07-16 17:06  vaevaevae  阅读(6395)  评论(0编辑  收藏  举报