项目目标和规则
为了使游戏开发不断发展,我决定参加一个名为Kenney Game Jam的小型果酱。 卡纸的规则规定我只能使用Kenney Asset网站上的资产。 我在大约5个小时内制作了这个小游戏。
这是我发痒的最终结果。
开发日志
考虑了Kenney Asset网站上可供我使用的资产后,我决定制作一款基于船只的游戏。 我从来没有做过飞船游戏。 我知道我必须要考虑的挑战之一是水上和帆船运动的“感觉”,同时还要考虑我只能在有限的时间内进行果酱工作。 我想进一步谈谈我如何进行航行。
我使用了Kenney Asset Pack中的一组草砖,我将其色相转换为看起来像水,我实例化了一个100 x 100网格,选择随机砖并在途中放置随机岛。 瓷砖都具有网状碰撞器,因此在海上航行会更有趣,并且由于它们的几何形状相对简单,因此对性能的影响不大。 该船本身有一个胶囊对撞机,位于“水线”上方的龙骨上方,给人以船在航行的印象。 瓷砖具有低摩擦且略有弹力的物理材料,可应用于模拟假想的弹力效果。

提供给用户的控制轴是二维的。 用户可以左右操纵船(偏航),并向前和向后(局部Z轴)施加力。 俯仰完全由重力和地形施加在船上的力控制,从而使用户能够“爬升”出波浪和地面。 有了足够长的胶囊对撞机,我不必担心船沿该轴翻转。
滚动可能是我必须处理的最有趣的轴。 重力和地形会影响此轴,但是我需要一种校正机制来模拟船的运动。 使用全局正Y轴和局部正Y轴的叉积,我基于船是向左还是向右滚动找到了一个正负矢量。 在横摇轴上施加此校正扭矩(与在船上的滚动程度成正比)可以使船看起来像是在水中漂浮。 需要进行测试以调节船上的扭矩和角阻力,以确保船的阻尼不低于或高于。
刚体。添加扭矩(rightingForce * Vector3.Cross(transform.up,Vector3.up),ForceMode.Force);

后见之明
事后看来,我可以在游戏阻塞的时间范围内解决一些问题。 我可以通过扩大图块并生成更少的图块来允许可玩区域更大。 同样,我也相信海洋的“波浪”本来可以不那么陡峭,但可以使流体运动更多。 我在实现声音时遇到一些问题,其根本原因在于我尝试使用的文件类型。 如果我最近在Unity中完成音频工作,我相信这不会成为问题。 最后,我不确定是否允许玩家全速向后航行。 事后看来,我想对反向力施加乘数以使其很小。 这将允许玩家在被卡住的情况下向后移动,但速度会很慢,几乎就像他们必须“划桨”一样。
未来
如果将来我要继续从事这个项目,可能的功能可能是:
- 水粒子效应(尤其是在船首)
- 标题屏幕带有“按开始提示”(这是小事)
- 更多船型
- 更多岛屿和障碍物类型
- 越过岛屿
- 宝箱击中需要使用坡道的岛屿顶部,获得金币