停更了好久,一是最近试着找了下新工作费了些精力,二是公司项目比较忙,三是项目从试验阶段进入重构阶段的时候,往往也确实费工夫。
现在抽空继续……
一、Besige项目现已托管在csdn平台上了!地址:https://code.csdn.net/obmar45/besige/tree/master
考虑到空口说白话对类似重构这种工作很难做到精确到位的描述,这样可能就让难得有少数几个愿意深入读我文章的同学更加感到云里雾里,我决定直接上工程!
原本是有放github的打算的,但网速实在是艰辛,既然博客写在csdn,那就用csdn的代码托管平台也是自然而然的事啦。
额外说下工程里的Packages文件夹,因为美术资源都是靠AssetStore下载,有些场景什么的就直接整个搬过来用了,并未经过整理,这样直接就以一个个资源包的形式存放在Packages目录下。假如是正式做项目,最好还是不要偷懒,做些挑选归类整理的好。
二、重构
1.按原设计思路将主逻辑分成了三个文件:
Besige.cs 一个简版的状态机
AssemblingState.cs 组装阶段的功能代码
RunningState.cs 运行阶段的功能代码
2.发现不同零件模块的脚本其实可以合并成一个通用的Modules.cs,方法也相对原设计有些变化,这个等五个模块大致完工了再总结。
3.大致解决了零件拼装时的位置和朝向确定问题,顺势把长木块加了进去。
4.一些细节的处理方法略过不表,说下一个过程中遇到的一个坑,就是prefab里的脚本要是引用了prefab自身,那么要注意,对其进行操作时一定是操作其Instantiate出的实例物体,假如直接对prefab进行了添加组件之类的操作,这个改动是会在游戏运行结束后遗留在prefab上的。我一开始没注意,直接对引用的prefab加了fixedjoint,测着测着发现fixedjoint数量莫名其妙越来越多,调试又明明只加了一次,后来才发现是prefab的改动保存了,坑爹的。
三、面临的问题
1.像轮子这种方向性的零件,如何在拼接时,智能化的改变其朝向,需要想办法解决。比如我现在两个轮子装在同一个木块左右,运行起来是一边向后转一边向前转。
2.更基本的,如何实现原游戏中按R键改变零件朝向功能,这个需要设计设计。
3.我现在的拼接位置确定方式,就是简单的以零件衍生出的trigger立方体位置为准,这种方法遇到各种不同尺寸的零件时是行不通的,可能要在零件上加位置精确的连结点。
恩,离第一阶段的原型完工还有那么一段距离。下次继续。