0基础记录游戏开发#15


3楼猫 发布时间:2024-05-21 17:16:05 作者:依卞 Language

悲喜交加的更新日子到了,因为比赛和项目的原因(lan)所以没有更新,昨天盒友托梦给我让我更新了,吓得本就睡不好的我更是在心灵上多了一层霜,噢,我深深地感到愧疚(kuaile)


项目其实有在持续开发中,学习也在有条不紊地混日子,但是,这两天我尝试参加了人生当中的第一次gamejam,48小时那种,对于实效性来看,我决定先分享一下此次gamejam我负责的位置(bug制造者)

本次gamejam的主题是mesh,当初为了讨论出要做什么游戏更是跟队友长篇大论一小时,最后敲定了一个 塔防沙盒物流幸存者集成缝合怪游戏

是的,于是我们怀着试试的态度逝世了。

先说结果:在五个人爆肝(各种意义上的)下,人均两天睡眠平均7小时不到,奈何要素太多,体量太大,给了我们一次沉痛的教训。我们得到了一个半成品,一个“很有潜力”的作品。

0基础记录游戏开发#15-第0张

开发中的插图

按照惯例,接下来是知识的输出时间了

本次比赛我们组有三名程序,分别负责 怪物敌对机制部分,主角行为机制部分,各类塔防资源机制部分。

我负责的是主角行为机制部分(有相关经验得心应手一点)

这些东西已经开始变得熟悉了(毕竟经典开局)

0基础记录游戏开发#15-第1张

觉得眼熟?🤔

这样写player的场景,此时此刻正在地球的各处上演!😨

下一个写player可能就是你👈

除非你能做出生命中最重要的决定👍

向所有策划证明,你拥有写别的项目的力量与勇气✊

加入player代码的行列吧! 💪

成为定义player的精英!🤖

见识奇异的enemy和monster👽

把一个个框架UI毫不费力地贴上去🚩

成为编程人!🤖


话说我感觉我也莫名其妙养成了一些编程的好习惯了(比如详细的注释和接口)

0基础记录游戏开发#15-第2张

实现player移动

这里使用的是利用刚体组件,配合监听键盘信息来实现我们player的移动(ps:0基础系列的第一个项目Luna的移动方式与这个是一模一样的,甚至代码都是抄过来的),当然,在移动的时候记得需要给我们的player更改动画组件的播放,让主角可以转个头侧个身。

0基础记录游戏开发#15-第3张

射击功能实现

一个能够战斗的塔防游戏,当然自己也需要一点战斗力,所以我加了一个射击功能,具体表现就是鼠标左键开火,子弹自动向前射出即可。需要注意的是鼠标的坐标需要先转换成世界坐标,不然游戏里面你的鼠标位置始终是对不上的,并给子弹一个旋转的角度,让子弹能够看起来正常地发射

0基础记录游戏开发#15-第3张

记得给主角加上组件和脚本,以上,就是主角本身简单的功能。

接下来是主角行为的延伸功能或者机制

建造机制

我们初定的塔防模式就是主角收集材料,建造防御工事抵抗怪物进军。

于是,主角需要一个建造功能(写之前我并不觉得这玩意很难)

0基础记录游戏开发#15-第3张

建造主体

我们建立一个createmode脚本,用于实现建造功能,在脚本开头,我们直接定义了三个公开的对象接口,并给了一个建造模式的开关。

起初我在思考,我需要一个按键进入建造模式,然后可以选择将要建造的防御工程放下来,这是一个很公式化的东西

这让我想起一个段子:

把一只大象塞进冰箱需要几步

三步

1.打开冰箱 2.把大象塞进去 3.关上冰箱


是的,我一开始就是在这种思维下,觉得这东西很简单,不就是把东西放下来嘛,于是我进行了实践,一个生成函数就可以完美实现我想要的效果。但是,我发现了不对劲,这确实是可以实现“把东西放下来”这个动作的,但是在游戏中,他不应该这么“自由”,建造的东西不应该“指哪放哪”,比如:建在石头缝里,这是可以实现的,当这又是不合理的,比如你可以在有建筑的地方再建一个,这同样是可以实现,却不合理的。

是的,他存在是合理的,但又不合理,这我们姑且也算是bug。

于是,我放弃了“在鼠标处按下E创建”这个方法。

改为了“在固定位置按下E创建”,这个固定位置其实就是我们提前把碰撞器铺好,然后用鼠标判定是否在碰撞器内来进行下一步工作。

0基础记录游戏开发#15-第3张

于是我给全图都铺上了碰撞器,充分体现出来了mesh 网格的主题

在之后,我觉得这种方法有更好的改进手段。

那就是 植物大战僵尸中种植植物的方法。这两中方式都差不多,甚至都是放置类塔防的核心,本着之前做过植物大战僵尸项目的经验,我直接开始明目张胆地抄我之前的代码了

0基础记录游戏开发#15-第3张
0基础记录游戏开发#15-第3张

把按键事件改成了“进入建造模式”避免出现了两种情况冲突,妨碍了player自己的射击节奏。

具体植物大战僵尸中如何实现 种植 这一方法的,可以去看看我之前写过的植物大战僵尸那篇文章

震惊,植物是这么来的?!

OK,按理来说大概是一个流程,那么我们的移除炮台建筑,是怎么实现的呢?


又是一个很心酸的故事

我刚开始时认为的拆除是“识别鼠标处的建筑物按Q进行删除”毕竟是需要判定的,不然到时候变成上帝之手点啥删啥把地图都删了就不好了。

这种方法需要涉及一个新知识:鼠标射线热点

这个方法就是利用射线(一条从鼠标射向游戏里面的射线)判定当前鼠标坐标上射线射到的物体是否满足条件(是否是建筑物)再进行下一步判定。

我也想整个机制全靠鼠标射线

是不是很大胆

整个机制全靠鼠标射线

在gamejam这一次

就这个游戏

就完全是这个游戏,全靠鼠标射线

我最早加入进来开发的时候

跟所有队友说的都是鼠标射线

难以想象

喔所有队友策划啊,美术啊

他们所有人都很兴奋

程序队友他们很兴奋

鼠标射线 一直说的是鼠标射线

我们一直在做鼠标射线的准备

所以当时跟队友说的时候

我只要你们等我20分钟

或者只要你们 25 分钟

他们说为什么

我说很简单

我待会写两个

鼠标射线两个小时

我一个项目用两次

创建物体写一次

破坏物体写一次

我一个项目用两次

我用全部项目

两次我选一次

鼠标射线啊

这个项目就完了

我选一次

那两次就够了

然后前面的代码捣鼓捣鼓

严格的照抄

我说只要你们20分钟我就写一个机制

所有队友都 真的太厉害了

就挑战性太大了

一点都不能错呀

但是后来我还是放弃了


你知道为什么

我研究了大量的鼠标射线的文献

包括CSDN,GITHUB

我还求着高人指点

CHAT-GPT

4o版本的


结果我发现这东西还是太难了

还是太难了

到底哪里有问题呢

我也不知道,但就是有bug

有bug啊,我修不了

种种不下去,删删不了

所以到后面我还是放弃了

......

是的,我确实放弃了,最后我还是选择了植物大战僵尸的形式:用铲子挖掉

0基础记录游戏开发#15-第3张

合理利用资源

光是这俩机制,就已经消耗了我一整个下午的时间了非常好的机制,令我的炮台旋转

下一步 UI

0基础记录游戏开发#15-第3张

熟悉的UI,但是不同的游戏

在合理的位置布置好合理的UI,看起来舒服就行,顺便创建一下动画。

下一步 地图

利用多边形碰撞器给地图框好边界,防止我们人出去

0基础记录游戏开发#15-第3张
0基础记录游戏开发#15-第3张

总之开发的过程确实很艰苦,特别是在有48小时时限的高压下,压力与焦虑的双重增加,在凌晨五点钟我们仍旧在讨论bug与画画资源。

顺带一提,一个会画画的美工真的是大爹啊

一个稳定的大爹啊,

太令人羡慕了吧这个画画的能力(让我想起了我拉的💩)

0基础记录游戏开发#15-第3张

拣爱 游戏制作人发表总结

一份不完美的比赛经历与一次完美的比赛过程,给我带来了一次无与伦比的体验,这一份从来没有过的艰辛旅程同时让我受益匪浅。

“这本就是一个注定不会完美的旅程,我们要在里面尽力得到的东西并不是这48小时创造出来的游戏,而是这个过程。如果我们将时间倒退回48小时之前,你们还会选择同样的方案吗?你们48小时前的想法与现在的想法相同吗?这48个小时中,游戏像魔法一样一个个凭空出现,我觉得我们应该学会的是在这个魔法的过程中不断认知到的东西,这些东西不仅仅是现在,更会在将来职场令你们大放异彩。”


© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com