为了完成Unity的官方Junior Programmer课程的作业,我决定制作One Epic Knight(OEK)的克隆版,这是一个移动端无尽跑酷游戏,并且可能在MVP完成后扩展一下。

所以我们都在同一页上,这里是OEK的相关特性:

  • 3条车道,你可以跳跃、滑行,并且通过在空中滑行来加速降落
  • 级别有转弯,转弯后的车道由玩家在转弯的位置决定(例如,如果玩家尽快转向右边,玩家会在右边车道上,如果玩家等到最后才转向右边,玩家会在左边车道上)
  • 在转弯时,如果玩家试图转向不支持的方向,滑行会直接更换车道而不是转弯

在右转弯的情况下车道的工作原理。车道的结果由中间箭头决定,而不考虑初始车道

还有更多特性,比如道具和符文系统,但这些对于当前阶段来说并不是很相关。如果你决定玩OEK,然后看到我的方法如何让我自己陷入困境,请告诉我。这个帖子的主要目的是为了这个。

我的方法

  1. 玩家、摄像机和管理者(更多信息见下文)都是静态的。运动的假象来自于路面向摄像机移动,并且希望后面会有动画。车道只是在X轴上的-2、0和2。这样可以避免由于浮点错误而导致的任何问题
  2. 路面由完美的矩形延伸的平面组成,每个平面都有一个empties集来自动地组装路面。如果一个路面段不是转弯,那么它就不需要触发盒子。每个预设都有一个脚本,它什么也不做,只是持有这个实例的特定点的引用,这些点然后传递给其他对象,如spawnManager、playerController等。这样做是正常的吗?还是应该找到所有需要的对象和它们的子对象而不依赖这样的“拐杖”?
  3. spawnManager empties组装路面从预设中,添加更多如果场景中有少于5个段,移除那些在玩家后面(在Z轴上)的。具体的逻辑是有问题的,且我计划在后面修复
  4. 当玩家在转弯触发器内时,车道切换控制器停止车道切换并开始转弯。WorldManager empties向摄像机移动游戏中的路面,在转弯时,整个路面都会以90度的角度在需要的方向旋转,使用turnPivot作为其转弯点。尝试使用不同的转弯点,但只有在将一个单独的empties放置在转弯的几何中心时,才能安全地保存车道在这个架构中
  5. 车道转弯后的计算使用以下代码。它基本上只是将玩家在转弯触发器内的进度(在Z轴上)分成3等份,然后强制车道到计算出的车道

float progress = Mathf.Clamp01(1.0f - (currentZDistance / 9.0f));

// determine lane after turn is done

if (progress < 0.33f)

{

currentLane = 2; // right lane

targetPosition.x = lanes[currentLane];

}

else if (progress < 0.66f)

{

currentLane = 1; // middle lane

targetPosition.x = lanes[currentLane];

}

else

{

currentLane = 0; // left lane

targetPosition.x = lanes[currentLane];

}

一条路面预设。右转弯

我的决定都是基于我的当前的Unity课程知识、计算机科学知识和玩家经验。

这是粗糙的,我知道,但是我很自豪自己能够使用AI、看到它建议我做什么、将它降级为代码、看到我现在花在清洁工作上的时间、并且只使用它来找到错误的修复、解释高级概念、在文档中搜索,但绝不允许它来命名我的变量。也许如果我有一个LSTM模型的上下文大小是我的头脑大小,我会尝试一下,但现在,它只是一个高级搜索引擎。为了制作文档,我开始这样做,因为过度依赖LLMs导致的文档中的一些混乱让我花了整整一天来重新熟悉它,这是一个好的教训,最终来说。

感谢阅读这个帖子。希望它至少有一点点有趣。注意,如果你决定玩OEK(它是免费的,并且可能已经无法再收取任何金额了,尽管它的mTxs非常不显眼),请知道我计划的特性,几乎所有的特性。T转弯、道具、盾牌、剑、敌人、硬币、分数。这些是我可以提前规划的,只有这个多了,我可能会朝着自己的脚踩。并不意味着我不会继续工作这个项目,尽管❤️