Can';我不理解Unity3d飞行脚本

Can';我不理解Unity3d飞行脚本,unity3d,unityscript,Unity3d,Unityscript,我想用Unity3d做一个飞行模拟。首先,我使用了rigidbody.addforce(),但旋转时的运动响应不好,因此我期待使用Unity3d样本,并尝试使用它们的代码来控制飞机。它工作得很好,但我不明白它是如何工作的。代码如下: var newVelocity = Vector3.Lerp(rig.velocity, -transform.forward * EnginePower,

我想用Unity3d做一个飞行模拟。首先,我使用了
rigidbody.addforce()
,但旋转时的运动响应不好,因此我期待使用Unity3d样本,并尝试使用它们的代码来控制飞机。它工作得很好,但我不明白它是如何工作的。代码如下:

var newVelocity = Vector3.Lerp(rig.velocity, 
                               -transform.forward * EnginePower,
                               EnginePower * Time.deltaTime);

Debug.Log("Velocity:     " + rig.velocity + 
          "Forward:      " + -transform.forward * EnginePower + 
          "Vector3.Lerp: " + Vector3.Lerp(rig.velocity, -transform.forward * EnginePower, EnginePower * Time.deltaTime));

rig.velocity = newVelocity;
此代码位于
Update()
函数中,我测试了它并试图将其设置为
Start()
,飞机正在移动,但没有对旋转做出响应。我试着调试,看看有什么变化,问题是没有什么变化这么大


我只是不明白它是如何工作的。

您应该在
Update()
函数中调用它,因为它应该运行每一帧
Vector3.Lerp()
在两个3D向量()之间进行线性插值

函数的第一个参数,我们称之为向量A,
rig.velocity
,是飞机的当前速度
-transform.forward*发动机功率
,矢量B是向后的方向,与发动机功率成比例-可能与用户输入(燃气表)相连

我不确定为什么
变换。向前
-
相反,但lerp所做的是返回一个新的向量,从向量a到向量B,用因子缩放。如果因子为0,则返回向量A。如果因子为1,则返回向量B

在您的代码中,刻度为
EnginePower*Time.deltaTime
,其中
Time.deltaTime
是自上一帧开始的时间(以秒为单位),如果运行60 FPS,则为0.016秒。所以,你可以理解,比例变得非常小,因此
Lerp
返回一个非常接近你当前速度的向量,但非常接近向量B。下一帧,它的比例更大,更大,等等。我希望这能提高你的理解力

您可以使用绘制向量,如下所示:

 Debug.DrawLine(transform.position, rig.velocity, Color.red);
 Debug.DrawLine(transform.position, -transform.forward * EnginePower, Color.green);

这将绘制两条线,表示要传递给
Lerp
的向量。这些线都是小控件,请确保在编辑器窗口中打开小控件以显示它们(右上角,统计按钮旁边)。

非常感谢。编辑和帮助。问题是我看到了vector3.lerp的调试返回,它实际上大部分时间都与rigidbody.velocity相同。但是,当我增加EnginePower值时,对象运行得更快,所有东西都移动得很好,但vector3.lerp没有变化。问题是我不知道它的工作方式!!!!哦,现在我拿到了,非常感谢;)@FDM.Pro很乐意帮忙!