比如战斗场景,UI和3D场景同时都需要响应触摸事件,如果同时响应可能就会出现触摸UI的时候影响到了3D部分。为了解决这个问题在判断3D响应之前要先判断手指是否点击在UI上。 以前NGUI的时候都是自己来发送射线判断,现在UGUI好了系统提供了更为简便的方法。
#if UNITY_ANDROID && !UNITY_EDITOR
#define ANDROID
#endif
#if UNITY_IPHONE && !UNITY_EDITOR
#define IPHONE
#endif
using UnityEngine;
using UnityEngineUI;
using SystemCollections;
using UnityEngineEventSystems;
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
}
void Update()
{
if (InputGetMouseButtonDown(0)||(InputtouchCount >0 && InputGetTouch(0)phase == TouchPhaseBegan))
{
#if IPHONE || ANDROID
if (EventSystemcurrentIsPointerOverGameObject(InputGetTouch(0)fingerId))
#else
if (EventSystemcurrentIsPointerOverGameObject())
#endif
DebugLog("当前触摸在UI上");
else
DebugLog("当前没有触摸在UI上");
}
}
}
var moveSpeed:int=5;//player移动速度
var player:Transform;//定义一个人物的Transform
private var endposition : Vector3;
function Start()
{
endposition = playertransformposition;
}
function Update ()
{
if(InputGetButtonUp("LeftMouse")){ //LeftMouse是在inputManager中设置的,左键值为mouse 0
PlayerMove();
}
var targetposition=playerTransformPoint(Vector3(0,488,-30));
transformposition=targetposition;//相机的目标位置,这两句代码的作用是让人物一直处于相机的视野下
if(endposition != playertransformposition){
playerposition=Vector3MoveTowards(playerposition,endposition,TimedeltaTimemoveSpeed);
}
}
function PlayerMove()
{
var cursorScreenPosition:Vector3=InputmousePosition;//鼠标在屏幕上的位置
var ray:Ray=CameramainScreenPointToRay(cursorScreenPosition);//在鼠标所在的屏幕位置发出一条射线(暂名该射线为x射线)
var hit:RaycastHit;
if(PhysicsRaycast(ray,hit)){
if(hitcollidergameObjecttag=="Terrain"){//设置地形Tag为Terrain
endposition = hitpoint;
}
}
}
你要生成的gameobject是2d的吧?
using SystemCollections;
using SystemCollectionsGeneric;
using UnityEngine;
public class ClickCreateImage : MonoBehaviour
{
public GameObject imageItem;//要克隆的Imgae
void Start()
{
}
void Update()
{
if (InputGetMouseButtonDown(0))
{
var go= Instantiate(imageItem,GetImagePos(),imageItemtransformrotation, imageItemtransformparent);
goSetActive(true);
}
}
/// <summary>
/// 坐标转换! 将鼠标按下时的坐标, 根据新生成对象在其父下排列方式进行转换 得到的坐标的位置和鼠标按下时的位置一致
/// </summary>
/// <returns></returns>
Vector3 GetImagePos()
{
Vector3 imagePos;
RectTransformUtilityScreenPointToWorldPointInRectangle(imageItemtransformparent as RectTransform,InputmousePosition ,null, out imagePos);
return imagePos;
}
}
首先为这个物体添加一个碰撞器,之后挂一个脚本
bool
istrue=false;
void
onmousedown(){
istrue=true;
}
void
ongui(){
if(istrue){
guitextarea(new
rect(10,
10,
200,
100),
"balabalabala",
200);
}
}
大致上是这么个意思
获取鼠标位置,inputmousePosition
设置鼠标位置的话在Windows平台可以调用系统api SetCursorPos方法实现,但是在unity里面鼠标位置是只读的
以上就是关于unity 怎么识别鼠标点击在ui上全部的内容,包括:unity 怎么识别鼠标点击在ui上、Unity3D 中如何同时获得鼠标点击和键盘按键、unity2D模式如何在点击鼠标的地方生成gameobject等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)