当前位置: 代码网 > it编程>前端脚本>Vue.js > Unity3D实现鼠标悬浮UI或物体上显示文字信息

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

2024年08月02日 Vue.js 我要评论
本篇文章实现一个鼠标悬浮在ui或者物体上显示文字的功能不定时更新Unity开发技巧,觉得有用记得一键三连哦。

系列文章目录

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.在这里插入图片描述
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开发技巧,觉得有用记得一键三连哦。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com