首页 文章

球员沿错轴旋转?

提问于
浏览
0

我有一个基本上是球体的角色,但是在y1,x1.2,z1(一个球体)上缩放 .

我可以在任何给定的'pushDirection'中对对象施加力,这是角色的刚体位置减去主摄像机变换位置的产物(这可以很好地将角色移动到摄像机面向的方向 - 在我的'前进'中游戏应始终朝向相机所面向的方向) .

但是现在我试图让对象向前旋转 - 在相机面向的方向 - 而不是增加力量 . 我'm adding torque instead. [Here'是一个粗略的插图截图,我的目标与我的预期轴:

请注意,只要相机围绕对象旋转,旋转轴就会移动 .

相反,我得到的结果是角色旋转,如下图所示:

如上所述,当摄像机移动时,旋转轴会随着摄像机一起移动 . 但我希望物体远离相机而不是向左旋转 . (注意,在两个屏幕截图中,我都没有重力暂停对象以尝试调试其旋转) .

我脚本的相关部分如下:

void Start ()
    {
        rb = GetComponent<Rigidbody>();
        pushForward =  rb.transform.position -
        Camera.main.transform.position;
    }
 
    void Update()
    {
        speed = rb.velocity.magnitude;
        pushForward =  rb.transform.position - Camera.main.transform.position;
 
        if (Input.GetKey("w"))
        {
            isForward = true;
        }
        else
        {
            isForward = false;
        }
    }
 
    void FixedUpdate ()
    {
        // IF KEY IS DOWN, MOVE //
        if (isForward == true)
        {
            float turn = Input.GetAxis("Vertical");
            rb.AddTorque(pushForward * torque * turn);
            Debug.Log("Moving Forward");
        }
    }

我已经玩过这么多,我无法理解它 . 我也很困惑,好像我将Input.GetAxis更改为“Horizontal”,调试消息“Moving Forward”弹出正常,但我没有在对象中获得任何类型的旋转 - 根本没有 .

如果有人能指出我正确的方向,我真的很感激,我让自己有点困惑 .

1 回答

  • 0

    如果我理解正确,为了获得你想要的旋转,你需要与 Vector3.down 交叉乘以 pushForward .

    即:

    void FixedUpdate() {
        // IF KEY IS DOWN, MOVE //
        if (isForward == true) {
            var vect = Vector3.Cross(pushForward, Vector3.down);
            float turn = Input.GetAxis("Vertical");
            rb.AddTorque(vect * torque * turn);
            Debug.Log("Moving Forward");
        }
    }
    

相关问题