为了让我的生活更轻松,我想出了一个创造 Idle-Breakout 等级的想法,从像素艺术图像中创建它们的想法。最疯狂的部分是它实际上有效!

一切都始于我在 YouTube 上发布的一篇关于如何创建一个非常基本的 Breakout 游戏的教程。在视频的最后,我鼓励观众以深化他们的学习为目的来自定义它,但我收到了几条评论,指出人们缺乏实验的想法。

所以我决定带头做。

这个想法来得很快:现代化经典的 Breakout 游戏,添加对战模式,并去掉杆子,变成一个 idle 游戏!

这只是一次小的创意练习,用于新视频的素材。但我想一个视觉上令人愉悦的等级,等级在这个简化版本中是通过一个庞大的 2D 数组来创建的,其中每个整数代表一个特定的颜色。它不仅花费时间创建,而且在等级达到某个大小后,难以可视化,最终结果,甚至在某些情况下是不可能的。

“那样做会更容易,我可以在像素艺术中绘制我的图像,并将其解释为等级。”

一个大部分是出于懒惰的想法,我承认。但最后我完全爱上了结果!

你想知道它是如何工作的吗?实际上是很简单的。我有两个像素艺术图像:一个是背景,一个是前景。代码加载两个图像并为每个像素创建一个砖块。如果一个像素是透明的,就会被忽略。前景中位于边缘的像素会生成不破坏的块。

https://reddit.com/link/1u550ba/video/m8qdiqbpt47h1/player

使用 SRP 优化,1,000 个块的等级可以在 120 FPS 的稳定速度下运行,尽管每个块都使用 material.SetColor() 应用不同的颜色。

但我很快又回到现实,当我试图创建一个更大的等级时。5,000 个块时,我就下降到 30 FPS了。只是渲染块,没有任何游戏玩法。

使用一个材质属性块?糟糕的想法,结果甚至更糟... 9 FPS。顶点颜色?我会让你免去几天的试错... 最后,我只好在 Reddit 上发了一条帖子,某人建议使用 RSUV 结合 GPU Instancing。对我来说完全是新领域,我以前甚至没有听说过。经过一些阅读,一些代码和一个新的 RSUV 支持的着色器,我突然有了一种完全不同的方法来改变我的砖块的颜色!

砰!25,000 个砖块,仍然在 120 FPS 的稳定速度下运行。Wonderful。 这是我的解决方案。足以创建 128x128 像素的等级,尽管我怀疑我会再次超过 64x64 像素,所以没有必要再次优化。

https://reddit.com/link/1u550ba/video/yl8qgm1yt47h1/player

但... 我遇到了另一个小问题... 我的视觉反馈工具 Feel Craft,用于创建所有您在我的视频中看到的小动画,尚未支持 RSUV 驱动的颜色动画... 没关系,我立即推出了我的工具的更新!

当前的设计很可爱,但我认为它们并不是特别令人满意的游戏。 我需要找到一种让球可以弹跳并进入弹跳隧道的美观风格... 我会在接下来的几天里思考一下!