我的脚本使GameObject继续前进Input.GetMouseButtonUp(0)
。不幸的是,当我单击时UI Button
,移动功能被触发,导致GameObject移动。
当我按下屏幕上的按钮(UI元素)时,我不希望我的GameObject移动。我想防止在单击UI组件之类的UI组件时移动GameObject Button
。我该如何补救?另外,我想检查鼠标是否在特定的UI元素(2或3个按钮)上单击了
看完你的评论。您需要的是EventSystem.current.IsPointerOverGameObject(),它检查指针是否在UI上。true
当指针位于UI上时,否则为false
。您可以将其与' !
'一起使用,并且仅当鼠标不在UI上方时才运行旋转代码。
对于台式机
if(Input.GetMouseButtonUp(0) && !EventSystem.current.IsPointerOverGameObject())
{
//Your code here
}
//对于手机
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
{
//Your code here
}
上面的解决方案应该可以,但是有一个错误。当在的UI Button
外部按下鼠标按钮时UI Button
,它将注册为单击。因此,基本上,该解决方案仅在您单击UI Button
并释放时才有效UI Button
。如果您在以外发行U Button
,原来的问题将再次出现。
最好的解决方案是使用一个临时boolean
值,并使用来检查最初是否在UI上按下了按钮Input.GetMouseButtonDown
。保存后boolean
,您便可以在Button
与一起使用时使用Input.GetMouseButtonUp(0)
。提供以下解决方案以与Mobile和Desktop一起使用。经过移动测试,可以正常工作。
bool validInput = true;
private void Update()
{
validateInput();
#if UNITY_STANDALONE || UNITY_EDITOR
//DESKTOP COMPUTERS
if (Input.GetMouseButtonUp(0) && validInput)
{
//Put your code here
Debug.Log("Valid Input");
}
#else
//MOBILE DEVICES
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended && validInput)
{
//Put your code here
Debug.Log("Valid Input");
}
#endif
}
void validateInput()
{
#if UNITY_STANDALONE || UNITY_EDITOR
//DESKTOP COMPUTERS
if (Input.GetMouseButtonDown(0))
{
if (EventSystem.current.IsPointerOverGameObject())
validInput = false;
else
validInput = true;
}
#else
//MOBILE DEVICES
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
validInput = false;
else
validInput = true;
}
#endif
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句