如何使我的对象在向上/向下悬浮后保持静止?



stack overflow。我正试图为我的个人项目做一个无人机游戏,我需要一些帮助。我想要创造一款无人机游戏,但却止步不前。因为我无法使无人机在悬浮起来或下降后保持在同一位置。在我按下悬浮按钮后,物体要么继续上升,要么继续下降。我在想,如果不知怎的,我将能够保持无人机在相同的Y位置后,我把它上升或下降到某一点。任何帮助都将是感激的,谢谢你的时间,有一个美好的一天!!

代码→

public class Levitating : MonoBehaviour
{
Rigidbody ourDrone;
private void Awake()
{
ourDrone = GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
MovementUpDown();
ourDrone.AddRelativeForce(Vector3.up * upForce);
}
public float upForce;
void MovementUpDown()
{
if (Input.GetKey(KeyCode.E))
{
upForce = 15;
}
else if (Input.GetKey(KeyCode.Q))
{
upForce = -3;
}
}

}

你可以设置一些高度限制,并设置无人机的速度为0一旦他们到达。或者你也可以切换刚体的isKinematic。

float upperLimit = 10;
float lowerLimit = -10;
void MovementUpDown()
{
if (transform.position.y >= upperLimit || transform.position.y < lowerLimit)
{
ourDrone.velocity = Vector3.zero;
ourDrone.angularVelocity = Vector3.zero;
}
if (transform.position.y < upperLimit && Input.GetKey(KeyCode.E))
{
upForce = 15;
}
else if (transform.position.y > lowerLimit && Input.GetKey(KeyCode.Q))
{
upForce = -3;
}
}

它一直朝同一个方向运行的原因是upForce当用户停止按上/下键时永远不会重置。

"real-world"方法将是使无人机的默认速度Vector3与重力相同的值。这使得无人机悬浮。

你可以把这个逻辑放在输入检查

之后
// Make the drone default velocity the same value of the gravity acceleration, with opposite direction
private const Vector3 DRONE_DEFAULT_VELOCITY = new Vector3(0, 9.81f, 0);
public float upForce;
private void Update()
{
MovementUpDown();
}
private void FixedUpdate()
{    
ourDrone.AddRelativeForce(DRONE_DEFAULT_VELOCITY * upForce);
}
void MovementUpDown()
{
if (Input.GetKey(KeyCode.E))
{
upForce = 15;
}
else if (Input.GetKey(KeyCode.Q))
{
upForce = -3;
}
else
{
// Resetting the force muultiplier
upForce = 1
}
}

正如我在上面的示例中所做的那样,还建议将Input检查逻辑放入Update()方法中,并将物理逻辑放入FixedUpdateMethod()中。

Update()方法每帧调用一次,而FixedUpdateMethod()方法只在对象物理更新时调用。

最新更新