是否有C#代码统一标识何时按下按钮以及何时释放按钮?

时间:2019-05-29 12:42:56

标签: c# unity3d

我目前正在尝试在C#中设置代码,以识别何时按下某个按钮以及何时释放该按钮

我正在尝试使此按钮在按下时缩小,在释放时放大

public class clickshake : MonoBehaviour
{
    public GameObject click;
    public void Update()
    {    
        if (Input.GetMouseButtonDown(0))
        {
           transform.localScale += new Vector3(-0.1F, -0.1f, 0);
        }
        if (Input.GetMouseButtonUp(0))
        {
           transform.localScale += new Vector3(0.1F, 0.1f, 0);
        }
    }
}

通过将此脚本设置为On Click命令中的按钮专有 它只会增大按钮的大小,而不会缩小按钮

2 个答案:

答案 0 :(得分:3)

  

使此脚本专用于其On Click命令中的按钮

这毫无意义。尤其是因为Update方法每帧都一直被调用。因此,另外从onClick调用它会在该帧中调用两次。同样来自Button.onClick

  

请注意,EventType.MouseDownEventType.MouseUponClick之前被调用。


您可以例如使用IPointerDownHandlerIPointerUpHandler接口来实现该功能

public class clickshake : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
{
    //Detect current clicks on the GameObject (the one with the script attached)
    public void OnPointerDown(PointerEventData pointerEventData)
    {
        transform.localScale -= new Vector3(0.1F, 0.1f, 0);
    }

    //Detect if clicks are no longer registering
    public void OnPointerUp(PointerEventData pointerEventData)
    {
        transform.localScale += new Vector3(0.1F, 0.1f, 0);
    }
}

注意

  

确保场景中存在EventSystem,以允许单击检测。要检测非UI 游戏对象上的点击,请确保将PhysicsRaycaster连接到相机。

当然,非UI课程对象也需要Collider

答案 1 :(得分:1)

Input.GetMouseButtonDown(0)是在按下按钮 时触发的,因为在按下按钮时调用它,所以不会触发。

  

Input.GetMouseButtonDown

     

在用户按下给定鼠标键的帧期间返回true。

https://docs.unity3d.com/ScriptReference/Input.GetMouseButtonDown.html

尝试使用Input.GetMouseButton(0)代替。

或在OnClick()之外的其他地方调用它。

但是请注意,Input.GetMouseButton(0)如果处于循环中,因为它将检测到按下按钮的时间,将触发多次。

编辑 触发是指它返回True,因此会触发您的if