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

unity 3D物体接受鼠标事件的两种实现方法 目录 一、实现接口 二、内部方法 一、实现接口 使用该方法需要先完成一些准备工作。 ① 在脚本中引用命名空间: using UnityEngine.EventSystems; ②在Main Camera 上加上Physics Raycaster组件 ③添加EventSystem ④被点击的物体必须腰带有collider ⑤在脚本中实现接口IPointerExitHandler,IPointerClickHandler等 using System.Collections; usi 阅读详情
AI摘要

本文介绍Unity3D中实现3D物体鼠标点击事件的方法,包括通过事件接口、EventTrigger及射线碰撞检测三种方式,并提供了详细的步骤和代码示例。

 

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

鼠标点击3D物体触发,Unity从本质上来说有两种:一种是通过事件(event)触发,一种是通过射线(ray)判断穿过的物体触发。这两种触发的原理是不同的,不论哪种触发都必须满足触发的要求才可以,既然原理不同,触发的要求也不一样,下面详细说明一下3种不同的方式。
 
Unity版本 5.6.2f  Unity API版本 2019.1 
 
 
一、通过事件,实现接口IPointerClickHandler 
先了解下接口IPointerClickHandler,这个接树关系是  UnityEngine.EventSystems. Interfaces.IPointerClickHandler,下面看下它还有哪些可以实现的接口
Unity3D-场景中3D物体添加点击事件
这里用IPointerClickHandler举例(api中这样解释):
Unity3D-场景中3D物体添加点击事件
也就是在我们的被点击的类中实现了接口后,在实现方法OnPointerClick,在这个方法里操作点击后的处理。
 
既然是事件,首先满足事件触发的要求:
 
1.给场景中的Camera添加PhysicsRaycaster脚本。
Unity3D-场景中3D物体添加点击事件
 
 
2.在场景中添加事件系统EventSystem,如图操作:
Unity3D-场景中3D物体添加点击事件
 
点击 Add Default... 后出现如图:
Unity3D-场景中3D物体添加点击事件
 
3.重点来了,设置被点击物体(3D)物体,一定要带触发器(Collider),然后把点击后处理的脚本挂在被点击的物体上。
Unity3D-场景中3D物体添加点击事件

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

public class EventClick : MonoBehaviour,IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        print("点击了::"+this.name);
    }
}

 

 
运行点击cube:
Unity3D-场景中3D物体添加点击事件
 
 
二、通过事件,附加脚本EventTrigger
 
这里也是同过事件来实现的,也要按照 一 里满足事件触发的要求(不懂!往上翻看下):
1.给场景中的Camera添加PhysicsRaycaster脚本。
2.在场景中添加事件系统EventSystem;
完成以上两步后,3就和一里的不一样了。
3.这里有两种做法,分别是3.1 和 3.2 ,只是在用法上不同,原理是一样的。
首先给被点击的物体添加EventTrigger脚本。
Unity3D-场景中3D物体添加点击事件
 
3.1,是静态添加事件触发
给EventTrigger添加事件类型,根据需要选择,
Unity3D-场景中3D物体添加点击事件
 
Demo里选择点击事件PointerClick
Unity3D-场景中3D物体添加点击事件
 
给PointerClick添加触发后执行函数
Unity3D-场景中3D物体添加点击事件
 
这里的执行函数,是下面我们开发的类ClickEventTrigger.cs,把这个脚本添加到被点击的物体上即可。
 
 
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class ClickEventTrigger : MonoBehaviour 
{
public void OnClick()
    {
        print("MyOnClick 点击了::"+this.name);
    }
}
 
 
到这里,静态添加事件就完成了,运行效果:
Unity3D-场景中3D物体添加点击事件
 
3.2,是动态添加事件触发
动态触发,在Unity编辑器中操作就方便多了,只需要在被点击物体上添加EventTrigger就可以了,然后再把我们的脚本ClickEventTrigger.cs添加到被点击物体上,剩下的都在代码中完成。
 
 
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class ClickEventTrigger : MonoBehaviour {

// Use this for initialization
void Start () {

        //获取或添加EventTrigger组件
        EventTrigger trigger = transform.GetComponent();
        if (trigger == null)
        {
            trigger = transform.gameObject.AddComponent();
        }
        //初始化EventTrigger.Entry的数组 如果这里初始化了事件触发数组,那么在ide静态添加的事件会丢失
        //trigger.triggers = new List();
        //创建各种 EventTrigger.Entry的类型
        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = EventTriggerType.PointerEnter;//设置Entry的eventID类型 即EventTriggerType的各种枚举(比如鼠标点击,滑动,拖动等)
        UnityAction callback = new UnityAction(OnPointerEnter);  //注册代理
        entry.callback.AddListener(callback);//添加代理事件到EventTrigger.Entry

        EventTrigger.Entry entry2 = new EventTrigger.Entry();
        entry2.eventID = EventTriggerType.PointerDown;
        UnityAction callback1 = new UnityAction(OnPointerDown);
        entry2.callback.AddListener(callback1);

        //在EventTrigger.Entry的数组添加EventTrigger.Entry
        trigger.triggers.Add(entry);
        trigger.triggers.Add(entry2);
    }

    private void OnPointerDown(BaseEventData arg0)
    {
        Debug.Log("OnPointerDown");
    }

    private void OnPointerEnter(BaseEventData arg0)
    {
        Debug.Log("OnPointerEnter");
    }
}

 

 
运行结果:
Unity3D-场景中3D物体添加点击事件
 
三、通过射线,RayCastHitControl
这个方法主要是通过,射线发射,判断射线穿过的物体,根据特定的标志来判断是否点击到了该物体(比如:物体的标签Tag,还有物体的名称)
这里只需要3d物体,并且有明确的唯一标识,再加上我们开发的ClickRayCastHitControl.cs就可以。
Unity3D-场景中3D物体添加点击事件
 
1.在场景中创建一个物体(Cube),然后点击Inspector面板下Tag - AddTag...- 在Tags列表中,点击+,输入你要添加的Tag名称就可以。创建Tag完成后,回到场景给这个Cube选择刚才创建的Tag。
Unity3D-场景中3D物体添加点击事件
 
2.在创建一个Cube,demo中起名(BeiJiChaun),这个名字就是射线穿过判断的标识,这个物体就创建完成了。
Unity3D-场景中3D物体添加点击事件
 
3.创建单独层,挂载我们开发的脚本即可。
Unity3D-场景中3D物体添加点击事件
 
运行结果:
Unity3D-场景中3D物体添加点击事件
 
完整代码:
 
 
using UnityEngine;

public class ClickRayCastHitControl : MonoBehaviour {

    Ray ray;
    RaycastHit hit;
    GameObject obj;
    // Use this for initialization
    void Start () {

}

    // Update is called once per frame
    
    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("BeiJiChuan"))
                {
                    Debug.Log("点中" + obj.name);
                }
                //通过标签
                if (obj.tag == "ClicObj")
                {
                    Debug.Log("点中" + obj.name);
                }
            }
        }
    }
}

 

unity鼠标单击物体与双击物体触发不同的事件 下面举例在unity里面Canvas下面添加一个image,当鼠标移动到image点击一次触发事件 Debug.Log(“SingleClick!”);当鼠标在image点击两次触发事件 Debug.Log(“DoubleClick!”);鼠标双击和单机出现不同的响应事件在上述代码中,我们使用 lastClickTime 记录上一次单击的时间,在回调函数中计算两次单击之间的时间间隔,如果小于 doubleClickInterval,则认为触发了双击事件,否则触发了单击事件。 阅读详情

相关推荐

Unity3D物体点击事件实现方式

此篇博客将通过两种方式实现场景中物体的点击事件。 准备工作: 1、给场景添加EventSystem:选择Hierarchy窗口-》Create-》UI-》Event System 2、给摄像机添加Physics Raycaster脚本(系统自带的):选中Main Camera-》Add Component-》Physics Raycaster 3、给需要实现点击的物体添加Collider(Cube默认有Collider就不需要此步骤,如果是公司模型没有就需要添加)。 点击事件的准备工作

YeYaLing123的博客 1万+

unity点击3D物体

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

2302_76830411的博客 4229

unity3d实现模型点击事件

一,实现 实现3D物体上的点击事件 二,Statue_01: 首先要在Statue_01的Inspector中添加组件Physics Raycaster 创建脚本,拖拽到3D物品Statue_01的Inspector面板上: using System.Collections; using System.Collections.Generic; using UnityEngine...

Ciel_Y的博客 7738

unity3d---物体加点击事件

unity。3d物体点击事件

学海无涯 2867

[Unity3d ]物体自动移动到指定点

[Unity3d ]AI脚本-物体在指定点间往返移动

ocanio的博客 1万+

Unity3d游戏开发中3D物体的点击获取和悬浮获取

在3D场景中基本的操作就是鼠标对物体的点击和悬浮并获得该物体 1.从摄像机发出射线,发射目标为鼠标点击的位置,判断是否碰撞到物体 2.针对每种物体或每个物体设置相应的内容 场景设置如下: 下面的程序是处理点击获取物体的基本架构 public class clickedinfo: MonoBehaviour { // Update is called once per fra...

xpala的博客 1483

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

** 转载于:: [http://blog.sina.com.cn/s/blog_c3e21e750102yfnm.html] **(http://blog.sina.com.cn/s/blog_c3e21e750102yfnm.html). 鼠标点击3D物体触发,Unity从本质上来说有两种:一种是通过事件(event)触发,一种是通过射线(ray)判断穿过的物体触发。这两种触发的原理是不同的,不论哪种触发都必须满足触发的要求才可以,既然原理不同,触发的要求也不一样,下面详细说明一下3种不同的方式。 Un

weixin_44940133的博客 3868

Unity3D实现给3D物体添加文本标签

在Unity3D中,我们经常需要在3D物体上添加文本标签,以提供更多的信息或标识物体。在本文中,我将向您展示如何通过编写脚本来实现在3D物体上添加文本标签的通用方法。通过以上的步骤,您可以在Unity3D中实现给3D物体添加文本标签的通用方法。我们将其设置为当前物体的子对象,并调整其位置和朝向,使其位于物体的顶部。上述脚本创建了一个名为"ObjectLabel"的组件,它可以将文本标签添加到绑定该组件的3D物体上。方法中,我们销毁文本标签实例,以确保在物体被销毁时,相应的文本标签也会被销毁。

VspAnaconda的博客 2823

Unity3D为3D物体添加点击事件

1.相机添加脚本《ClickEvent》: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class ClickEvent : MonoBehaviour { public GameObject...

王利威的博客 1万+

Unity3D实现通用的给3D物体添加Text文本标签

一、搭建场景注意:UICamera需要包含整个场景二、编写关于Text显示标签的脚本(Test_DriftingSpecialEffect)/*** * Title:"XXX" 项目 * 主题:实现UIText作为标签显示在物体上面 * Description: * 功能:XXX * Date:2017 * Version:0.1版本 * Author:Coffee * Modify Reco...

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2万+

【虚拟仿真】Unity3D对物体进行拆分实现

在仿真开发中,会遇到将模型进行移动、放大、旋转、拆分、合并等操作,其他的移动、放大、旋转都有比较多的例子进行参考,今天就分享一下如何将物体进行拆分。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1万+

点击事件添加

Unity3D-场景中3D物体添加点击事件 记得想要点击一定要加collider组件! Unity 鼠标悬置在物体上,标签显示 + 移出物体,标签消失

ling_er_mei_mei的博客 169

【Unity3D小技巧】Unity3D中使用EventTrigger对3D物体的响应

是Unity中用于处理UI事件的一个组件。它允许我们为UI元素(如按钮、图像等)添加事件监听器,从而响应各种交互事件,如鼠标点击、悬停、拖拽等。使用可以避免手动编写复杂的事件处理代码,使UI事件的响应更加简洁和易于管理。比手写UI的Event快很多,方便很多。这篇文章不探究组件与UI事件的交互,主要对焦与与3D物体的响应。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1994

【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

一、向 Unity 中添加 FBX 模型、 二、向 Scene 场景中添加 FBX 模型、 三、3D 物体渲染、 四、3D 物体材质设置、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1万+

5种主流触觉传感器对比:GelSight、DIGIT、Taxim、GelSlim和TACTO怎么选?

本文深度对比了GelSight、DIGIT、Taxim、GelSlim和TACTO五种主流触觉传感器的技术原理与应用场景。针对机器人及VR项目的选型需求,文章从光学与电子传感的技术分野出发,分析了各传感器在分辨率、响应速度、集成难度和成本上的核心差异,并提供了从需求出发的实战选型决策框架,帮助开发者找到最适合的触觉解决方案。

weixin_29268637的博客 695

CST实战:5分钟搞定圆极化天线轴比分析(含远场设置技巧)

本文提供了一份CST Studio Suite圆极化天线轴比分析的实战指南。文章详细讲解了轴比的概念与工程标准,并重点演示了如何正确设置远场监视器以获取Axial Ratio数据,包括关键步骤与后处理技巧。最后,通过植入式天线在生物组织环境中的案例,分析了复杂环境对轴比性能的影响及优化思路。

nokia的博客 996

Unity3D-3D物体点击事件全解析:从IPointerClickHandler到射线检测

本文全面解析Unity3D中实现3D物体点击事件的三种核心方法:使用IPointerClickHandler接口、配置EventTrigger组件以及进行底层射线检测。详细阐述了每种方法的原理、实现步骤、适用场景及优缺点,并提供了处理UI与3D物体点击优先级冲突的解决方案与性能优化实践,帮助开发者彻底解决3D物体点击无响应的问题。

3c4x5z6v7b的博客 646

DINOv3实战指南:如何利用零样本视觉模型革新工业质检

本文详细介绍了如何利用DINOv3零样本视觉模型革新工业质检流程。通过无需标注数据的自监督学习技术,DINOv3能快速部署高精度检测系统,显著降低成本和提升效率。文章涵盖模型选型、数据准备、实时检测优化及典型行业解决方案,为工业质检提供革命性AI实践指南。

ansible6ops的博客 123
上一篇: VS 常用快捷键说明
下一篇: 什么是编译型语言和解释型语言?
Le_Sam
博客等级 码龄11年 342粉丝 53原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值