堆栈溢出的人。我想为学校的个人项目制作一个无人机游戏。一切都进行得很顺利,但我现在面临一个问题。当我按下选定的按钮时,我的无人机脚本不会使无人机保持在一个恒定的高度。换句话说,当我按下E或Q键时,无人机会持续上升或持续下降。我希望只要我按下所选的键,它就会上升。我该怎么做?
代码->
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Levitating : MonoBehaviour
{
Rigidbody ourDrone;
private void Awake()
{
ourDrone = GetComponent<Rigidbody>();
}
// Make the drone default velocity the same value of the gravity acceleration, with opposite direction
private 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;
}
}
}
发布于 2021-09-25 12:55:59
问题是你的物理是错的。在默认模式下(upForce = 1),你要取消重力,所以没有加速度作用于你的rb。然而,当你按下一个控制按钮的时候,你增加了一个力,因此,按照牛顿定律,你加入了一个加速度,这会导致一个速度,即使你停止按下这个按钮,速度也会保持不变。现在,我不知道你为什么要像你一样对它建模,但最简单的解决方法是在你的刚体上禁用重力,直接修改rb的速度。或者在您的forceMode中使用不同的AddForce。https://docs.unity3d.com/ScriptReference/ForceMode.html使用速度变化。
如果你想像现实生活中那样对一个真正的无人机建模,你应该研究一下控制系统,比如PID,但这可能是过头了。
祝你好运
https://stackoverflow.com/questions/69324934
复制相似问题