看看Unity论坛和问答网站中的一些答案,如何制作隐形按钮的答案不起作用,因为删除与按钮相关的图像使其无效.
你如何绕过这个并保持隐形属性,同时允许按钮实际工作?
我正在使用Unity for iOS设备开发游戏.我已经实现了以下触摸代码:
void Update () {
ApplyForce ();
}
void ApplyForce() {
if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began) {
Debug.Log("Touch Occured");
}
}
Run Code Online (Sandbox Code Playgroud)
我把这个脚本拖到我的游戏对象上,这是一个球体.但无论我触摸哪里,都会显示日志消息.我只想在用户触摸对象时检测触摸.
我担心单指移动代码OnPointerDown与之间的区别OnBeginDrag.
(在使用物理raycaster的最新Unity范例中:最后,Unity将正确地忽略UI层上的触摸.
所以从2015年开始你必须做的是:
忘记垃圾传统Input或Touches系统废话甚至Unity承认是完全没有意义的废话 - 因为他们不工作
添加一个空的游戏对象,通常是BoxCollider2D,可能比屏幕大.使图层"绘制"(物理设置,它与任何东西互动)
只需添加到相机,2D或3D物理raycaster.事件掩盖你的"绘图"图层.
做一个像下面这样的脚本并把它放在"画画"上.
(提示 - 不要忘记简单地添加一个EventSystem场景.奇怪的是,Unity在某些情况下不会自动为你做这件事,但Unity会在其他情况下自动为你做这件事,所以如果你忘记了它会很烦人!)
但这是问题所在.
在使用OnPointerDownvs OnBeginDrag(和匹配的结束调用)之间必须有一些细微的差别.(您可以在以下代码示例中交换操作.)
Unity自然没有提供任何指导; 下面的代码精美地拒绝了流浪抓取并且完美地忽略了你的UI层(感谢Unity!最后!)但是我对这两种方法之间的区别(开始拖动V开始触摸)完全神秘化了,我无论如何都找不到逻辑区别在单元测试中两者之间.
答案是什么?
/*
general movement of something by a finger.
*/
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class FingerMove:MonoBehaviour,
IPointerDownHandler,
IBeginDragHandler,
IDragHandler,
IPointerUpHandler,
IEndDragHandler
{
public Transform moveThis;
private Camera theCam;
private FourLimits thingLimits;
private Vector3 prevPointWorldSpace;
private Vector3 thisPointWorldSpace;
private Vector3 realWorldTravel;
public void Awake() …Run Code Online (Sandbox Code Playgroud) 我目前正在做足球比赛。
在这个迷你游戏中,当玩家触摸球时,它会增加力量,并且目标是获得更高的得分。
所以我写道:
void Update()
{
if(Input.touchCount == 1 && Input.GetTouch(0).phase== TouchPhase.Began)
{
AddForce, and playsound ect...
}
}
Run Code Online (Sandbox Code Playgroud)
这样,当我触摸屏幕上的任意位置时,它会增加力量,但是当我触摸我的游戏对象(球)时,我只想增加力量。
我怎样才能做到这一点?
谢谢!:)
touch ×3
c# ×2
unity3d-ui ×2
android ×1
button ×1
detect ×1
ios ×1
transparent ×1
unityscript ×1