我正在使用Unity3D制作一个Android应用,它已经可以使用点击检测,但是不能使用触摸。我需要触摸才能进行多点触摸检测。
我想要的:我有我的播放器和2张箭头图像。一箭指向右,一箭指向左。当我触摸向左箭头时,播放器应开始向左移动,当我触摸向右箭头时,播放器应开始向右移动。
但是我如何检测到哪个箭头被触摸(并保持)?我在Google上找到的所有代码都太旧了,无法正常工作。
我正在使用C#脚本,它是2D游戏。
Klausar,您正在寻找的是.........
就这么简单!
单击“添加画布”。 (您很可能希望“缩放到屏幕尺寸”-选择该选项。)
单击“添加按钮”。
没有“三个” ..去喝酒。
在您的代码中,对于右侧按钮有一个类似这样的例程
public void UserClickedRight()
{
Debug.Log("click right whoo!");
}
并且左侧按钮具有类似的例程。
Button
。UserClickedRight
!!您实际上不必从头开始编写按钮:)
这是Unity的基本机制-在编辑器中将游戏对象拖到“插槽”。
((您拖动的游戏对象,上面有问题的脚本。)
您无需进入触摸处理级别即可实现按钮!
非常简单,您只需要了解有关Unity“事件”系统的几件事。
在Button
中,Unity完成了“ OnClick”的所有工作:
由于“单击”很常见,为方便起见,他们将其正确放置在“检查器”面板中。
好消息是Button
具有您可以使用许多其他事件
http://docs.unity3d.com/ScriptReference/UI.Button.html
我的猜测是您要在情况下使用OnPointerDown
和OnPointerUp
。
使用其他事件(Unity不会在Inspector面板中放入这些事件很简单,您只是
和
就这么简单。
逐步说明:
您将使用Unity的事件系统,所以:
using UnityEngine.EventSystems;
下一个。您知道脚本通常是这样启动的...
public class FancyButton:MonoBehaviour
“ MonoBehaviour”部分仅表示它是一个c#脚本,它将“驱动GamObject”。
在这种情况下,我们必须进一步提醒引擎您将使用这些单击事件。因此,您添加此。
,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!") } }
现在您要做的就是将该脚本放在Button上。完成!
您可以将该脚本放在需要该功能的任何按钮上。
接下来,单击带外湾以查看我们目前的位置!
最后,听起来您想做一些“按住按钮时”的操作。那只是一个一般的编程问题-您将有一个布尔值,您可以在按钮上下移动时打开和关闭它]
。开始吧。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。您实际上想做的很简单: