我是 C# 编程新手。
我在一个平面上有一个球体刚体。
我想在按下空格键时让这个球体跳跃,然后在松开键时再次弹跳两次。
这并不总是在平面上,它有时会在一个物体上,我希望反弹的高度能够反映从初始跳跃时下降的距离。
我目前有一个相机从一侧面向球体,并让它从设定的距离跟随球。球体可以向任何方向移动,但相机始终保持在同一侧并与球体保持一定距离。
问题是我的代码目前说(据我所知)如果未按下空格键,请尝试将球体的 Y 位置向下移动,然后如果按下空格键,则使球体跳跃,然后在空格键释放时返回。
这段代码的编写方式使我的飞机跳跃,因为当没有按下空格键时,球不断地弹到飞机上,但如果我把那部分拿出来,球就不会掉下来。
示例代码:
public class RollAdvancedScript : MonoBehaviour
{
public Transform camera;
public float posY;
void lol()
{
posY = transform.position.y;
}
void Update()
{
if (Input.GetKey(KeyCode.D))
{
Vector3 vectorToUse = camera.right;
vectorToUse.y = 0;
transform.position += vectorToUse * Time.deltaTime * 5;
}
if (Input.GetKey(KeyCode.A))
{
Vector3 vectorToUse = -camera.right;
vectorToUse.y = 0;
transform.position += vectorToUse * Time.deltaTime * 5;
}
if (Input.GetKey(KeyCode.S))
{
Vector3 vectorToUse = -camera.forward;
vectorToUse.y = 0;
transform.position += vectorToUse * Time.deltaTime * 5;
}
if (Input.GetKey(KeyCode.W))
{
Vector3 vectorToUse = camera.forward;
vectorToUse.y = 0;
transform.position += vectorToUse * Time.deltaTime * 5;
}
if (Input.GetKey(KeyCode.Space))
{
Vector3 vectorToUse = camera.up;
transform.position += vectorToUse * Time.deltaTime * 10;
}
else
{
if ( posY >= 0)
{Vector3 vectorToUse = camera.up;
transform.position -= vectorToUse * Time.deltaTime * 10;
}
else
{
Vector3 vectorToUse = camera.up;
vectorToUse.y = 0;
transform.position -= vectorToUse * Time.deltaTime * 10;
}
}
}
}
示例图像:
请忽略阴影,因为它现在不能正常工作。
TLDR;相对于固定相机位置移动时,使物体在 Keypress 上弹跳和下落的最佳方法是什么?