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

这篇具有很好参考价值的文章主要介绍了Unity3D实现鼠标悬浮UI或物体上显示文字信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

Unity工具



大家好,我是&心疼你的一切,不定时更新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.unity 显示文字,Unity工具,unity,游戏引擎
2.unity 显示文字,Unity工具,unity,游戏引擎
搭建比较简单,各位顺便搭建吧。

三、代码实现

3-1 挂到Image上面的脚本

unity 显示文字,Unity工具,unity,游戏引擎

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上的脚本

unity 显示文字,Unity工具,unity,游戏引擎

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上即可

unity 显示文字,Unity工具,unity,游戏引擎

六、实现完成

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

七、WEBGL遇到的BUG

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

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

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

unity 显示文字,Unity工具,unity,游戏引擎
默认是勾选的,我们取消勾选,重新打包即可

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

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

unity 显示文字,Unity工具,unity,游戏引擎

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


总结

你的点赞就是对博主的支持,有问题记得留言
不定时更新Unity开发技巧,觉得有用记得一键三连哦。文章来源地址https://www.toymoban.com/news/detail-758865.html

到了这里,关于Unity3D实现鼠标悬浮UI或物体上显示文字信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3D通过代码修改RGB值来控制UI与物体的Color颜色

    在实际应用过程中,经常有需要将某一物体颜色修改成特定颜色的情况,此时Color中自带的颜色就不够用了,此时我们就需要通过用代码修改RGB值来控制颜色。 下面以修改TextMeshProUGUI的字体颜色为例 这样直接运行,无论Color后的括号里是什么样的参数,字体颜色大概率为白色

    2024年02月11日
    浏览(39)
  • Unity3d用Animator实现鼠标控制多个门开关

    本人Unity3d小白,目前正在学习U3d,这个功能想用Animator实现,从Key帧到写脚本摸索了三天时间,走了不少弯路,搜了不少实例,有版本改版原因也有的是在Unity中搭建的小场景,不涉及父物体,总之开始做的功能没有实现。现在把我实现的方法记录下来,算是对个功能的总结

    2024年02月13日
    浏览(47)
  • 【Unity3D】实现UI点击事件穿透

              注意:EventSystem.current.RaycastAll获取到的对象列表是能够接受事件的,假如你的按钮Button自己身上没有Image,而是Button的子物体有,那么你就要给这个子物体也加上标签Tag才能响应到。 如果ExecuteEvents.Execute不管用,可以试试ExecuteEvents.ExecuteHierarchy

    2024年02月04日
    浏览(32)
  • unity3d---物体加点击事件

    目录 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 4.物体单独响应点击事件 5.控制脚本实现各物体的点击事件 6.点击ui时屏蔽 物体点击事件 1.给需要点击点物体加collider   2.层级面板加EventSystem   3. 相机加Physics Raycaster 2d 3d按需添加   4.物体单独响

    2024年02月09日
    浏览(44)
  • Unity3D-场景中3D物体添加点击事件

    Unity3D - 场景中3D物体添加鼠标点击事件 鼠标点击3D物体触发,Unity从本质上来说有两种:一种是通过事件(event)触发,一种是通过射线(ray)判断穿过的物体触发。这两种触发的原理是不同的,不论哪种触发都必须满足触发的要求才可以,既然原理不同,触发的要求也不一样

    2024年02月08日
    浏览(35)
  • Unity3d中Scene场景2D模式下放大后UI元素后不显示的问题

    如题:UI在game视图显示没有问题, 在Play状态下,在Sence视图查看UI对象的时候进行放大操作,然后UI就不显示了或者显示不全,缩小就恢复正常。这让我在Play模式下预览UI状态很麻烦。相关问题描述较少。 初步判定为摄像机问题,但我们的项目最近并没有对相机进行过什么调

    2024年02月03日
    浏览(42)
  • Unity3D相机围绕物体自由旋转

    写了一个相机围绕物体360°自由旋转的脚本,比较实用,分享出来给大家使用,配置如下: Hierarchy界面  LookPovit:为物体Auto Aircraft的中心空对象; AroundPovit:用于相机的空对象,作为父类,主要作用是为了保持与被观察物体的位置一致,可防止Auto Aircraft出现抖动而影响相机

    2024年02月11日
    浏览(41)
  • Unity3D实现第一人称移动,随鼠标转动视角+上楼梯(C#)

    第一人称移动: 1、在层级面板创建一个Capsule,命名为Player,将层级面板中的相机拖到Player下方 2、重置Player和摄像机的Transform数值(方便调整摄像机在Player上的位置),然后调整摄像机在Player上的位置 大概将摄像机放到Player眼睛的位置即可。 3、创建一个脚本,命名为Came

    2024年02月13日
    浏览(37)
  • Unity3D_物体抛物线运动

    参考:Unity 贝塞尔曲线实现抛物线运动,投掷功能实现  用到了DOTween插件, 回想起之前不知道这个插件还在用协程和SmoothDamp做运动控制的自己仿佛是个哈批 路径绘制使用的LineRenderer

    2024年02月13日
    浏览(40)
  • 多层Unity3D物体模型穿透问题处理

    如图,当我们想要在同一个界面中展示两层或以上3D物体时,有时会因为第一层物体材质上的 shader 渲染深度被破坏或其它原因导致第一层的物体穿透到第二层界面上来了。 在 Scene 视图中这三个橙色球体原本是在第二层黄色背景之下的: 但是在 Game 视图中我们发现那三个橙色

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包