【问题标题】:Unity3D object doesn't move on rotationUnity3D 对象不旋转移动
【发布时间】:2014-11-11 06:30:36
【问题描述】:

我正在尝试使用 Raycast 使我的对象旋转并朝那个方向移动。但是,当我的对象旋转时,它不会移动到新的方向。相反,它只是朝着它一直在移动的方向移动。知道为什么它不改变方向吗? 公共类 ControlCar : MonoBehaviour {

CharacterController controller;
public int Speed;
public int Raydir;
public int RotateSpeed;
public int FrontRay;
public int RayDist;

// Use this for initialization
void Start () {
    controller = GetComponent<CharacterController>();

    RayDist = 4;
    FrontRay = 3;
    RotateSpeed = 10;
}

// Update is called once per frame
void Update () {
    Move ();
    HandleRay ();

}

void Move(){
        transform.position += Vector3.forward * Speed * Time.deltaTime;

    }

void HandleRay(){
    //Front Ray
    Vector3 Front = transform.TransformDirection(0,0,1) * FrontRay;
    if (Physics.Raycast (transform.position, Front, 10)) {
        Debug.Log ("Front hit!");
            }

    //Front right
    Vector3 FrontR = transform.TransformDirection(1,0,1) * RayDist;
    if (Physics.Raycast (transform.position, FrontR, 10)) {
        Debug.Log ("Right hit!");
        transform.Rotate(new Vector3(0,-RotateSpeed * Time.deltaTime,0));

    }

    //Front Left
    Vector3 FrontL = transform.TransformDirection(-1,0,1) * RayDist;
    if (Physics.Raycast (transform.position, FrontL, 10)) {
        Debug.Log ("Left hit!");
        transform.Rotate(new Vector3(0,RotateSpeed * Time.deltaTime,0));
    }




    //DebugRay
    Debug.DrawRay(transform.position, FrontL, Color.green);
    Debug.DrawRay(transform.position, FrontR, Color.red);
    Debug.DrawRay(transform.position, Front, Color.blue);
    }
}

我的整个项目可以在这里看到:https://www.dropbox.com/sh/d7yxhjg5humw3vo/AAD5IfBW8slRw8-AT072DsWea?dl=0

提前致谢!

【问题讨论】:

  • RotateSpeed 和 FrontRay 设置为多少?
  • FrontRay = 3;旋转速度 = 10;

标签: unity3d


【解决方案1】:

Vector3.forward 总是返回等价于:new Vector3(0, 0, 1)。不幸的是,它实际上与变换的旋转无关。

Vector3.forward 始终为北,Vector3.back 始终为南,Vector3.right 始终为东,Vector3.left 始终为西,Vector3.up 始终为上,Vector3.down 始终为下,Vector3.one 为右,上,并在一个呼叫中转发。 Vector3.zero 本质上是:new Vector3(0, 0, 0)。

【讨论】:

  • 请注意,transform 也具有类似命名的属性,用于将局部方向与全局空间相关联
  • transform.position += transform.forward * Speed * Time.deltaTime;现在可以了,感谢您的帮助!
  • 我实际上什至不知道 transform.forward 属性,所以这对我来说是个新闻。干杯阿拉沃尔。
【解决方案2】:

尝试交换这两个。

  void Update () 
  {
       HandleRay ();
       Move ();
  }

那么当你向前应用时,移动应该朝向正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    相关资源
    最近更新 更多