我正在使用Unity3D制作Android应用程序,已经实现了点击检测,但触摸检测还没有。我需要触摸检测来进行多点触控。我的要求是:我有一个玩家和两个箭头图像。一个箭头向右,另一个箭头向左。当我触摸左箭头时,玩家应该开始向左移动;当我触摸右箭头时,玩家应该开始向右移动。但是如何检测哪个箭头被触摸(并保持触摸)?我在Google上找到的所有代码都太旧了,不再起作用。我正在使用C#脚本,并且这是一个二维游戏。
Klausar,你需要的是一个按钮…… 一个按钮(!) 就那么简单! 点击“添加画布”。 (你很可能想要“缩放到屏幕大小”- 选择该选项。) 点击“添加按钮”。 没有“三”……去喝酒吧。 在你的代码中,为右侧按钮编写如下例程: public void UserClickedRight() { Debug.Log("click right whoo!"); } 并且对于左侧按钮也有类似的例程。 1. 在编辑器中进入您的。 2. 只需将脚本拖到它上面,然后选择 !! 您实际上不必从头开始编写按钮程序 :) 这是Unity的基本机制-将游戏对象拖动到编辑器中的“插槽”中。 (您拖动的游戏对象具有相关的脚本。) 您无需进行触摸处理即可实现按钮! 现在你会问,“按住按钮时怎么办”? 很简单,您只需要了解一些关于Unity“事件”系统的知识。 在中,Unity已经为“OnClick”完成了所有工作: 由于“click”很常见,因此他们为了方便将其放在检查器面板中。 好消息是,Button有更多可用的事件。 http://docs.unity3d.com/ScriptReference/UI.Button.html 我猜你想在编程中使用OnPointerDown和OnPointerUp。要使用其他事件(Unity没有放在检查器面板中的事件)非常简单,只需:1. 编写一个引用所需事件的脚本,2. 将该脚本放在相关按钮上即可。如此简单易行。步骤详解如下:你将使用Unity的事件系统,因此: using UnityEngine.EventSystems; 下一步。你知道脚本通常是这样开始的... public class FancyButton:MonoBehaviour “MonoBehaviour”部分表示这是一个C#脚本,将“驱动一个游戏对象”。在这种情况下,我们必须进一步告诉引擎您将使用这些点击事件。因此,您需要添加这个。,IPointerDownHandler,IPointerUpHandler 到目前为止,我们有这个。using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class FancyButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler { 现在是容易的部分。 当发生那些事情时,您只需输入两个例程,Unity将为您运行它们。using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class FancyButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler { public void OnPointerDown(PointerEventData data) { Debug.Log("holy! someone put the pointer down!") } public void OnPointerUp(PointerEventData data) { Debug.Log("whoa! someone let go!") } } 现在你只需要将该脚本拖放到按钮上即可。完成!您可以将该脚本放置在任何需要该功能的按钮上。接下来,单击奥比万以查看我们目前的进度! 最后,您似乎想在“按住按钮时做某事”。这只是一个一般的编程问题 - 您需要一个布尔变量,当按钮上下移动时打开和关闭。让我们开始吧。 using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class FancyButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler { [System.NonSerialized] public bool mouseIsDownRightNow; public void OnPointerDown(PointerEventData data) { mouseIsDownRightNow = true; } public void OnPointerUp(PointerEventData data) { mouseIsDownRightNow = false; } } 你可以从另一个脚本或其他地方访问该变量。如果你想在按钮按下时运行例程,请添加以下内容: void Update() { if (buttonIsDownRightNow) WhileButtonIsDown(); } private void WhileButtonIsDown() { Debug.Log("THE BUTTON IS DOWN! WHOA!"); } 请尝试按住和松开按钮时观察控制台。这是一个示例,类似于在按钮按下时持续增加值: using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class FancyButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler { [System.NonSerialized] public bool buttonIsDownRightNow; private int countSomething; public void OnPointerDown(PointerEventData data) { buttonIsDownRightNow = true; } public void OnPointerUp(PointerEventData data) { buttonIsDownRightNow = false; } private void WhileButtonIsDown() { ++countSomething; } void Update() { if (buttonIsDownRightNow) WhileButtonIsDown(); Debug.Log("value is now " +countSomething.ToString()); } } 这就是全部内容。一旦你真正理解了Unity中的事件,关于Unity的学习就没什么更多要学的了。其他重要主题只有Mecanim、着色器编写、触摸、协程、线程、PhysX、本地插件、精灵、网络、动态网格、导航、VR、AR、动画、反向运动学、粒子、地形、IAP、照明、烘焙、阴影、MMP、角色控制器和音频。享受吧!
你应该先阅读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:添加了多点触控支持