Unity3D中,当鼠标点击屏幕执行相关操作的方法主要有以下几种,这里通过获取鼠标位置来比较,主要有Update,OnMouseDown函数中执行,添加或者重写EvenTrigger等方法。
一、通过Update使用Input.GetMouseButtonDown
public class UpdateFunc : MonoBehaviour {
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log(Input.mousePosition);
}
}
}
该方法适用范围广,限制条件少。在周期函数Update中使用Input.GetMouseButtonDown(0),其中0表示鼠标左键,1表示鼠标右键,2表示鼠标中间。这个方法是最简单的一种,并且该方法没有限制条件,只要在场景中处于激活状态的物体上挂载这个脚本,点击鼠标左键就会执行。
二、通过OnMouseDown周期函数执行
public class OnMouseDownFunc : MonoBehaviour {
void OnMouseDown()
{
Debug.Log(Input.mousePosition);
}
}
该方法限制条件较少。在周期函数OnMouseXXX中执行,该类周期函数是当鼠标对挂载了该脚本的相关物体进行了操作时执行。该类函数有一定的限制条件,如果将脚本添加到了物体上,函数没有执行,可以检查如下问题:
1、挂载该脚本的物体必须带Collider。3D物体的话需要添加Collider,2D物体需要添加Collider2D。
2、注意碰撞器的大小,特别是UI,默认添加的Box Collider2D的Size是(1,1)。不用设置Collider是碰撞器还是触发器,如果是UI,也不需要Raycast Target。
3、检查有没有被别的物体遮挡。
三、通过EvenTrigger
在需要检测的UI上添加Event Trigger组件,点击Add New Event Type选择检测的类型,跟Button上onClick的事件添加一致。除此之外,也可以通过代码控制:
1、继承需要的相关接口
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class EvenTriggerFunc : MonoBehaviour, IPointerDownHandler
{
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log(Input.mousePosition);
}
}
2、直接继承EvenTrigger,重写相关函数
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class EvenTriggerFunc : EventTrigger
{
public override void OnPointerDown(PointerEventData eventData)
{
Debug.Log(Input.mousePosition);
}
}
使用EvenTrigger适用于UI的操作,需要Raycast Target,如果父物体有EvenTrigger组件,子物体上勾选有Raycast Target的也可以执行相关函数。
网友评论