【问题标题】:How do I define a global variable in Godot?如何在 Godot 中定义全局变量?
【发布时间】:2020-12-10 20:36:22
【问题描述】:

所以我一直在为一个项目编写平台游戏,需要编写一个敌人。

我想在玩家的位置相对于敌人的位置在一定范围内时让敌人攻击。

除了这个我稍后会修复的草率 AI 之外,我似乎无法找到一种方法来访问我用于播放器的 KinematicBody2D 节点的位置。

我尝试在 World 节点中创建一个变量,但它无法访问它。

Here is my scene tree

任何建议将不胜感激

【问题讨论】:

    标签: position global-variables godot gdscript


    【解决方案1】:

    建议不要使用全局变量,而是在 Enemy 场景下添加一个Area2D,表示玩家对敌人的探测范围。然后在您的 Enemy 场景中,将 area_entered 或 body_entered(取决于您的设置)连接到您的 Enemy 脚本。它应该生成一个类似于_on_area_entered() 的函数。然后开始编写 Enemy 攻击代码。

    如果你真的想使用全局变量,那么另一种实现方式是创建单例/自动加载。为此,只需创建一个脚本(扩展任何节点)或一个场景。然后转到Project Settings > AutoLoad 并浏览您制作的脚本/场景。最后,输入节点名称,然后按Add。

    这将使您的脚本成为可以在脚本中的任何位置访问的“变量”。在这里您可以开始编写 Enemy 和 Player 交互代码。

    【讨论】:

      【解决方案2】:

      与 AI 无关,只是全局变量...

      按照 Martin 的回答创建一个单例,您可以在其中放置您希望由其他脚本共享的所有变量。

      在我的例子中(Globals.gd 是单例之一 - 你可能有多个),我的脚本使用这样的变量:

      onready var globals = get_node("/root/Globals")
      
      func _ready() -> void:
          globals.seqCC = 0
          globals.trackDone = true
          for i in globals.allTracksName.size():
              $TracksList.add_item(globals.allTracksName[i])
          globals.trackParts = ["RL"]
      

      顺便说一句...您也可以创建“全局”函数...只需将它们的代码放在一个单例中,您就可以从任何其他脚本中调用它们。 (例如,我使用它来将所有声音/音乐管理保存在我从任何其他场景调用的单独的全局脚本中。)

      干杯...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-27
        • 2016-05-07
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多