最近做了性能优化相关的工作,其中一些是关于战斗模块的渲染的。主要是对场景中使用的基于SkinnedMeshRenderer的网格进行了一些合批优化(降DC),记录如下。项目使用的Unity版本为5.6.4p1。
Lua笔记
最近使用Lua过程中的一些笔记记录,零零散散的,主要有以下这么些内容:
Unity3D UGUI 源码学习 LayoutGroup
Layout相关的组件用于对各种UI组件(RectTransform)完成自动布局。开发者可以自由地进行放置UI组件,然后通过LayoutGroup等来控制自动布局,如调整宽高尺寸、等间距放置、水平或竖直对齐等。相关的类都位于Layout文件夹内。
Unity3D UGUI 源码学习 Selectable
Selectable
承担的逻辑是对玩家的输入产生反馈。它是交互的控件的基类,能够响应点击(或鼠标)的事件而产生动画效果,同时有导航功能(Navigation)。事实上,最简单的交互控件按钮Button
,也仅仅是在Selectable
之上多了点击事件回调的处理。
Unity3D UGUI 源码学习 ExecuteEvents
ExecuteEvents
是EventSystem的一部分。在InputModule产生事件,Raycaster确定接收对象之后,ExecuteEvents
提供了用于向确定的GameObject发送事件的静态方法Execute(...)
。
Unity3D UGUI 源码学习 Raycaster
Raycaster的职责是向场景中的对象投射射线以判断光标是否在其上方,在Unity中,Raycaster系统用于当事件发生时筛选和确定事件的接收对象。对于指定的屏幕坐标点,使用射线投射可以取到所有位于该坐标点之下的对象并得出其中最靠近屏幕的一个。
Unity3D UGUI 源码学习 InputModule
BaseInputModule是Unity GUI事件系统的一部分,负责产生事件并发送事件。
游戏新手引导系统总结
拖了好几周,终于完结了,关于前段时间做的游戏的新手引导系统。这是第一次尝试做新手引导,踩了一些坑,也有了一些经验和总结,得出一些系统设计的思路,更多的是希望以后再做新手引导系统时可以有一些参照,避免一些问题。
C语言可变长度数组
最近又开始为现在的项目搞服务器压力测试,又捡起之前的LoadRunner。由于要加入更多的逻辑,所以一定程度上抛弃了原先的录制消息的方式,更多地使用protobuff构建和解析消息。从C#和Lua突然转换到C语言,感觉像是从现代化21世纪回到了蛮荒时代,各种读写内存和指针操作,又很是原汁原味贴近自然。
Unity3D UGUI 源码学习 EventSystem
Unity的UI系统中,EventSystem
负责管理调度事件,控制各输入模块、射线投射以及事件动作的执行。UI的事件系统处理用户的交互动作,通过BaseInput来获取用户输入的信息和状态,通过InputModule处理输入,产生和发送事件,通过RayCaster判断和选择需要响应交互事件的对象,最终由ExecuteEvents执行响应的动作,调用EventSystemHandler,以完成交互。