Unity3D实现鼠标悬浮UI或物体上显示文字信息

news2024/11/25 4:59:34

系列文章目录

Unity工具


文章目录

  • 系列文章目录
  • 前言
  • 最终效果
  • 一、UI事件显示文字
    • 1-1 ui事件需要引用命名空间using UnityEngine.EventSystems;
    • 1-2 IPointerEnterHandler 接口
    • 1-3 IPointerExitHandler 接口
    • 1-4 IPointerMoveHandler 接口
  • 二、场景搭建
    • 2-1 实现如下
  • 三、代码实现
    • 3-1 挂到Image上面的脚本
    • 3-2 挂到Cavas上的脚本
    • 3-3 UIController 实现
  • 四、物体鼠标显示文字
    • 4-1 OnMouseEnter
    • 4-2 OnMouseExit
    • 4-3 OnMouseOver
  • 五、代码实现
    • 5-1 代码挂到Cube上即可
  • 六、实现完成
  • 七、WEBGL遇到的BUG
    • 7-1、打包webgl遇到的问题
    • 7-2、解决办法取消掉代码剥离选项(Strip Engine Code)
  • 八、在模型上也可以使用 IPointerEnterHandler, IPointerExitHandler实现鼠标进入离开
    • 8-1、需要在相机上面挂载Physics Raycaster组件(不然没有作用)
    • 8-2、使用这个方法也是需要取消代码剥离的,不然也是没有作用
  • 总结


大家好,我是&心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

前言

本篇文章实现一个鼠标悬浮在ui或者物体上显示文字的功能


最终效果

unity鼠标悬浮ui显示文字

一、UI事件显示文字

1-1 ui事件需要引用命名空间using UnityEngine.EventSystems;

1-2 IPointerEnterHandler 接口

鼠标进入UI执行的

1-3 IPointerExitHandler 接口

鼠标离开UI执行的

1-4 IPointerMoveHandler 接口

鼠标在ui里滑动执行的

二、场景搭建

2-1 实现如下

1.在这里插入图片描述
2.在这里插入图片描述
搭建比较简单,各位顺便搭建吧。

三、代码实现

3-1 挂到Image上面的脚本

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class UIInputText : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerMoveHandler
{
    public void OnPointerEnter(PointerEventData eventData)
    {
        UIController.instance_.uitextobj.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y + 25, 0);
        UIController.instance_.uitextobj.gameObject.SetActive(true);
        UIController.instance_.text.text = this.name;
    }
    //鼠标离开
    public void OnPointerExit(PointerEventData eventData)
    {
        UIController.instance_.uitextobj.gameObject.SetActive(false);
    }
    //鼠标在ui里滑动
    public void OnPointerMove(PointerEventData eventData)
    {
        UIController.instance_.uitextobj.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y + 25, 0);
        UIController.instance_.uitextobj.gameObject.SetActive(true);
        UIController.instance_.text.text = this.name;
    }

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

3-2 挂到Cavas上的脚本

在这里插入图片描述

3-3 UIController 实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIController : MonoBehaviour
{
    public static UIController instance_;
    public Transform uitextobj;
    public Text text;
    private void Awake()
    {
        instance_ = this;
    }
}

四、物体鼠标显示文字

也是同样的三个方法切记物体要有碰撞体

4-1 OnMouseEnter

鼠标进入碰撞盒执行

4-2 OnMouseExit

鼠标离开碰撞盒

4-3 OnMouseOver

鼠标在碰撞盒里每帧都调用

五、代码实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class OBJInputText : MonoBehaviour
{
    private void OnMouseEnter()
    {
        UIController.instance_.uitextobj.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y + 25, 0);
        UIController.instance_.uitextobj.gameObject.SetActive(true);
        UIController.instance_.text.text = this.name;
    }
    private void OnMouseExit()
    {
        UIController.instance_.uitextobj.gameObject.SetActive(false);
    }
    private void OnMouseOver()
    {
        UIController.instance_.uitextobj.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y + 25, 0);
        UIController.instance_.uitextobj.gameObject.SetActive(true);
        UIController.instance_.text.text = this.name;
    }
}

5-1 代码挂到Cube上即可

在这里插入图片描述

六、实现完成

代码比较简单,可以拓展的地方很多,还可以使用更美观的UI。

七、WEBGL遇到的BUG

7-1、打包webgl遇到的问题

1.上述在模型上添加的鼠标显示UI的方法,在webgl打包出来之后不起作用(我是加载的ab包,代码在ab包里,所以就报错了),报错说是代码被剥离了,

7-2、解决办法取消掉代码剥离选项(Strip Engine Code)

在这里插入图片描述
默认是勾选的,我们取消勾选,重新打包即可

八、在模型上也可以使用 IPointerEnterHandler, IPointerExitHandler实现鼠标进入离开

8-1、需要在相机上面挂载Physics Raycaster组件(不然没有作用)

在这里插入图片描述

8-2、使用这个方法也是需要取消代码剥离的,不然也是没有作用


总结

你的点赞就是对博主的支持,有问题记得留言
不定时更新Unity开发技巧,觉得有用记得一键三连哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1292459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析

数据库并发访问树协议 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会…

数码产品稿件怎么写?纯干货!

在科技日新月异的今天,数码产品已经成为人们生活的重要组成部分。无论是手机、电脑、平板还是智能家居,这些产品的出现都在不断改变着我们的生活方式。因此,对于数码产品的评测和分析就显得尤为重要。本文伯乐网络传媒将为你揭秘如何撰写高质…

ChatGPT可能即将发布新版本,带有debug功能:支持下载原始对话、可视化对话分支等

本文原文来自DataLearnerAI官方网站:ChatGPT内置隐藏debug功能:支持下载原始对话、可视化对话分支等 | 数据学习者官方网站(Datalearner) AIPRM的工作人员最近发现ChatGPT的客户端隐藏内置了一个新的debug特性,可以提高ChatGPT对话的问题调试…

【APP抓包】Charles+burp+夜神模拟器联动抓包(带导入系统级0证书)

【APP抓包】Charlesburp夜神模拟器联动抓包(带导入系统级0证书) 0x00、大傻春你要干什么?0x01、夜神模拟器安装0x02、安装Charles0、版本1、安装2、破解3、安装导入用户证书4、【非必要】安装系统证书 0x03、Charles配置代理1、Charles设置代…

python-比较Excel两列数据,并分别显示差异

利用 openpyxl 模块,操作Excel,比较Excel两列数据,并分别显示差异 表格数据样例如下图 A,B两列是需要进行比较的数据(数据源为某网站公开数据);C,D两列是比较结果的输出列 A&#…

第二十一章网络通信总结博客

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议,其全称是Transmissio…

AttributeError: module ‘importlib_resources‘ has no attribute ‘path‘ 解决方案

问题描述 with importlib_resources.path("xx", fname) as p: AttributeError: module importlib_resources has no attribute path 博主使用的是python3.9,看importlib_resources在importlib-resources PyPI中的介绍,开始猜测问题出在pyth…

【重磅来袭!!!工程师必备初始化建工程软件】

重磅来袭!!!工程师必备初始化软件 每个工程建立前,你是否为了要建立各种文件夹而烦恼?你是否为了因为工程每次文件夹不统一找不到文件而烦扰?来咯,Project Initial V1_0软件只需输入工程名称&am…

12-07 周四 Pytorch 使用Visdom 进行可视化

简介 在完成了龙良曲的Pytroch视频课程之后,楼主对于pytroch有了进一步的理解,比如,比之前更加深刻的了解了BP神经网络的反向传播算法,梯度、损失、优化器这些名词更加熟悉。这个博客简要介绍一下在使用Pytorch进行数据可视化的一…

VBA技术资料MF93:将多个Excel表插入PowerPoint不同位置

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

【JavaScript】JS——Map数据类型

【JavaScript】JS——Map数据类型 什么是Map?特性Map与Object的比较 map的创建map的属性map相关方法map的遍历 什么是Map? 存储键值对的对象。 能够记住键的原始插入顺序任何值(对象或原始值)都可以作为键或值。 特性 Map中的一个键只能出现一次&am…

解决react启动服务时source-map-loader插件报错找不到源文件“index.ts“的源映射文件

webpack 5: Failed to parse source map from “**********” 如下图所示: The source map files links to the src/ - folder that is not distributed. // node_modules/mswjs/interceptors/lib/interceptors/utils/uuid.js.map {"version":3,"file":&…

家政预约小程序带商城,图文详解

家政预约小程序开发,在线选择服务分类,选择上门时间,提交订单,在线支付。 商城模块:商品分类,在线下单支付。 个人中心:订单管理(家政订单,搬家订单,商品订…

虾皮关键词工具:优化您的Shopee商品曝光度和搜索排名

在Shopee平台上,关键词工具对于提高商品曝光度和搜索排名非常重要。本文将向您介绍一些值得推荐的关键词工具,这些工具可以帮助您找到合适的关键词以优化您的商品列表,并提高搜索排名和曝光度。 先给大家推荐一款shopee知虾数据运营工具知虾免…

Course2-Week3-使用机器学习的建议

Course2-Week3-使用机器学习的建议 文章目录 Course2-Week3-使用机器学习的建议1. 拆分原始训练集1.1 如何改进模型1.2 二拆分:训练集、测试集1.3 三拆分:训练集、验证集、测试集 2. 避免高偏差和高方差2.1 使用训练误差和验证误差进行分析2.2 选择合适的…

图的广度优先搜索(数据结构实训)

题目: 图的广度优先搜索 描述: 图的广度优先搜索类似于树的按层次遍历,即从某个结点开始,先访问该结点,然后访问该结点的所有邻接点,再依次访问各邻接点的邻接点。如此进行下去,直到所有的结点都…

idea利用SpringMVC框架整合ThymeLeaf

简洁一些:两个重要文件 1.controller指定html文件:我们访问http://localhost:8080/test package com.example.appledemo.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import o…

一分钟教你弄懂KMP算法

问题背景 KMP算法主要应用与字符串的比较,有一个主串,有一个子串,我们要通过一种方式来查看子串是否为主串的一部分。我们通常的想法是:主串和子串左对齐,一个字符一个字符进行比较,如果其中有个字符不匹配…

北京市经信局局长姜广智带队调研三六零 强调大模型应与行业结合

12月6日,北京市经济和信息化局局长姜广智、副局长王磊带队走访调研三六零集团,就共促城市级数字安全基础设施项目落地,打造引领行业发展标杆项目,推动大模型落地应用赋能产业、行业发展等话题进行交流。360集团创始人周鸿祎接待来…

h5和小程序通信

相信大部分人可能都会遇到要在微信小程序里面嵌入h5,这个时候h5和小程序之间的通信就成了不可避免的一环,不用紧张,其实很简单。 看一下微信小程序官方文档怎么说 首先我们按照文档上的指示,在需要向小程序传递参数的页面引入 jw…