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,以便您可以看到它们背后的游戏玩法。
我正在制作 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,以便您可以看到它们背后的游戏玩法。