Dak*_*ake 3 c# unity-game-engine
我的脚本使GameObject继续前进Input.GetMouseButtonUp(0).不幸的是,当我点击a时UI Button,会触发移动功能,导致GameObject移动.
当我按下屏幕上的按钮(UI元素)时,我不希望我的GameObject移动.我想阻止GameObject在点击UI组件时移动,例如Button?我该如何解决这个问题?此外,我想检查鼠标是否被特定 UI元素(2或3个按钮)点击
看完你的评论后.你需要的是EventSystem.current.IsPointerOverGameObject(),它检查指针是否在UI之上.true当指针在UI上时,否则false.您可以将它与' !' 一起使用,并且仅当鼠标不在UI上时才运行旋转代码.
对于桌面
if(Input.GetMouseButtonUp(0) && !EventSystem.current.IsPointerOverGameObject())
{
//Your code here
}
Run Code Online (Sandbox Code Playgroud)
//适用于移动设备
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
{
//Your code here
}
Run Code Online (Sandbox Code Playgroud)
上面的解决方案应该有效,但有一个错误.当鼠标按钮按下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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5480 次 |
| 最近记录: |