在 godot 版本 3.5 上增加敌人数量

问题描述 投票:0回答:1

所以我一直在用 Godot 开发一个基本游戏(我是初学者)我有一个敌人场景和一个关卡场景我想在我的关卡场景中添加很多敌人,一种方法是将敌人场景附加为关卡场景的子项并根据需要复制它,但这八种方法是否有更好的方法可以为游戏提供更好的性能

这就是我知道的方式

level
-enemy
-enemy1
-enemy2
-enemy3

这就是我想要达到的目标

level
-a group of enemies
nodes instance godot 2d-games gdscript
1个回答
0
投票

你似乎是到达戈多的人群中的一员,但想通过代码做所有事情。

如果您的目标是性能,那么是的,可能有一种方法:它使用

VisualServer
并且可能是
PhysicsServer
Physics2DServer
(分别用于 3D 和 2D),也许还有其他一些类似的类。这样一来,单个节点将以更好的性能处理相当于数千个实例

参见:使用服务器进行优化

但是:

  1. 代码将非常具体地针对您正在做的事情。在不知道你的敌人场景和代码是什么样子的情况下,我无法正确地指导你去做。
  2. 由于以上原因,很难迭代。最好先设计具有多个场景和实例的游戏。
  3. 常见的优化建议适用:测量性能(Godot 有一个profiler),并首先解决瓶颈。所以,只有当证明这是一个性能问题时,才用
    VisualServer
    et.al.
  4. 重写它
  5. 这不是适合初学者的方法。您将绕过 most 的 Godot 可用性,以性能的名义在较低级别编写代码。

所以,经验法则:你真的需要数千个实例,还是需要少数?如果你需要那些 成千上万的实例 然后首先按照正常的 Godot 方式进行,一旦你的设计完成,将它移植到使用

VisualServer
et.al.


我想除了有太多实例之外,您可能还想优化这个:也许这些方法确实是 CPU 密集型的。我不知道,因为我没有你的代码。因此,让我们更广泛地考虑优化。

我提醒您,在优化方面:

  • 你应该首先尝试通过少做来获得相同的结果(删掉不需要的东西,并选择更好的算法和数据结构)。

    也许只允许玩家附近的敌人移动,并禁用远离玩家的敌人。

    暂时抵制通过代码完成所有事情的冲动,看看 Godot 提供的类。您不需要硬编码自己的动画,不需要编写自己的寻路算法,不需要编写自己的物理代码,等等

  • 当你筋疲力尽时,尝试减少执行次数(延迟执行、延迟初始化、记忆/缓存结果、中断进程,以便它们可以跨多个帧稳定地完成)。

    也许当玩家靠近时实例化敌人。也许使用

    InstancePlaceholder
    。也许写一个实例池。你可能会回收远离玩家的敌人。

    另外如果敌人需要做一些复杂的操作,找一些他们可以用作临时结果的东西,这样你就可以推迟复杂的操作而不会让敌人停止工作。

    也许你应该考虑有一个后台线程来接收敌人的请求并连续执行它们。所以它对帧率没有影响。也许你可以用一些思考动画来隐藏你的敌人正在等待的事实。

  • 当你筋疲力尽时,是的,尝试做你正在做的事情,但速度要快。

    为此可能有另一种工具:使用引擎的 Mono 构建在 C# 中编写代码,或使用 GDNative 在 C++ 中编写代码。

© www.soinside.com 2019 - 2024. All rights reserved.