Unity基础(23)-UGUI

Unity基础(23)-UGUI,第1张

控件是UGUI内置的,控件上面因因包含不同的组件而不同。

关于按钮的事件统一管理方法

小练习:写个小框架滑动菜单

在实际使用UGUI开发的过程中发现一个UGUI的BUG:当Content下的子物体增加时,ScrollBar下的Handle滑条大小没有实时根据发生Content下的子物体数量发生变化。(在Hierarchy面板中右键创建UI->ScrollView,在子物体中找到Content,需要按行列布置的游戏物体都作为Content的子物体挂在Content下)(以开发垂直的ScrollView为例)在查找问题的过程中发现:我的这个项目里Content的高小于遮罩层Viewport的的高,致使ScrollBar滑条的size一直为1的状态。调整Content的高使高大于遮罩层Viewport的的高后又发现如下问题:在编辑模式下ScrollBar滑条的size只根据Content与遮罩层Viewport的大小比例进行了调整,而不是根据Content的子物体数量进行变换,致使了在Content下添加的子物体的总高大于Content设置的高时下拉滑条并不能全部显示的问题,并且在游戏运行时ScrollBar的Size又重新变回1了,无论怎么调整参数都无济于事。于是自己写了一个脚本,根据Content下的子物体的个数来控制Content的宽高(原理是修改RectTransform的sizedelta)

参考

Unity 3D UGUI Toggle用法教程

Is On :用来表示Toggle当前开关状态,勾选为开;

Graphic :控制Toggle组件开关图片的显示隐藏,默认选取Checkmark,就是那个勾勾图片

挂上这个脚本,会发现事件中有一个带参数的,还有一个不带参数的:

虽然ListenInFunction是带参数的,但是却要选上面那个绿色不带参数的,刚开始我是懵逼的…………

参照 UGUI中Button和Toggle 添加动态事件 得到了解释:

选下方红色的静态方法,其实UI中会多出一个checkbox,可以指定传入的参数:

当然也可以传入其它类型,比如

参考

Unity UGUI入门组件整理(三)【Toggle组件与Toggle Group组件】

假如初始状态是Toggle3被勾选,当我点击Toggle1勾选时,打印如下:

这样就可以根据名字和选中状态来做逻辑处理了。

是否允许不打开任何开关?如果启用此设置,则按下当前打开的开关会将其关闭,因此没有任何开关处于打开状态。如果禁用此设置,则按下当前打开的开关将不改变该开关的状态。

这个说的有点绕,并且有些博客上还有种错误的说法,就是这个开关能允许Group多选。其实测试一下就知道了,在勾选Allow Switch off时,点击当前选中的Toggle,可以将当前Toggle改成未选择状态,此时整个Group中所有的Toggle都会处于未选择状态。而如果没勾选Allow Switch off,就达不到这个效果,会强迫你必须选一个。

在官方文档中,描述ToggleGroup叫开关组:

UGUI学习笔记(五) ToggleGroup制作选择题单选框

参考

[专栏精选]TextMeshPro插件

TextMeshPro使用说明

TextMeshPro中文字体生成和字体材质更换

新一代Unity 文本组件 Text Mesh Pro 系列教程

【Unity学习笔记】TextMeshPro文档(一)

【Unity学习笔记】TextMeshPro文档(二)

【Unity学习笔记】TextMeshPro文档(三)

【Unity学习笔记】TextMeshPro文档(四)

【Unity学习笔记】TextMeshPro组件官方文档翻译

首次添加会d出导入必要资源面板,点击IMPORT后,项目Assets文件夹下会生成TextMesh Pro文件夹

UGUI的Text使用了一张字体贴图,Unity把所有需要显示的字符放到了一张图集中,字符的形状是通过像素定义的。当我们放大时,像素不够用就会出现文字变模糊的情况。

TextMesh Pro的Text使用了不同的技术来渲染文字,叫做 Signed Distance Field (后面简称SDF,对该技术感兴趣的同学可以自行搜索一下)。和UGUI类似,这个技术同样需要将字符放到一个图集中,但是不使用像素来代表字符的形状,而使用SDF技术来生成字符的形状。使用这种技术字符在渲染时不会因为缩放而造成字符模糊的情况,总是能够准确的渲染字符的边缘。

TextMesh Pro无法像UGUI Text那样使用动态字体,因为TextMesh Pro需要对字体进行预处理来计算SDF,这部分计算非常耗时。这对于英文字体来说影响不大,一个字体文件或一张贴图包含的信息都很少,但是对于字符非常多的语言如中文就影响很大。 所以对于中文环境建议如下:

推荐 https://www.zaosj.cn/

这些都设置好之后,就可以点Generate Font Atlas按钮,然后保存成.asset文件,这就是Font Asset所需要的文件了。

如果生成的字体图集缺少部分字符,每当输入这些字符时,TextMesh Pro会使字符回退到默认字形,你可以在Edit >Project Settings >TextMesh Pro Settings修改该字形。

你也可以设置一个或多个字体资源,当字符无法在主要图集中找到时,TextMesh Pro会将字符回退为这些资源中的字符。出于优化目的,可以使用高分辨率的主要字体图集,而所有回退图集则使用较低分辨率。

可以勾选Enable RTL Editor单选框转换为从右到左的文本排列方式(相当于把字符的显示顺序颠倒,abc显示为cba),文本在显示前会将字符顺序颠倒过来。勾选后,Inspector面板上会多出一个RTL Text Input输入框,可以直接编辑已经反顺序的文字。

前俩选项是粗体和斜体,它们的外观依赖字体资产(Font Asset)。

接着那俩是underlie和strikethrough表示下划线和删除线,效果就是在字体下面或者中间加一条横线。

最后三是用来设置字母大小写的,功能分别是:小写,大写,和小写字母尺寸一样大的大写

前四个可以随意选择,最后三同一时刻只能选一个。

font size决定字符的大小,你可以使用固定大小,也可以使用自适应大小。

当auto size勾选时,可以指定字符的最小和最大值。Text Mesh Pro将会自动计算,找到最适合的大小,确定的大小会显示在Font Size输入框中。

WD%

WD%包含一个百分比值,表示控制最大的字符的宽度减少百分比。这会水平的挤压字符,使它们更高,通常只适用于数字。

你还可以通过修改Line来减少行高从而适应更大的字体大小。

当勾选了auto size,会花很多时间去计算字符合适的大小。所以只在必要的时候勾选它,并且要避免对频繁改变的动态文字使用此项。如果你的文本从不改变,你可以勾选此项,记住计算出的字体大小,然后取消勾选,并手动填入刚刚计算出的值。

Vertex Color用于为文本着色。除了使用统一颜色外,你也可以勾选Color Gradien从而对文本使用颜色渐变。

通过Color Mode,我们可以切换渐变颜色的个数)Four Corners Gradient表示为每个字符的四个角各选择一个颜色,然后进行渐变。可以为每个TextMesh Pro物体单独手动设置,也可以通过指定gradient preset来快速设置。

这里的渐变颜色会与前面的Vertex Color相乘,所以如果想看原始渐变,就让Vertex Color颜色为白色。

如果勾选了override tags,那么rich text的颜色会被忽视。

字符之间、单词之间、行之间、段落之间的间距都可以修改。段落由换行符确定。你可以为每个TextMesh Pro单独设置,而不用调整字体资产(Font Asset)。

这些设置也可以通过富文本(rich text)修改。

文本对齐方式,分成了水平和垂直两组。

当Wrapping设为Enabled,这可以确保文字不会显示到文本显示区域的外面(就是自动换行嘛)。对于单词也会正常换行,除非一个单词的就已经比一行的宽度要长。

overflow属性决定文本比显示区域长的情况。

可以使用支持其他纹理的着色器将图像映射到文本顶部。UV映射选项控制纹理在文本上拉伸的方式。每个维度(横、竖)可以使用不同的设置。

参考

Unity - TextMeshPro图文混排

TextMesh Pro 的图文混排功能:插入自定义表情图

https://gitee.com/skode/TextInlineSprite 这个有动态表情,也有静态表情

该方案的缺点:不能使用 Unicode 去赋值 Text中的图文混排。步骤如下:

调用指定图集中的图:

<sprite=9 tint=1>//使用文字的叠加颜色/透明度。文字叠加的颜色同样被应用到图片上。tint=0 不叠加 tint=1 叠加

<sprite=9 color=#ffffff80>//使用特定的颜色/透明度 ,不随文字变化


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11415002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存