在unity中从Update传输输入到FixedUpdate。

问题描述 投票:-1回答:1

我读了很多关于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);
    }

}

}

c# unity3d
1个回答
0
投票

当你输入W,A,S和D中的任何一个键时,你会激活与之相关的代码,在 FixedUpdate() 通过你的bools来实现。然而,你没有在代码中的任何地方将你的bool设置为false,所以你的代码在 FixedUpdate() 一直在发射。与其使用bool,为什么不直接将输入代码移到 FixedUpdate() 以及,把bools去掉,看看效果如何?

© www.soinside.com 2019 - 2024. All rights reserved.