我有一个球,球上有一个刚体,我根据第三人称相机的角度(总是盯着球看)给球施加扭矩,相机绕着球旋转。我试图根据相机绕球旋转时的位置来改变球的方向。我正在使用
Vector3.right
用于正向和反向扭矩,以及
Vector3.back
用于右侧和左侧。我有正向/反向值,
rightVal
但我一直在研究左/右值,
backVal
三天了,我不知所措。下面是我如何努力做到这一点的。
void CalcRightVal()
{
float degrees = Camera.main.transform.localEulerAngles.y;
if (degrees > 0 && degrees < 180.0f)
{
rightVal = (-degrees / 360) * 4 + 1;
}
if (degrees > 180.0f && degrees < 360.0f) //
{
rightVal = (-degrees / 360) * 4 + 1;
if (rightVal < -1.0f)
{
rightVal = (degrees / 360) * 4 - 3;
}
}
}
void ApplyTorque()
{
Vector3 dir = new Vector3(rightVal, 0, backVal);
ball.AddTorque(dir * ballAcceleration);
}
在里面
ApplyTorque()
我需要
backVal公司
从0变为-1,即。
矢量3.back
什么时候
degrees == 90
. 然后
backVal公司
当
degrees == 180
然后到1时
degrees == 270
然后返回到0时
degrees == 360
. 这将在相机处于90度时向右施加扭矩,在相机处于270度时向左施加扭矩。其想法是,用户将向forward添加输入,即。
KeyCode.W
添加加速和倒车或
KeyCode.S
休息时间。摄像机将负责改变力的方向。我的数学不差,但这门课把我打败了。
虽然
右Val
为1或-1,
backVal公司
需要为0,反之亦然。这样,当摄像头位于球的正后方或0度时,施加的扭矩将为
Vector3.右
或
(1, 0, 0)
当摄像机处于90度或球的左侧时,施加的扭矩为
矢量3.back
或
(0, 0, -1)
. 这将施加扭矩使球向右转动。基本上,无论相机在哪里,球都会从用户的角度向前滚动。谢谢你的帮助,我们将永远感激你的帮助。
这里有一个帮助的图形。
非常感谢。