Unity Touch 和 UI Element 协同工作

Unity Touch and UI Element works together

我正在制作 2d 平台游戏。我使用 UI 元素进行拍摄,角色通过触摸屏幕移动。

从而移动角色

void Update()
{
    if (Input.touches.Length>0) {
        Touch firstTouch = Input.GetTouch (0);
        if (firstTouch.phase == TouchPhase.Began) {
            if (firstTouch.position.x > ScreenCenterX) {
                sagHareketBasili ();//Move Right
            } 
            if (firstTouch.position.x < ScreenCenterX) {
                solHareketBasili ();//Move Left
            } 
        } else 
            sagHareketBasiliDegil ();//Stop
            solHareketBasiliDegil ();//Stop
        }
    }
}

所以我在网上做了一些研究。我将代码更改为

void Update()
{
    if (Input.touches.Length>0) {
        if (!EventSystem.current.IsPointerOverGameObject ()) {
            Touch firstTouch = Input.GetTouch (0);
            if (firstTouch.phase == TouchPhase.Began) {
                if (firstTouch.position.x > ScreenCenterX) {
                    sagHareketBasili ();
                } 
                if (firstTouch.position.x < ScreenCenterX) {
                    solHareketBasili ();
                } 
            } else if (firstTouch.phase == TouchPhase.Ended) {
                sagHareketBasiliDegil ();
                solHareketBasiliDegil ();
            }
        }
    }
}

看来问题解决了。但不是。 首先,当我触摸到 UI 元素之外时,角色会移动。如果我第一次接触 UI 元素,角色会移动并且 UI 元素起作用(两者不应该一起起作用)。如果我第二次触摸 UI 元素,我会成功完成我想做的事情(只是 UI 元素有效)。也就是说,角色不会移动并且 UI 工作正常。 其次,在我触摸 UI 元素之后,如果我想让角色移动并触摸到 UI 元素之外,第一次触摸没有任何反应,但是第二次和更多触摸角色开始按照我的意愿移动。

在 UI 个元素中,我使用了按钮和事件触发器。

关于这方面的任何帮助...

您可以创建两个大的透明按钮,一个覆盖屏幕的左半边,另一个覆盖屏幕的右半边,而不是使用 Input.Touch。并在每个按钮的OnClick事件中分别调用左移和右移代码。由于这两个按钮都位于您常用的 UI 下方,因此如果您与其他 UI 互动,它们将不会被触发。并将它们的透明度设置为 0,以便您可以看到它们背后的游戏玩法。