版权声明:记录上工作中的一些问题 https://blog.csdn.net/m0_37583098/article/details/82977523
第一种 OnMouse
在需要检测的物体上 首先物体要有Collider 添加脚本 使用OnMouse系列方法(脚本的enable不影响OnMouse的调用)
//当鼠标悬停在网格上时,
void OnMouseEnter()
{
}
// ...当鼠标悬浮在物体上
void OnMouseOver()
{
}
// ...当鼠标移开时
void OnMouseExit()
{
}
// ...当鼠标点击
void OnMouseDown()
{
}
// ...当鼠标抬起
void OnMouseUp()
{
}
//第二种方法 射线检测(首先物体要有Collider 然后挂载脚本)
/************************************************************
Copyright (C), 2007-2017,BJ Rainier Tech. Co., Ltd.
FileName: RayCastHitControl.cs
Author: Version :1.0 Date: 2018/8/15
Description: 射线点击
************************************************************/
using UnityEngine;
using System.Collections;
public class RayCastHitControl : MonoBehaviour {
// Use this for initialization
void Start () {
}
Ray ray;
RaycastHit hit;
GameObject obj;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("点击鼠标左键");
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
Debug.Log(hit.collider.gameObject.name);
obj = hit.collider.gameObject;
//通过名字
if (obj.name.Equals("BeiJiuChuan"))
{
Debug.Log("点中"+obj.name);
}
//通过标签
if (obj.tag == "move")
{
Debug.Log("点中" + obj.name);
}
}
}
}
}
//第三种方法 游戏物体 EventTrigger 物体动态事件监听
先说一下 有哪些封装好的公共方法
OnBeginDrag | 在拖动开始之前调用。 |
OnCancel | 发生Cancel事件时由EventSystem调用。 |
OnDeselect | 在选择新对象时由EventSystem调用。 |
ondragDown | 每次在拖动期间移动指针时由EventSystem调用。 |
OnDrop | 当对象接受丢弃时由EventSystem调用。 |
OnEndDrag | 拖动结束后由EventSystem调用。 |
OnInitializePotentialDrag | 在找到拖动时,但在有效开始拖动之前由EventSystem调用。 |
OnMove | 发生Move事件时由EventSystem调用。 |
OnPointerClick | 发生Click事件时由EventSystem调用。 |
OnPointerDown | 发生PointerDown事件时由EventSystem调用。 |
OnPointerEnter | 当指针进入与此EventTrigger关联的对象时由EventSystem调用。 |
OnPointerExit | 当指针退出与此EventTrigger关联的对象时,由EventSystem调用。 |
OnPointerUp | 发生PointerUp事件时由EventSystem调用。 |
OnScroll | 当Scroll事件发生时由EventSystem调用。 |
ONSELECT | 当Select事件发生时由EventSystem调用。 |
OnUpdateSelected | 更新与此EventTrigger关联的对象时由EventSystem调用。 |
然后说一下使用方法
1.通过编辑器中添加
在Inspector中添加EventTrigger的componnent组件,然后点击Add New Event Type按钮添加一个基本的事件
当我们选择一个事件的时候,就相当于将要于此事件绑定了,例如当我们选择Pointer Click的时候,绑定了这个组件的物体将接受Pointer Click 事件的消息,当我们在物体上按下鼠标的时候,(当然空间中的物体我们是无法通过鼠标点击的,但是当我们可以通过射线碰撞的方法,来实现Pointer Enter,Pointer Exit等事件的触发)这里我们用来绑定这个EventTrigger 的是一个UI Panel 这样便可以让它接受我们自定义的单击事件了
然后脚本方法
/************************************************************
Copyright (C), 2007-2017,BJ Rainier Tech. Co., Ltd.
FileName: OnClickMouseDown.cs
Author: Version :1.0 Date: 2018/8/15
************************************************************/
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using System.Collections.Generic;
using UnityEngine.Events;
public class OnClickMouseDown : MonoBehaviour
{
void Start()
{
//获取或添加EventTrigger组件
EventTrigger trigger = transform.GetComponent<EventTrigger>();
if (trigger == null)
{
trigger = transform.gameObject.AddComponent<EventTrigger>();
}
//初始化EventTrigger.Entry的数组
trigger.triggers = new List<EventTrigger.Entry>();
//创建各种 EventTrigger.Entry的类型
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerEnter;//设置Entry的eventID类型 即EventTriggerType的各种枚举(比如鼠标点击,滑动,拖动等)
UnityAction<BaseEventData> callback =new UnityAction<BaseEventData>(OnEventTrigger); //注册代理
entry.callback.AddListener(callback);//添加代理事件到EventTrigger.Entry
EventTrigger.Entry entry2 = new EventTrigger.Entry();
entry2.eventID = EventTriggerType.PointerDown;
UnityAction<BaseEventData> callback1 =new UnityAction<BaseEventData>(OnMouseDown);
entry2.callback.AddListener(callback1);
//在EventTrigger.Entry的数组添加EventTrigger.Entry
trigger.triggers.Add(entry);
trigger.triggers.Add(entry2);
}
private void OnMouseDown(BaseEventData arg0)
{
Debug.Log("OnMouseDown");
}
private void OnEventTrigger(BaseEventData arg0)
{
Debug.Log("OnEventTrigger");
}
}
最后 别忘了 在摄像机下添加一个Physics Raycaster的组件,用来检测鼠标射线