Unity 说"无法将浮点数转换为 UnityEngine.Vector3"



我正在飞行模拟器上工作。在代码的某个地方,我使用升力公式和阻力公式来生成飞机的升力和阻力。然后我说,float totalForce = lift + drag,然后说rb.AddForce(totalForce)。但问题是,在float totalForce = lift + drag行上,它显示了一个错误"无法将float转换为UnityEngine.VVector3'这是代码(如果可以,请告诉我如何制作飞机物理的提示!(

using System.Collections.Generic;
using UnityEngine;
public class PlanePhysics : MonoBehaviour
{
public Rigidbody rb;
public float liftAngle = 6.2f;
public float zeroliftAoA = 0f;
public float stallAngle = 15f;

public Quaternion rotation;
void Start()
{

}
// Update is called once per frame
void Update()
{

float lift = 9f * (1.225f * 2.5f * 2.5f) / 2f * 174f;
float drag = .04f * (1.225f * 2.5f * 2.5f) / 2f * 174f;
Vector3 TotalForce = lift + drag;
rb.AddForce(TotalForce);
float yokeDescend = Input.GetAxis("Vertical");
float yokeRoll = Input.GetAxis("Horizontal");
print(yokeDescend);
if (Input.GetKey(KeyCode.DownArrow))
{
transform.Rotate(0f, 0f, 1f);

}
if ((Input.GetKey(KeyCode.UpArrow)))
{
transform.Rotate(0f, 0f, -1f);

}
}

}
float lift = 9f * (1.225f * 2.5f * 2.5f) / 2f * 174f;
float drag = .04f * (1.225f * 2.5f * 2.5f) / 2f * 174f;
Vector3 TotalForce = lift + drag;

当您创建一个Vector3对象时,您试图表示两个事物中的一个,在三维空间中进行坐标,例如游戏世界中位置(x=1,y=2,z=1(的GameObject。或者,你试图代表一种力量,比如你的案例。

当你定义一个力时,你必须定义这个力有多大,通常是一个常数,比如lift。但是,您还必须定义应施加力的方向

在升降机的情况下,传统的方向是向上的,因为升降机。。把飞机抬起来。

为了将方向添加到lift,可以将lift乘以上方向,上方向由Vector3(0,1,0(表示。

例如

float lift = 9f * (1.225f * 2.5f * 2.5f) / 2f * 174f * Vector3.up;

拖动也可以做同样的事情(我认为是向后拖动(。

为此,您需要将其与游戏对象的负正向相乘。

例如

float drag = .04f * (1.225f * 2.5f * 2.5f) / 2f * 174f * -gameobject.transform.forward;

如果您想使用自定义方向,可以使用Vector3构造函数new Vector3(x y,z)

这不是物理问题,而是编程问题。"无法将float转换为UnityEngine.VVector3"日志错误已清除。Vector3和float是不同的类型,因此不能将float添加到Vector3中。要添加和减少内容,它们必须具有相同的类型。还有其他弱类型编程语言可以让你添加/减少不同的东西,但如果强制转换该语言已经定义的内容,那么这只是一种预定义的方式,这样就有了一个可配置的结果。例如,在javascript中,您可以执行var z = "Hello" + 5;,结果为Hello5

如果你需要向刚体添加一个力,它必须是一个矢量大小,有一个模块(力的量(和一个方向(力的方向(,这意味着它应该是一个Vector3

将标量大小作为力添加到刚体上没有任何意义。它可以被理解为电流面向身体方向的附加力,为此你需要做:

float totalForceMagnitude = lift + drag;
Vector3 totalForce = transform.forward * totalForceMagnitude; 
rb.AddForce(totalForce );

相关内容

最新更新