|
谢邀
稍微想了一下,答案可能不严谨,仅供参考。
这个功能模块说简单也简单,说复杂也复杂。
说它简单是因为核心功能就是 从AB包实例化GameObject到指定位置 而已。
说它复杂是因为真正做起来要考虑很多额外的因素。
下面从简单到困难依次列举 我的世界 中的建造功能。
众所周知,我的世界建造的是一个个方块,可以垒成任何自己想要的形状,房屋的建造就更不在话下了。这种建造系统是最简单,最原始的,设定好位置,实例化GameObject即可。
进阶点的,地狱之门的建造,需要十个黑曜石建造和一个打火石启动。
我们知道,平时我们乱扔黑曜石并不会有什么异样,只有在把他们排成固定的形状之后才会触发相应的条件。就像下面那样
使用打火石启动后就变成了这样了
如果让我来做,我会这样处理
每释放一个方块,就监测它相邻的方块是否能够构成一个完整的建筑,如果可以,就执行相关代码,把一个完整的建筑展现在玩家面前。(当然对于这个地狱之门来说不需要那么麻烦,只需要在用打火石的时候检测一次就行了,更加通用的就是我说的这种。)
具体的做法是如何呢?
先假设游戏世界除了引擎给的那一套坐标(即GameObject.Transform.Position),还有一套自定义的坐标系,他们全是整数坐标,也就是(0,0,0)这种形式的,并使用笛卡尔右手坐标系。
我们先提前用Excel表配置好规则,假设黑曜石索引为10001,打火石索引为20001。
这里的地狱之门就是
在Excel表用本地坐标表示就可以配置成:(0,0),(0,1),(0,2),(0,3),(1,0),(1,3),(2,0),(2,3),(3,0),(3,3),(4,0),(4,1),(4,2),(4,3)。然后在设置一个启动条件,即打火石的20001索引号。这里使用二维坐标的理由是,在我们自定义的坐标系下所搭建成的地狱之门一定是与x轴/z轴平行的,所以可以忽略一个维度。
具体的逻辑该怎么写呢?
首先定位难点,最大的难点就是如何检测目标是否匹配我们预先配置好的建筑规则。
在地狱之门的例子里,需要先把一定范围的所有相邻的黑曜石都搜集起来(相邻体现在任意两个相邻的黑曜石,他们一定是在x/y/z轴的其中一个上的坐标是相等。)具体做法就是随机选定一个黑曜石,沿着x,y,z三个轴坐标+1/-1(需要保证其余两个轴坐标不变)进行搜寻,如果找到就加入一个临时数组。全部搜集完毕就开始进行下一步的排序工作,即以一个轴为基准(提前判定好当前地狱之门以哪个坐标轴为方向进行延伸的)进行二维排序,把得到的数组元素做一下位置修改(修改成以左上角为原点,x正向向右,y正向向下)得到本地坐标,与Excel表中的规则进行对比,即可得知是否符合条件。
总结
这里只举了我的世界中一个简单的小例子,还有很多更加复杂的情况,但是万变不离其宗,就算你是堡垒之夜那种类型的游戏,一样可以这样处理。
总结一下就是选定自定义坐标系,Excel配表,实时获取游戏物体坐标并对其进行二次处理,把得到的数组与Excel表中的数据进行对比,来最后评判是否达成条件。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|