Unity3d上的玩家移动

时间:2016-04-25 12:30:57

标签: c# unity3d

我是Unity的新手,在我的第一场比赛中,我决定成为像Temple Run一样无尽的跑步者。我已经设置了基本地形但是我在让玩家正确移动方面遇到了问题。我的玩家是一个3d立方体,一旦游戏开始它向前移动,我想要它当我按下左箭头键向左转并继续向转弯方向移动时我按下右箭头键右转并继续向转弯方向移动。

目前,我正在使用Vector3.leftVector3.right以及transform.rotate。这不会产生预期的效果。例如,当我按下右箭头键时,对象旋转并向右转,但是当我再次向右按下再向右转动时,只有对象旋转(因为对象已经在Vector.right方向上移动)。

希望这是有道理的。任何帮助,将不胜感激。提前致谢。 :)

这是我正在使用的代码,它不起作用。

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{

    public float speed;

    private Vector3 dir;


    // Use this for initialization
    void Start()
    {
        dir = Vector3.zero;

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            dir = Vector3.forward;
        }
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            dir = Vector3.right;
            transform.Rotate(0, 90, 0);
            Quaternion.AngleAxis(90, Vector3.up);
        }
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            dir = Vector3.left;
            transform.Rotate(0, -90, 0);
            Quaternion.AngleAxis(-90, Vector3.up);
        }

        float amountToMove = speed * Time.deltaTime;

        transform.Translate(dir * amountToMove);
    }
}

1 个答案:

答案 0 :(得分:1)

Vector3.right只是指向(0,0,1)的Vector的缩写,它与你的游戏对象的方向关系不大。还有transform.forward/right/up,它们考虑对象的旋转。 基本上,如果您总是希望向前移动对象,请使用transform.forward以简化并使用transform.Rotate(..)transform.RotateAround(..)或类似的东西旋转其变换(或者您可以使用四元数,但如果不是立即告诉你任何事情,远离他们并使用这些功能)