赞
踩
目录
四.通过事件,实现接口IPointerClickHandler
ObjectInfo
。ObjectInfo
脚本中,添加以下代码:- using UnityEngine;
-
- public class ObjectInfo : MonoBehaviour {
-
- private void OnMouseDown()
-
- { // 当鼠标点击物体时触发
-
- // 获取物体的信息
-
- string objectName = gameObject.name;
-
- Vector3 objectPosition = gameObject.transform.position;
-
- // 输出物体信息到控制台 Debug.Log("物体名称:" + objectName); Debug.Log("物体位置:" + objectPosition); // 在这里你可以对物体信息进行自定义操作,比如将其显示在UI界面上或进行其他逻辑处理 }
- }
ObjectInfo
脚本添加到你想要获取信息的3D物体上。确保这个物体具有碰撞体组件(例如Box Collider)以便能够检测到鼠标点击事件。现在,当你运行游戏并点击所选的3D物体时,物体的名称和位置信息将会显示在Unity控制台中。你可以根据需要,将这些信息发送到UI界面、存储到变量中,或进行其他自定义处理。
- 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添加事件类型,根据需要选择,
Demo里选择点击事件PointerClick
这里的执行函数,是下面我们开发的类ClickEventTrigger.cs,把这个脚本添加到被点击的物体上即可。
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class ClickEventTrigger : MonoBehaviour
- {
- public void OnClick()
- {
- print("MyOnClick 点击了::" + this.name);
- }
- }
到这里,静态添加事件就完成了,运行效果:
动态触发,在Unity编辑器中操作就方便多了,只需要在被点击物体上添加EventTrigger就可以了,然后再把我们的脚本ClickEventTrigger.cs添加到被点击物体上,剩下的都在代码中完成。
- using System.Collections;
- using System.Collections.Generic;
- using Unity.VisualScripting;
- using UnityEngine;
- using UnityEngine.Events;
- using UnityEngine.EventSystems;
-
- public class ClickEventTrigger2 : MonoBehaviour
- {
- // Start is called before the first frame update
- 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的各种枚举(比如鼠标点击,滑动,拖动等)
-
- entry.eventID = EventTriggerType.PointerEnter;
-
- //注册代理
-
- UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnEventTrigger);
-
- //添加代理事件到EventTrigger.Entry
-
- entry.callback.AddListener(callback);
-
-
-
- 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");
-
- }
-
- }
运行结果:
既然是事件,首先满足事件触发的要求:
给场景中的Camera添加PhysicsRaycaster脚本
在场景中添加事件系统EventSystem,如图操作:
设置被点击物体(3D)物体,一定要带触发器(Collider),然后把点击后处理的脚本挂在被点击的物体上。
到这里,需要我们开发的只有一个脚本,Demo里的EventClick.cs
- using UnityEngine;
- using UnityEngine.EventSystems;
-
- public class EventClick : MonoBehaviour,IPointerClickHandler
- {
- public void OnPointerClick(PointerEventData eventData)
- {
- print("点击了::"+this.name);
- }
- }
运行点击cube:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。