我想过直接将做好的这款工具直接共享出去,然后就写写怎么使用就好了,但是我发现一个事实。
脱离游戏业务逻辑的轮子,别人拿到后其实没有任何参考价值
这也是我没有直接使用现成的视觉小说插件原因,因为要改动起来太麻烦了。
所以下面我将会以如何制作编辑工具为出发点,给大家普及一个游戏重要核心工作,为游戏造自己业务相关的工具轮子。
在开始介绍工具与代码之前,先达成一个共识。
即是无论做何种类型的游戏业务功能,都是要注意逻辑与数据分离的。一款设计良好的框架,均是以数据为驱动。
我们要做角色控制器,实现角色移动的功能
需要先定义数据:是否处于移动状态 移动的朝向 移动的具体速度 是否有加速度缓冲
这些都是数据。
然后实现逻辑功能:检测到移动状态时,让角色播放move动画,当移动速度值发生改变,修改每一帧移动方向上的角色位置大小。
而具体是什么方式检测、通过事件呢?还是通过循环去判定呢?无关紧要,根据实际功能需求来即可。
这样的好处是:
表现的归表现,表现层出现的问题不会影响到实际的数据,也就是即是表现出现了偏差,但是只要你底层数据计算是对的,那就不会出现太严重的灾难。
而编辑器的本质,就是对业务数据的记录。
扩展Unity的编辑器功能
首先你想要自己做编辑器,其实对新手来说最困难一点是,无法制作工具的窗口界面。
因为在过去的Unity版本中,UnityEditor面向过程编辑界面的方式真的非常反人类。很多程序同学都困在我有很好的想法,但是却没地方去写它。
对于这种问题……我只能说。
既然做不到使用原生的UnityAPI,我们可以使用别人的轮子呀!随着游戏引擎的发展,我相信后面对基础需求层面的轮子会越来越多,后续的程序员们更关心的应该是自己想要实现什么的业务功能。
因此,我这里推荐Odin - Inspector and Serializer 这个插件
它有什么作用呢?
创建这样的窗口配置界面
BlackScreenContent:黑屏文本提示框
DialogueContent:对话内容文本框
EventContent:事件内容,主要用作播放当前timeline,设计目的是在内容节点里能更好的修改剧情事件。
PopupContent:弹窗文本(未实现)
SEAudioContent:音效播放,如开门、角色语音播放
DialogueContent内容说明
DialogueContent的功能与BlackContent等内容文本相似,了解了DialogueContent便了解了其他的Content节点
显示内容项
-
显示:设置显示的立绘角色
-
表情设置:显示角色的表情
-
关闭显示:打开这段对话时,要关掉的角色位置
-
内容文本:对话内容(后续做多语言需要修改该块)
首先先说明一下 ,
节点
文本
内容获取方法,如:<root>
文本
内容</root>获取
节点
文本
内容(红色字体部分),假设xmlElement是root
节点
。上面红色字体的
文本
其实是root
节点
的子
节点
,获取
文本
内容的方法,就是遍历子
节点
,判断类型是否为
文本
内容。方法如下: for (int i = 0; i < xmlElement.ChildNodes.Count; i...
今天总结一下对
QTreeView
节点
重命名的操作
在
QtreeView
中有一个void eidt(const QModelIndex &index)的槽函数,当你想要对某个
节点
进行重命名操作时,将索引传给该槽函数,该
节点
状态就能变成可
编辑
。
另外如果不是通过右键菜单进行重命名操作,通过双击也能实现相应操作,只需要通过setEditTriggers(EditTriggers triggers)函
3、获取数据时,必须区分当前是否为父
节点
,只有子
节点
使用index.parent()才有意义,父
节点
使用后返回的数据中row和column均为-1,说明无效。
QTreeView
右键菜单,网上有很多文章分享,但是数据修改,
节点
删除,
节点
增加,整合一起的很少有同学分享。
QtreeView
是ui中最常用的控件,Qt中QTreeWidget比
QTreeView
更简单,但没有
QTreeView
那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有mvc的特点)。
1. QStandardItemModel在
QTreeView
中的使用
使用QTree