许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  unity点击3D物体

unity点击3D物体

阅读数 4
点赞 0
article_banner

目录

一.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. }
cs
运行
  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. }
cs
运行

三.游戏物体 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. }
cs
运行

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

 

 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. }
cs
运行

 运行结果:

 四.通过事件,实现接口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. }
    cs
    运行

    运行点击cube:

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


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空