[英]How do I get touch working in Unity3D?
我正在使用 Unity3D 制作一个 Android 应用程序,它已经可以用于点击检测,但不能用于触摸。 我需要触摸进行多点触控检测。
我想要什么:我有我的播放器和 2 张箭头图像。 一个箭头指向右,一个指向左。 当我触摸左箭头时,玩家应该开始向左移动,当我触摸向右箭头时,玩家应该开始向右移动。
但是我如何检测哪个箭头被触摸(并保持)了? 我在谷歌上找到的所有代码都太旧了,不再工作了。
我正在使用 C# 脚本,它是一个 2D 游戏。
克劳萨尔,你要找的是…………
就这么简单!
单击“添加画布”。 (您很可能想要“缩放到屏幕大小” - 选择该选项。)
单击“添加按钮”。
没有“三”..去喝酒。
在您的代码中,为右侧按钮设置这样的例程
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”部分只是意味着它将是“驱动游戏对象”的 ac# 脚本。
在这种情况下,我们必须进一步提醒引擎您将使用这些点击事件。 所以你加了这个。
,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!")
}
}
现在您所要做的就是将该脚本放在按钮上。 完成!
您可以将该脚本放在任何需要该功能的按钮上。
接下来,单击 Obi-wan 以查看我们目前所处的位置!
最后,听起来您想在“按住按钮时”执行某些操作。 这只是一个一般的编程问题 -你有一个布尔值,当按钮上下时打开和关闭。 让我们做吧。
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、角色控制器和音频。 享受!
你应该首先阅读这个。 你想要做的其实很简单:
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:添加了多点触控支持
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.