我目前正在尝试在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命令中的按钮专有 它只会增大按钮的大小,而不会缩小按钮
答案 0 :(得分:3)
使此脚本专用于其On Click命令中的按钮
这毫无意义。尤其是因为Update
方法每帧都一直被调用。因此,另外从onClick
调用它会在该帧中调用两次。同样来自Button.onClick
请注意,
EventType.MouseDown
和EventType.MouseUp
在onClick
之前被调用。
您可以例如使用IPointerDownHandler
和IPointerUpHandler
接口来实现该功能
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