Kla*_*sar 3 c# android unity-game-engine
我正在使用Unity3D制作Android应用程序,它已经可以使用点击检测功能,但不能通过触摸进行操作.我需要触摸才能进行多点触控检测.
我想要的是:我有我的播放器和2个箭头图像.一个箭头指向右侧,一个指向左侧.当我触摸左箭头时,玩家应该开始向左移动,当我触摸右箭头时,玩家应该开始向右移动.
但是,如何检测触摸(并保持)哪个箭头?我在Google上找到的所有代码都太旧了,不再有用了.
我正在使用C#脚本,这是一款2D游戏.
Klausar,你要找的是.........
就这么简单!
单击"添加画布".(您很可能希望"缩放到屏幕大小" - 选择该选项.)
单击"添加按钮".
没有"三"..去喝酒.
在你的代码中,为右键创建一个这样的例程
public void UserClickedRight()
{
Debug.Log("click right whoo!");
}
Run Code Online (Sandbox Code Playgroud)
并为"左"按钮设置了类似的例程.
Button编辑器中.UserClickedRight!!你实际上没有从头开始编程按钮:)
这是Unity的基本机制 - 在编辑器中将游戏对象拖动到"插槽".
(您拖动的游戏对象,上面有相关的脚本.)
您无需进入触摸操作级别即可实现按钮!
这很简单,你只需要了解Unity"事件"系统的一些事情.
在Button,Unity已完成"OnClick"的所有工作:
由于"点击"很常见,为了方便起见,他们将这一个放在Inspector面板中.
好消息是,Button有许多可以使用更多的事件.
http://docs.unity3d.com/ScriptReference/UI.Button.html
我的猜测是,你要使用OnPointerDown,并OnPointerUp在您的案件.
使用其他事件(Unity没有把它放在Inspector面板中)非常简单,你就是这样
和,
就这么简单.
分步说明:
您将使用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,角色控制器和音频.请享用!
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |