当前位置:   article > 正文

unity点击3D物体

unity点击3d物体

目录

一.OnMouse

二.射线检测(首先物体要有Collider 然后挂载脚本)

三.游戏物体 EventTrigger 物体动态事件监听

3.1 静态添加事件触发

 3.2 动态添加事件触发

 四.通过事件,实现接口IPointerClickHandler


一.OnMouse

  1. 添加一个脚本组件到你的3D物体上,这个脚本将处理点击事件并返回物体信息。例如,你可以命名这个脚本为ObjectInfo
  2. ObjectInfo脚本中,添加以下代码:
  1. using UnityEngine;
  2. public class ObjectInfo : MonoBehaviour {
  3. private void OnMouseDown()
  4. { // 当鼠标点击物体时触发
  5. // 获取物体的信息
  6. string objectName = gameObject.name;
  7. Vector3 objectPosition = gameObject.transform.position;
  8. // 输出物体信息到控制台 Debug.Log("物体名称:" + objectName); Debug.Log("物体位置:" + objectPosition); // 在这里你可以对物体信息进行自定义操作,比如将其显示在UI界面上或进行其他逻辑处理 }
  9. }
  1. 保存脚本并返回Unity编辑器。将ObjectInfo脚本添加到你想要获取信息的3D物体上。确保这个物体具有碰撞体组件(例如Box Collider)以便能够检测到鼠标点击事件。

现在,当你运行游戏并点击所选的3D物体时,物体的名称和位置信息将会显示在Unity控制台中。你可以根据需要,将这些信息发送到UI界面、存储到变量中,或进行其他自定义处理。

二.射线检测(首先物体要有Collider 然后挂载脚本)

  1. using UnityEngine;
  2. using System.Collections;
  3. public class RayCastHitControl : MonoBehaviour {
  4. // Use this for initialization
  5. void Start () {
  6. }
  7. Ray ray;
  8. RaycastHit hit;
  9. GameObject obj;
  10. void Update()
  11. {
  12. if (Input.GetMouseButtonDown(0))
  13. {
  14. Debug.Log("点击鼠标左键");
  15. ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  16. if (Physics.Raycast(ray, out hit))
  17. {
  18. Debug.Log(hit.collider.gameObject.name);
  19. obj = hit.collider.gameObject;
  20. //通过名字
  21. if (obj.name.Equals("BeiJiuChuan"))
  22. {
  23. Debug.Log("点中"+obj.name);
  24. }
  25. //通过标签
  26. if (obj.tag == "move")
  27. {
  28. Debug.Log("点中" + obj.name);
  29. }
  30. }
  31. }
  32. }

三.游戏物体 EventTrigger 物体动态事件监听

使用方法

3.1 静态添加事件触发

给EventTrigger添加事件类型,根据需要选择,

Demo里选择点击事件PointerClick 

 这里的执行函数,是下面我们开发的类ClickEventTrigger.cs,把这个脚本添加到被点击的物体上即可。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class ClickEventTrigger : MonoBehaviour
  5. {
  6. public void OnClick()
  7. {
  8. print("MyOnClick 点击了::" + this.name);
  9. }
  10. }

到这里,静态添加事件就完成了,运行效果:

 

 3.2 动态添加事件触发

 动态触发,在Unity编辑器中操作就方便多了,只需要在被点击物体上添加EventTrigger就可以了,然后再把我们的脚本ClickEventTrigger.cs添加到被点击物体上,剩下的都在代码中完成。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Unity.VisualScripting;
  4. using UnityEngine;
  5. using UnityEngine.Events;
  6. using UnityEngine.EventSystems;
  7. public class ClickEventTrigger2 : MonoBehaviour
  8. {
  9. // Start is called before the first frame update
  10. void Start()
  11. {
  12. //获取或添加EventTrigger组件
  13. EventTrigger trigger = transform.GetComponent<EventTrigger>();
  14. if (trigger == null)
  15. {
  16. trigger = transform.gameObject.AddComponent<EventTrigger>();
  17. }
  18. //初始化EventTrigger.Entry的数组
  19. trigger.triggers = new List<EventTrigger.Entry>();
  20. //创建各种 EventTrigger.Entry 的类型
  21. EventTrigger.Entry entry = new EventTrigger.Entry();
  22. //设置Entry的eventID类型 即EventTriggerType的各种枚举(比如鼠标点击,滑动,拖动等)
  23. entry.eventID = EventTriggerType.PointerEnter;
  24. //注册代理
  25. UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnEventTrigger);
  26. //添加代理事件到EventTrigger.Entry
  27. entry.callback.AddListener(callback);
  28. EventTrigger.Entry entry2 = new EventTrigger.Entry();
  29. entry2.eventID = EventTriggerType.PointerDown;
  30. UnityAction<BaseEventData> callback1 = new UnityAction<BaseEventData>(OnMouseDown);
  31. entry2.callback.AddListener(callback1);
  32. //在EventTrigger.Entry的数组添加EventTrigger.Entry
  33. trigger.triggers.Add(entry);
  34. trigger.triggers.Add(entry2);
  35. }
  36. private void OnMouseDown(BaseEventData arg0)
  37. {
  38. Debug.Log("OnMouseDown");
  39. }
  40. private void OnEventTrigger(BaseEventData arg0)
  41. {
  42. Debug.Log("OnEventTrigger");
  43. }
  44. }

 运行结果:

 四.通过事件,实现接口IPointerClickHandler

既然是事件,首先满足事件触发的要求:

  1. 给场景中的Camera添加PhysicsRaycaster脚本

  2. 在场景中添加事件系统EventSystem,如图操作: 

  3.  设置被点击物体(3D)物体,一定要带触发器(Collider),然后把点击后处理的脚本挂在被点击的物体上。

    到这里,需要我们开发的只有一个脚本,Demo里的EventClick.cs 

    1. using UnityEngine;
    2. using UnityEngine.EventSystems;
    3. public class EventClick : MonoBehaviour,IPointerClickHandler
    4. {
    5. public void OnPointerClick(PointerEventData eventData)
    6. {
    7. print("点击了::"+this.name);
    8. }
    9. }

    运行点击cube:

    Unity3D-场景中3D物体添加点击事件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/701034
推荐阅读
相关标签
  

闽ICP备14008679号