Unity3d中Input获取键的按下或者弹起,无法正确响应的问题

在项目中碰到这样一个问题,同事在FixedUpdate中处理当按下鼠标左键时,触发一个逻辑,例如:

 public void FixedUpdate()
        {
            if (Input.GetMouseButtonDown(0))
            {
                Debug.Log("get mouse button down!");
            }
        }

问题来了,并不是每次鼠标按下都会输出语句,给人的感觉像是鼠标坏了,最后找到了问题的原因,在官网中是这样解释的

You need to call this function from the Update function, since the state gets reset each frame. It will not return true until the user has released the mouse button and pressed it again. button values are 0 for left button, 1 for right button, 2 for the middle button.

这里提到这个函数需要放到Update中,每帧都会重置鼠标按下的状态。原因找到了,因为FixedUpdate和Update的刷新率不同导致的。如果确实需要在FixedUpdate中执行逻辑,可以这些写

private bool action = false;
        void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                action = true;
            }
        }

        public void FixedUpdate()
        {
            if (action)
            {
                action = false;
                Debug.Log("get mouse button down!");
            }
        }

其他的按键按下和弹起,都应放在Update中。



你可能感兴趣的:(随手笔记)