赞
踩
我的CSDN文章地址为:【Unity】UI界面鼠标悬停时显示文本(用GUI.Box实现),以及Font.GetCharacterInfo的正确用法
就这悬浮文本(hint)功能,我搞几小时,各种搜,可能是我姿势不对,不应该用必应,应该学巨佬用谷歌gayhub之类的。
为了节省大家的时间,我把关键内容放前面,博客后面的内容反正也就个人的牢骚没啥作用。
演示效果:
using UnityEngine; using UnityEngine.EventSystems; public class XJ_UIHint : MonoBehaviour,IPointerEnterHandler, IPointerExitHandler { public Font font; public int fontSize = 10; [Multiline]//允许多行输入 public string text = "显示的文本"; private bool showText = false; private GUIStyle style; public void Start() { style = new GUIStyle("box"); } public void OnPointerEnter(PointerEventData eventData){ showText = true; } public void OnPointerExit(PointerEventData eventData) { showText = false; } public void OnGUI() { style.font = font; style.fontSize = fontSize; var vt =style.CalcSize(new GUIContent(text)); if (showText) GUI.Box(new Rect(Input.mousePosition.x, Screen.height - Input.mousePosition.y, vt.x,vt.y), text,style); } }
【上面代码里并没有标题提到的Font.GetCharacterInfo,想了解这内容就往下拉,牢骚话在下面,或者Ctrl+F快速查找】
可以根据个人需要,在以上脚本代码里再加上一些计时器啥的。至于那hint的样式,怎么说呢,我也想改,但找不到合适的方法,就此搁置。hint的样式与GUIStyle直接挂钩,我脚本里赋值为"Box",其他样式我就不列出来了反正没必要,因为找到一个巨佬写的GUIStyle样式大全:Unity 查看所有GUI默认样式,使用很简单,直接在自己的unity项目里创建一个脚本并把巨佬的代码拷进去(巨佬的代码就是好用,都不用修改就能运行的),然后在unity的顶部菜单栏里就有那样式查看工具了。
以下为无关紧要的个人发牢骚内容
我搜出来很多垃圾啊(一堆垃圾博客我就不列出来放着了毕竟没用的标签都关了),这里搞搞那里整整的,当时最接近我目的的功能就是利用Font.GetCharacterInfo这个函数,但因为这个函数一直给我送个无效数据(值一直都是0),搞得我心态都炸了,卡了两个多小时去试这天煞的函数怎么用,最后参考了一个博客才解决问题: unity中的Text组件如何获得其中文本的尺寸
直接来个样例代码:
Font font=new Font();//font:字体样式
string text="123一二三";//text:文本
int fontSize=24;//fontSize:字体大小
FontStyle fontStyle=FontStyle.Bold;//fontStyle:字体样式(粗体斜体)
font.RequestCharactersInTexture(text,fontSize,fontStyle);//第一个参数为渲染的文本,第二个为字体大小,第三个参数为字体样式
font.GetCharacterInfo('1',out CharacterInfo info,fontSize,fontStyle);//第一个参数为目标字符,第二个为目标字符的尺寸信息,第三个参数为字体大小,第四个参数为字体样式
//我当时使用的是info.glyphHeight、info.glyphWidth,觉得这两个已经够完成我功能了我就不费事去试别的参数
总结一下,在调用font.RequestCharactersInTexture和font.GetCharacterInfo时,如果:
①、font.GetCharacterInfo的“目标字符”并不是font.RequestCharactersInTexture传入的字符串的任一字符时;
②、两个函数传入的“字体大小”不一致时;
③、两个函数传入的“字体样式”不一致时;
那么返回的info里,所有的数据都是0,没错,都是0,都是0,0,0,当时我debug是真的苦到炸,反反复复debug和搜各种东西,一个多小时才发现是这种蠢到炸的函数调用问题。简而言之就是这两个函数的调用是严格匹配的,参数值要完全一致
当时算是鬼使神差吧,我没啥想法地往下拉看看这个GUIStyle还有什么骚东西能用的(因为GUI.Box的第三个参数就是GUIStyle,设置样式的),然后看到了个血压拉满的玩意儿,没错就是CalcSize,当时内心os“原来它有的它有的它是自带的它可以计算渲染出来的文本尺寸的,那我还废啥心思一个字符一个字符累加然后计算宽度啊”
当我试用了这函数并且明确这个函数能够完美替代我的第一个方案(使用Font.GetCharacterInfo)时我人都麻了,我前面几个小时都干了啥,啥都没干,于是气不来啊,就写博客呗,发散一些负面情绪
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。