如何在Unity3D中触摸工作?

Kla*_*sar 3 c# android unity-game-engine

我正在使用Unity3D制作Android应用程序,它已经可以使用点击检测功能,但不能通过触摸进行操作.我需要触摸才能进行多点触控检测.

我想要的是:我有我的播放器和2个箭头图像.一个箭头指向右侧,一个指向左侧.当我触摸左箭头时,玩家应该开始向左移动,当我触摸右箭头时,玩家应该开始向右移动.

但是,如何检测触摸(并保持)哪个箭头?我在Google上找到的所有代码都太旧了,不再有用了.

我正在使用C#脚本,这是一款2D游戏.

Fat*_*tie 6

Klausar,你要找的是.........

一个按钮 (!!!)

就这么简单!

  1. 单击"添加画布".(您很可能希望"缩放到屏幕大小" - 选择该选项.)

  2. 单击"添加按钮".

  3. 没有"三"..去喝酒.

在你的代码中,为右键创建一个这样的例程

public void UserClickedRight()
 {
 Debug.Log("click right whoo!");
 }
Run Code Online (Sandbox Code Playgroud)

并为"左"按钮设置了类似的例程.

1.转到Button编辑器中.

2.只需将脚本拖到它并选择UserClickedRight!!

你实际上没有从头开始编程按钮:)

这是Unity的基本机制 - 在编辑器中将游戏对象拖动到"插槽".

(您拖动的游戏对象,上面有相关的脚本.)

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


现在你问,"当按下按钮时"怎么办?

这很简单,你只需要了解Unity"事件"系统的一些事情.

Button,Unity已完成"OnClick"的所有工作:

在此输入图像描述

由于"点击"很常见,为了方便起见,他们将这一个放在Inspector面板中.

好消息是,Button许多可以使用更多的事件.

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

我的猜测是,你要使用OnPointerDown,并OnPointerUp在您的案件.

使用其他事件(Unity没有把它放在Inspector面板中)非常简单,你就是这样

1,制作一个引用你想要的事件的脚本,

和,

2,你把那个脚本放在有问题的按钮上......

就这么简单.

分步说明:

您将使用Unity的事件系统,因此:

  using UnityEngine.EventSystems;
Run Code Online (Sandbox Code Playgroud)

下一个.你知道脚本通常会像这样开始......

 public class FancyButton:MonoBehaviour
Run Code Online (Sandbox Code Playgroud)

"MonoBehaviour"部分仅仅意味着它是一个"驱动GamObject"的ac#脚本.

在这种情况下,我们必须进一步警告引擎您将使用这些点击事件.所以你加上这个.

,IPointerDownHandler,IPointerUpHandler
Run Code Online (Sandbox Code Playgroud)

到目前为止,我们有这个

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class FancyButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler
    {
Run Code Online (Sandbox Code Playgroud)

现在很容易的部分.

您只需键入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!")
  }
}
Run Code Online (Sandbox Code Playgroud)

现在您要做的就是将该脚本放在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;
            }
        }
Run Code Online (Sandbox Code Playgroud)

您可以从另一个脚本或任何您想要的任何脚本访问该变量.

如果要在按钮关闭时运行例程,请添加以下内容:

    void Update()
        {
        if (buttonIsDownRightNow) WhileButtonIsDown();
        }
    private void WhileButtonIsDown()
        {
        Debug.Log("THE BUTTON IS DOWN! WHOA!");
        }
Run Code Online (Sandbox Code Playgroud)

在按住按钮的同时尝试并观察控制台.

这是一个在按钮关闭时不断增加值的示例:

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());
        }
    }
Run Code Online (Sandbox Code Playgroud)

这里的所有都是它的.一旦你真正理解了Unity中的事件,就没有更多的东西可以学习Unity了.

唯一的其他重要主题是Mecanim,着色器书写,触摸,协同程序,线程,PhysX,原生插件,精灵,网络,动态网格,导航,VR,AR,动画,反向运动学,粒子,地形,IAP,照明,烘焙,阴影,MMP,角色控制器和音频.请享用!