C# 玩家沿错误的轴旋转?

C# 玩家沿错误的轴旋转?,c#,unity3d,game-physics,C#,Unity3d,Game Physics,我有一个基本上是球体的角色,但缩放比例为y1,x1.2,z1(球体) 我可以在任何给定的“推动方向”上对对象施加力,这是角色刚体位置减去主摄影机变换位置的乘积(这可以很好地沿摄影机所面对的方向移动角色—“向前”在我的游戏中应该始终是摄影机所面对的方向) 但现在我试着让物体向前旋转——在相机面对的方向上——而不是增加力。我在增加扭矩。[这是我的目标和我的目标轴的一个粗略的屏幕截图: 请注意,每当摄影机围绕对象旋转时,旋转轴都会移动 相反,我得到的结果是角色旋转,如下图所示: 如前所述,当相机移

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

我可以在任何给定的“推动方向”上对对象施加力,这是角色刚体位置减去主摄影机变换位置的乘积(这可以很好地沿摄影机所面对的方向移动角色—“向前”在我的游戏中应该始终是摄影机所面对的方向)

但现在我试着让物体向前旋转——在相机面对的方向上——而不是增加力。我在增加扭矩。[这是我的目标和我的目标轴的一个粗略的屏幕截图:

请注意,每当摄影机围绕对象旋转时,旋转轴都会移动

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

如前所述,当相机移动时,旋转轴会随着相机移动。但我希望对象远离相机,而不是向左旋转。(注意,在两个屏幕截图中,我都让对象在没有重力的情况下悬浮,以尝试调试其旋转)

我的脚本的相关部分如下:

void Start()
{
rb=GetComponent();
向前推=rb.transform.position-
Camera.main.transform.position;
}
无效更新()
{
速度=rb.速度.量级;
向前推=rb.transform.position-Camera.main.transform.position;
if(Input.GetKey(“w”))
{
isForward=true;
}
其他的
{
isForward=false;
}
}
无效固定更新()
{
//如果键已按下,请移动//
if(isForward==true)
{
浮动旋转=输入。GetAxis(“垂直”);
rb.增加扭矩(向前推*扭矩*转动);
Log(“前进”);
}

}
如果我理解正确,为了获得所需的旋转,需要将
向前推
矢量3.down
交叉相乘

即:


代码中的扭矩是什么?@DávidFlorek
torque
是一种用于增加/减少每个输入单元的旋转量的
float
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");
    }
}