我读了很多关于Update和FixedUpdate的文章,但是我想我还是不明白它是如何工作的,我想做的是为 "玩家 "做运动控制,同时从Update读取连续的输入,并将它们传输到FixedUpdate。问题是,它不工作;我是不是做错了什么?我的猜测是我在错误的地方设置了false,但我可能弄错了。编辑:我把FixedUpdate误打成了fixedUpdate。
public float speed;
public GameObject player;
public Rigidbody playerPHY;
bool WisPressed = false;
bool AisPressed = false;
bool SisPressed = false;
bool DisPressed = false;
void Start()
{
player = GameObject.Find("Player");
playerPHY = player.GetComponent<Rigidbody>();
}
void Update()
{
WisPressed = false;
SisPressed = false;
AisPressed = false;
DisPressed = false;
if (Input.GetKeyDown("g"))
{
speed += 0.25f;
}
if (Input.GetKeyDown("h"))
{
speed -= 0.25f;
}
if (Input.GetKey("w"))
{
WisPressed = true;
print(WisPressed);
}
if (Input.GetKey("s"))
{
SisPressed = true;
}
if (Input.GetKey("d"))
{
DisPressed = true;
}
if (Input.GetKey("a"))
{
AisPressed = true;
}
}
void fixedUpdate()
{
if (WisPressed)
{
playerPHY.AddForce(new Vector3(0, 0, 1) * speed, ForceMode.Force);
}
if (SisPressed)
{
playerPHY.AddForce(new Vector3(0, 0, -1) * speed, ForceMode.Force);
}
if (DisPressed)
{
playerPHY.AddForce(new Vector3(1, 0, 0) * speed, ForceMode.Force);
}
if (AisPressed)
{
playerPHY.AddForce(new Vector3(-1, 0, 0) * speed, ForceMode.Force);
}
}
}
当你输入W,A,S和D中的任何一个键时,你会激活与之相关的代码,在 FixedUpdate()
通过你的bools来实现。然而,你没有在代码中的任何地方将你的bool设置为false,所以你的代码在 FixedUpdate()
一直在发射。与其使用bool,为什么不直接将输入代码移到 FixedUpdate()
以及,把bools去掉,看看效果如何?