文档目标:深入分析 Vampire Survivors (VS) 如何处理 300,000+ 累计杀怪量的极端压力,并提炼对 Unity 开发的启示。
在 VS 后期(30分钟),屏幕上可能同时存在:
原版 VS 使用 Phaser (HTML5 游戏引擎) 开发,它是如何跑在浏览器里的?
这是 VS 最天才的设计之一。
Draw 调用。VS 后来移植到了 Unity (New Engine update)。
在 Vampirefall 中,我们应采用以下 Unity 技术复现 VS 的性能:
ECS_Performance_Optimization.md)。GPU_Instancing_Guide.md)。public class GemManager : MonoBehaviour
{
public int MaxGems = 400;
private List<Gem> _activeGems = new List<Gem>();
private Gem _superGem; // 红宝石
public void OnDropExp(Vector3 pos, int amount)
{
if (_activeGems.Count < MaxGems)
{
SpawnGem(pos, amount);
}
else
{
// 场上宝石已满,寻找或创建超级宝石
if (_superGem == null || !_superGem.gameObject.activeSelf)
{
// 选取离玩家最近的一个变为超级宝石,或者就在屏幕边缘生成一个
_superGem = FindNearestGem(PlayerPos);
_superGem.SetVisualToRed();
}
_superGem.AddExp(amount);
}
}
}
VS 告诉我们,性能优化不仅仅是程序的事,更是策划的事。
Vampirefall 准则: 当策划提出“我要满屏掉落物”时,程序应立刻提出“那我们需要一个合并/吸附机制”,而不是硬着头皮去优化几千个对象的渲染。