如何在Unity3D中实现触摸功能?

3
我正在使用Unity3D制作Android应用程序,已经实现了点击检测,但触摸检测还没有。我需要触摸检测来进行多点触控。
我的要求是:我有一个玩家和两个箭头图像。一个箭头向右,另一个箭头向左。当我触摸左箭头时,玩家应该开始向左移动;当我触摸右箭头时,玩家应该开始向右移动。
但是如何检测哪个箭头被触摸(并保持触摸)?我在Google上找到的所有代码都太旧了,不再起作用。
我正在使用C#脚本,并且这是一个二维游戏。

2
检测触摸很容易。但要检测触摸并保持按住状态需要对C#有深入的了解,因为其中涉及到许多逻辑。如果您提供不起作用的代码,也许有人可以帮助您。 - Programmer
我刚意识到,朋友@Klausar正在描述……一个按钮!! - Fattie
2个回答

6

Klausar,你需要的是一个按钮……

一个按钮(!)

就那么简单!

  1. 点击“添加画布”。 (你很可能想要“缩放到屏幕大小”- 选择该选项。)

  2. 点击“添加按钮”。

  3. 没有“三”……去喝酒吧。

在你的代码中,为右侧按钮编写如下例程:

public void UserClickedRight()
 {
 Debug.Log("click right whoo!");
 }

并且对于左侧按钮也有类似的例程。

1. 在编辑器中进入您的

2. 只需将脚本拖到它上面,然后选择 !!

您实际上不必从头开始编写按钮程序 :)

这是Unity的基本机制-将游戏对象拖动到编辑器中的“插槽”中。

(您拖动的游戏对象具有相关的脚本。)

您无需进行触摸处理即可实现按钮!


现在你会问,“按住按钮时怎么办”?

很简单,您只需要了解一些关于Unity“事件”系统的知识。


谢谢!所以在这个例子中,多点触控已经可以工作了吗?例如,如果我有一个按钮来射击和向左走,我可以同时按下两个按钮吗? - Klausar
是的,去吧。Unity的UI系统非常棒。 - Fattie
谢谢!我尝试了一下,它起作用了。不过,我无法按住按钮,它只检测到MouseDown事件。有什么解决方法吗? - Klausar
@Fattie 谢谢你,但是有没有更高效的方法在不使用update和破坏漂亮按钮脚本的情况下运行代码呢?比如我想在两个bool按钮状态下执行两个任务,但只执行一次。 - Muhammad Faizan Khan

0

你应该先阅读this。 你想要做的事情实际上很简单:

foreach (Touch touch in Input.touches) {

    if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary)
        if (guiTexture1.HitTest(touch.position)) {

            // Maybe move left
        }
        if (guiTexture2.HitTest(touch.position)) {

            // Maybe move right
        }
    }
}

编辑1:该代码现在检查哪个图像被按下
编辑2:添加了多点触控支持


如果他只想检测屏幕上的触摸/帮助,那么这个方法本来是可行的。但他想要检测两个不同箭头的触摸。这段代码无法确定哪个箭头被触摸了。 - Programmer
谢谢,这真的帮了我很多。在这个例子中,多点触控已经可以工作了吗?我也可以使用gameObject代替GUI对象吗? - Klausar
我重新编辑了我的代码,现在它会检查Input.touches中的每一个触摸。如果你想测试用户是否“触摸”了一个GameObject,你可以使用Physics.Raycast(Camera.main.ScreenPointToRay(touch.position))。 - Stolous
不幸的是,如果您有一个UI层(几乎肯定会有),那么这些都不起作用,您现在必须为此麻烦重新做一切。http://answers.unity3d.com/questions/784617/how-do-i-block-touch-events-from-propagating-throu.html - Fattie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接