如何获得在Unity3D中的触摸效果?

问题描述 投票:3回答:2

我正在使用Unity3D制作一个Android应用,它已经可以使用点击检测,但是不能使用触摸。我需要触摸才能进行多点触摸检测。

我想要的:我有我的播放器和2张箭头图像。一箭指向右,一箭指向左。当我触摸向左箭头时,播放器应开始向左移动,当我触摸向右箭头时,播放器应开始向右移动。

但是我如何检测到哪个箭头被触摸(并保持)?我在Google上找到的所有代码都太旧了,无法正常工作。

我正在使用C#脚本,它是2D游戏。

c# android unity3d
2个回答
6
投票

Klausar,您正在寻找的是.........

按钮(!!!)

就这么简单!

  1. 单击“添加画布”。 (您很可能希望“缩放到屏幕尺寸”-选择该选项。)

  2. 单击“添加按钮”。

  3. 没有“三个” ..去喝酒。

在您的代码中,对于右侧按钮有一个类似这样的例程

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

并且左侧按钮具有类似的例程。

1。在编辑器中转到Button

2。只需将脚本拖到该脚本上,然后选择UserClickedRight !!

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

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

((您拖动的游戏对象,上面有问题的脚本。)

您无需进入触摸处理级别即可实现按钮!


现在您问,“按住按钮时如何?”>

非常简单,您只需要了解有关Unity“事件”系统的几件事。

Button中,Unity完成了“ OnClick”的所有工作:

enter image description here

由于“单击”很常见,为方便起见,他们将其正确放置在“检查器”面板中。

好消息是Button具有您可以使用许多其他事件

http://docs.unity3d.com/ScriptReference/UI.Button.html

我的猜测是您要在情况下使用OnPointerDownOnPointerUp

使用其他事件(Unity不会在Inspector面板中放入这些事件很简单,您只是

1,制作一个引用所需事件的脚本,

2,将脚本放到有问题的按钮上...

就这么简单。

逐步说明:

您将使用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上。完成!

您可以将该脚本放在需要该功能的任何按钮上。

接下来,单击带外湾以查看我们目前的位置!

enter image description here

最后,听起来您想做一些“按住按钮时”的操作。那只是一个一般的编程问题-您将有一个布尔值,您可以在按钮上下移动时打开和关闭它]

。开始吧。
    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,字符控制器和音频。享受!


0
投票

您首先应阅读this。您实际上想做的很简单:

© www.soinside.com 2019 - 2024. All rights reserved.