为了使我的生活更容易,我想出了创建我的Idle-Breakout等级的想法,从像素艺术图像中创建等级,令人惊讶的是,这实际上有效!

一切都从我在YouTube频道上发布的一份关于如何创建一个非常基本的Breakout游戏的教程开始。视频的结尾我鼓励观众自定义它以深入学习,但我收到了几条评论,人们只是缺乏实验的想法。

所以我决定带头做出示范。

这个想法很快就来了:现代化经典街机Breakout,添加对战模式并移除板子以将其转变为无聊游戏!

这只是一个小创意练习,新视频的素材。 但是,我想要一个视觉上的吸引力,等级在这个简化版本中创建的方式令人难以置信地繁琐......一个巨大的2D整数数组,需要手动填充,每个整数代表一个特定的颜色。 不仅仅是创建它耗时繁琐,而且难以可视化最终结果,尤其是在等级达到某个大小时。

"如果我可以用像素艺术绘制我的图像并将其解释为等级,那就太好了。"

我承认这是一个主要由懒惰产生的想法。但是,最终,我真的很喜欢结果!

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

通过SRP优化,它在这样的等级中工作得很好,等级中大约有3,000个立方体。稳定的120FPS,尽管每个立方体都应用了不同颜色的材质.SetColor()。

但当我尝试创建一个更大的等级时,我很快就回到了现实。等级中大约有5,000个立方体时,我就下降到30FPS了。并且这只是渲染立方体而没有任何游戏。

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

哔! 25,000块,仍然在120FPS。太好了。这就是我的解决方案。足够创建128x128像素的等级,尽管我怀疑我会远远超过64x64,所以没有必要优化得更好。

但...我遇到了另一个小问题......我的可视化反馈工具,Feel Craft,我用它来创建所有你在我的视频中看到的小动画,并不支持RSUV驱动的颜色动画......无所谓,我立即推送了我的工具的更新!

当前的设计很可爱,但我不认为它们特别令人愉快。 我需要找到一种允许球弹跳,进入弹跳隧道的美观风格......我会在接下来的几天里给它一些思考!