6.9 KiB
#unity/日常积累
首先,需要设置一下,项目属性;
设置图集模式成,默认开启;
这时候,这段代码才会正常生效;
这里就是程序的入口;
运行程序,是可以正常显示飘字内容的;
场景中,只有一个GameObject物体;
上面挂载的脚本和控件是这些; 先看一下这个;
是这个类型的;
其中,只包含了这个数组;
点击,索引过去;
配置文件的数组,目前只设置了一个;
继续点击,索引过去;
这个图集,代码上对应的是:
然后,就是一个Sprite图片列表;
根据这个继承关系,可知,它是一个序列化文件;
根据这个可知,这个序列化文件,是可以通过右键创建出来的;
试一下;
创建了这个;
上面的sprite,是拖曳的这个图集;
继续分析一下,挂载在脚本上的材质; 这是一个使用了默认shader的材质,没啥特别的;
索引过去:
是用了内置的shader文件;
然后,演示物体上,还有其他插件,也是输入字符添加或者拖曳即可;
双击,打开一下这个脚本文件;
在Start入口函数中,前面说了开始显示字的; 在开始显示之前,是有一个Fill()函数,这就是处理图集的;
在最开始的位置,循例,还是做一下判空操作,还有一些添加组件的处理;
像这些个;
都会索引到这里,在游戏运行的时候,会展示出来;
就是前面的这个面板;
前面会定义几个List,用来存储顶点等信息;
回到Fill()函数中,这里有俩,是否在编辑器模式下的,赋值处理; 貌似是同一个玩意儿,互相赋值吧,分别是否在运行时候;
然后,就是开辟空间了;
设置图集的index序号,还有材质的主texture;
这里的texture索引过去看一下;
就是拿到图集索引;
非运行状态下,只会拿到一个图片; 所以在非运行状态下,只显示了这个;
剩下的这些个,用来存储顶点信息的List,长度都是这个;
其中,这个mText实际上,指的就是传参进去的;
然后,就开始遍历文本,去拿图片了;
索引过去看看;
这里显示返回一个null值,没关系,因为是有重载的;
这就是重载函数;
索引过去看看;
这是一个字符为key,sprite图片为value的字典;
如果为空,就是最开始的时候,就会更新函数;
判空,三元运算符,初始化,然后clear清空一下;
索引过去这个的:
在这个类里,是有相关定义的;
继续索引一下,往这个图片列表添加的函数,是在这里:
是这个方法里,包含了添加函数;
这种写法,表示是设计了,unity该控件的右侧面板,在这里是CSSpriteAtlas类;
是对应上这个的;
可以看到,是通过点击按钮,就可以执行这个函数;
然而点击之后,就报错了;
IO路径报错相关;
说明不是这个方法添加的; 实际上,因为是public的,而且Sprite类型,unity的编辑面板,是可以直接识别出来的;
所以,实际上就是这一段了;
知道了数据来源之后,直接往字符图片字典,添加数据就好,其中key值就是图片的名字;
因此,前面那个获取图片的方法,在知道了图片名字之后,就可以获取得到,图片了;
回到Fill()函数中,拿到图片之后,就设置宽度参数相关的了;
然后,就是设置锚点相关的了,目前基本用不上; 还有,就是继续获取图片,然后设置索引之类的了;
然后,这部分就是构建模型网格,相关的方法了,暂时没看懂;
Unity中Mesh Filter、Mesh Renderer的作用
索引这个方法,过去看看;
可以发现,也是构建网格尺寸相关的了;
查了一下:
网格构建完成之后,就是设置进meshfitter了; 需要注意的是,编辑器非运行状态用Mesh会报错;
以上,就是飘字系统的核心逻辑,Fill的方法了; 因为图片字典,是以图片名称作为key的,所以只需要填写数字,就可以显示当前飘字的原因了;
至于飘的动作,就是在update函数里面,通过倒计时的形式,到了某个时间节点,就改变物体的localposition就好; 如果移动要添加各运动曲线,也是这里设置上就好;