2017-06-13 76 views
0

我有一个本质上是球体的字符,但是在y1,x1.2,z1(球体)上缩放。球员沿着错误的轴线旋转?

我可以对任何给定的'pushDirection'中的物体施加力,它是角色刚体位置减去主相机变换位置的产物(这可以很好地将角色移动到相机朝向的方向)向前移动“应该始终处于相机所面对的方向)。

但现在我试图让对象向前旋转向前 - 相机朝向的方向 - 而不是增加的力量。我正在增加扭矩。 [这里是我的目标粗略说明的截图与我的意图轴:

注意,只要摄像机周围的物体旋转,旋转轴将转移。

相反虽然,我得到的结果,其中的字符旋转,如该示出的屏幕截图中示出:

如所提到的,由于相机与相机沿着移动轴旋转位移。但我希望物体远离相机,而不是向左旋转。 (注意,在这两个屏幕截图中,我已将对象悬浮在无重力的情况下尝试调试其旋转)。我的脚本

相关位低于:

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更改为“Horizo​​ntal”一样,调试消息“Moving Forward”弹出良好,但我没有在对象中获得任何类型的旋转 - 完全没有。

如果任何人都可以指出我正确的方向,我真的很感激它,我让自己有点困惑。

+0

什么是你的代码的扭矩? –

+0

@DávidFlorek'torque'是一个'float',用于增加/减少每个输入单位的旋转量。 – Galandil

回答

0

如果我理解正确,为了获得您想要的旋转,您需要将pushForwardVector3.down相乘。

即:

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"); 
    } 
}