系列文章目录
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开发技巧,觉得有用记得一键三连哦。
发表评论