然而Fungus的重要问题就是,他与我自己编写的代码交互起来比较困难,而且我想给他添加其他种类的特效也非常不方便。所以我觉得必须要自己写一个才行。因为只有自己写的才能任意的添加各种特效,让整个系统按照自己设想的方式运行。自己要清楚的知道整个系统是怎么运行的,这对于将来的Debug和维护是非常有帮助的。
况且Fungus是一套完整的有限状态机编辑工具,他的功能完备到我可以不写任何代码,只编辑一下节点图就可以做完一个游戏,而我并不需要这么大量且复杂的功能。这样一套复杂的系统在自己的项目中,总是觉得像一块定时炸弹,搞不好就和我的什么其他的代码冲突了。而其他类似的台词系统,要么就是不符合需求,要么就是太贵了,对于我这个需要节省资金的开发人员来说消费不起。
原本的选项功能编写起来非常的复杂,当我想要让选项跳转到某一句话,我需要输入这一句话的编号。而每当我调整对话的顺序,我就需要重新指定编号。虽然后来觉得可以通过唯一码识别每一句话,但是既然如此,为何不做节点图呢?

还是想做节点图

说做就做,一开始我尝试了最复杂的做法,也就是利用UnityEditor内的代码从零开始手写一个节点图。虽然当时已经实现了基础功能,但是节点图的保存和读取成为了一个大问题。后来我了解到Unity开放了一个实验性功能,GraphView,这个功能其实就是Unity最近更新的Shader Graph的一部分。Shader Graph的节点图编辑功能就是用GraphView写成的。
而台词只需要这么写
<sh=5,50>你这个人真的</sh><wa=4>奇怪</wa>
这个效果看起来非常的夸张,但是不用担心,在写代词的时候可以随意的指定其动量和大小。
至此,大部分的难点都已经攻克,只剩下Debug和完善界面了。
目前本插件已经在Unity Asset Store上出售,感兴趣的可以去体验一下。

补充:关于TextMeshPro的字体问题

这里再提一下,TextMesh Pro需要你生成专门的字体文件。也就是说,如果你想加入自定义的汉字字体,那么你需要提供一个包含汉字的字体文件,然后用TextMesh Pro为每一个汉字单独的生成一张贴图(其实不是一个字一张,而是一张贴图上很多个字)。
最后我做出来的支持显示八国语言的字体文件有144MB的大小。相较于原本的11.7MB的字体文件来说实在是太大了,但是这也是没有办法的办法。这里为大家推荐两种字体的生成方式,导入TextMesh Pro后,通过Window→TextMeshPro→FontAssetCreator打开制作字体的工具。
首先确保你的字体的要在TextMeshPro的Font文件夹下,不然有可能会报错,并且确保你的字体文件名称只有英文和数字,不要有符号和其他文字,可能会报错。
然后重点在于「CharacterSet」这一栏,TextMeshPro并不是你的字体里有多少字他就渲染多少字,而是需要你来指定。指定的方式有很多,推荐「Characters from File」和「Unicode Range(Hex)」 网上不少推荐使用Character from File搭配常用汉字列表的,我这里也分享一个: 常用的7000个汉字 。下载下来解压后是一个txt文件,导入unity然后在「Character from File」里选择这个txt文件就行,而且如果一次性渲染的文字量大,可以将「Atlas Resolution」设置为4096*4096或8192*8192。
虽然这个常用7000个汉字的确可以满足大部分需求,但是如果我们要做更多的语言,该怎么办?这里我就推荐一下我的做法,利用Unicode Range,以下是八国语言的Range:
00-24F,400-52F,3041-30FF,3104-312A,3400-4DB5,4E00-9FA5,AC00-D7A3,F900-FA2C,FF66-FF9E,20,22-23,25-40,5B-5D,7B-7E,2014,2018-2019,201C-201D,2022,2026,2160-2169,2170-2179,2460-2469,3000-3002,3005,300A-300B,3010-3011,3280-3289,FF01,FF08-FF09,FF0C,FF1A-FF1B,FF1F,FFE5
将上面这串代码放进去就行了,其他设置不用动,直接点 Generate Font Atlas 开始渲染。
输入你缺少的字符,点击中文转Unicode就行了,这里你输入的不是中文也没问题。得到一个"\u30e9"这样格式的东西后,我们不要前面的"\u",把你后面的内容输入到「Unicode Range(Hex)」里,并用英文的逗号让其和前面的内容分隔开。

关于我的项目

我以为游戏其实和其他的各种娱乐一样,既可以很艺术,也可以很商业。但是我就是想做一个艺术品出来,我认为游戏的深度不仅仅可以体现在玩法上,也可以体现在思想上。
这个项目虽然4月份才启动,但我投入在其中的思考时间已经长达两年。从18年开始,我就一直有一个想法,就是探讨在绝境之中的人性。如果一群互不相识的陌生人,他们来自天南海北,各行各业,各民族各肤色,但此时他们被安排到了一个密室之中,他们的资源有限,要在饿死之前逃出去,那么他们会怎么做?他们之间会发生什么?我带着这样的问题想了两年,其中也尝试过将自己也置入类似的绝境之中。最终我有了一个还算是满意的答案,于是我决定将这个答案通过游戏的方式揭示出来。除了探讨人性,我其实会更多的探讨经济生活,社会生活,政治生活方面的问题,其中会带有大量的相关问题的影射和对于相关问题的思考。而其实所有这些问题,都在反应人性的同时塑造着人性。
游戏中有23名NPC,每一个都经过了精心详细的设定,我已经为他们每个人都撰写了接近2k字的背景设定,而这些设定不仅仅只是一个个故事,他们之所以经历这些事情,都是因为各种经济、社会、政治的原因。而这款游戏的重点就在于这些NPC,我希望让这些NPC是有血有肉的人。同时游戏的时间是自然流逝的,无论玩家做不做任务,死亡的日期都会到来。而所有人的心境也会因为死亡的逼近而逐渐的产生变化。尝试多个周目将会是获得游戏完整体验的重要手段。
与其他类似的题材不同的是,在本游戏当中,相当多的信息都是模糊的。人们无法确定他们是否真的被困起来了,他们只是因为见证了死亡而不敢出去。人们不知道他们是因为什么而被困起来的,也不知道是什么力量设下的牢笼。最关键的是,他们没用明确的逃离目标,他们知道他们要出去,但是连把他们困住的东西是什么都不知道的情况下,他们如何出去?更多的不确定性,群体的共同敌人的缺失,让人们更加惶恐不安。而密室当中人员众多,人与人之间的猜疑又更加的复杂了。
现在还在项目早期阶段,预估两年但实际可能需要4年也说不定。还请各位不要期待。文中若有任何错误或疏漏,还请在评论中用合适的语言指出,谢谢。
I
创作笔记
创作笔记

3631 人关注

评论区