在Unity中,你需要检测场景中某些东西的手指触摸(手指绘图).
在现代Unity中执行此操作的唯一方法非常简单:
第1步.在该物体上放置一个对撞机.("地面"或其他任何东西.)1
步骤2.在相机的"检查器"面板上,单击以添加物理雷达(相关的2D或3D).
步骤3.只需使用下面的示例A中的代码.
(提示 - 不要忘记确保有一个EventSystem ......有时Unity会自动添加一个,有时不会!)
太棒了,不容易.Unity最终通过UI层正确处理un /传播.在桌面,设备,编辑器等上均匀而完美地工作.万岁Unity.
都好.但是如果你想在屏幕上画画呢?
因此,您非常简单地想要"在屏幕上"从用户那里滑动/触摸/绘图.(例如,简单地说就是操作轨道摄像机.)就像在任何普通的3D游戏中,摄像机四处奔跑并移动.
你不希望手指在世界空间中的某个物体上的位置,你只需要抽象的"手指运动"(即在玻璃上的位置).
你用什么对撞机?没有对撞机你能做到吗?由于这个原因,添加对撞机似乎很愚蠢.
我们做的是这样的:
我只是做了某种平面对撞机,实际上是把它安装在相机下面.所以它只是坐在相机平截头体上并完全覆盖屏幕.
(对于代码,则不需要使用ScreenToWorldPoint,因此只需使用示例B中的代码 - 非常简单,效果很好.)
我的问题是,使用我所描述的"镜头下相机"似乎有点奇怪,只是为了触摸玻璃.
这是什么交易?
(注意 - 请不要回答涉及Unity古老的"Touches"系统,这个系统今天对于真实项目无法使用,你不能忽视.UI使用传统方法.)
代码示例A - 在场景对象上绘图.使用ScreenToWorldPoint.
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class FingerMove:MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler
{
public void OnPointerDown (PointerEventData data)
{
Debug.Log("FINGER DOWN");
prevPointWorldSpace =
theCam.ScreenToWorldPoint( data.position );
}
public void OnDrag (PointerEventData data)
{
thisPointWorldSpace =
theCam.ScreenToWorldPoint( data.position ); …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个3D点击以在Unity3D中移动游戏.
我添加了一个UI Button(使用UnityEngine.UI),我想最终点击以打开和关闭运行.
然而,点击Button实际上似乎是点击进入场景(在我的情况下UnityEngine.UI.Button导航)并导致我的播放器移动到不同的位置.
如何禁用光线投射以单击UI按钮或以某种方式让UI捕获自己的事件?
我一直在使用典型的Unity3D代码让用户进入游戏玩法等
if (Input.GetMouseButtonDown(0))
{
Run Code Online (Sandbox Code Playgroud)
如果我尝试这种方法也一样
if( Input.touches.Length > 0 )
{
if ( Input.touches[0].phase == TouchPhase.Began )
{
Run Code Online (Sandbox Code Playgroud)
在iOS,Android和桌面上似乎就是这种情况.
这似乎是一个基本问题,点击UI(Button等)似乎落入游戏玩法.