结合使用Unity UI Toolkit和新输入系统

问题描述 投票:0回答:1

我正在使用 Unity UI Toolkit 和新输入系统。

我的游戏逻辑是当我按下鼠标左键时,对象应该开始移动。视图中还有一个电源按钮,我使用 UI Toolkit 创建并编写了这样的脚本。

void Start()
    {
        VisualElement menuRoot = GetComponent<UIDocument>().rootVisualElement;
        Button firstPowerUp = menuRoot.Q<Button>("first_power_up");

        firstPowerUp.clicked += () => {
            Perform();
        };
    }

    void Perform()
    {
        Debug.Log("Clicked on power-up!");
    }

按钮可以工作,好吧。但输入操作也有效。所以,我的按钮和对象移动一起工作。我该如何解决这个问题或单独的输入系统?

我尝试了很多方法:

  1. 单击 UI 按钮时禁用 InputAction
  2. 尝试将 EventSystem 与 EventSystem.current.IsPointerOverGameObject() 一起使用
  3. 研究了 UI maskers,但我认为解决方案应该更简单
  4. 尝试更改 UI Builder 等中的一些属性。
c# unity-game-engine google-play-games unity-ui
1个回答
0
投票

看起来您不需要每次单击时都移动对象(例如按钮单击的情况),因此您不应该将鼠标单击直接绑定到对象移动。

1,创建脚本,当您执行鼠标单击而不是旧的移动脚本时,该脚本将收到信号。

2、将此检查添加到新脚本中:

if (!EventSystem.current.IsPointerOverGameObject())
   {
       //cursor isn't over ui, move object now
   }
   else
   {
       //cursor is over some ui, don't move object 
   }




    
© www.soinside.com 2019 - 2024. All rights reserved.