关于GameScene和视觉脚本的附加

您好,

关于GameScene,如果游戏是按第1关、第2关这样的方式推进,那么是否应该为每一关分别构建独立的GameScene(如GameScene_第1关、GameScene_第2关),并在其中配置各个对象?

如果上述理解正确,那么对于角色等对象(场景)附加的VisualScript,大多数情况下是否选择“内置脚本”更为合适?如果不将VS附加到第1关的player上,那么配置在第2关的player上时,该player将不会附带VS……虽然可以将第1关的VS附加到第2关的player上,但对于像player这样数量较少的角色或许可行,但对于大量出现的敌人来说则非常不便。

听说内置脚本存在一些限制,因此希望能请教一下内置VS与非内置VS各自的使用场景。

是的。每个 GameScene 作为一个文件。Godot 项目结构

文件夹名和文件名请使用 snake_case。

示例文件夹结构

project 📁
    scenes 📁
        game_scene_1.tscn 🎬
        game_scene_2.tscn 🎬
        game_scene_3.tscn 🎬
    game_objects 📁
        player 📁
                player.tscn # GameObject
                player.vs
        enemies 📁
                slimes 📁
                    slime_1.tscn # GameObject
                    slime_2.tscn
                    slime.vs

存储在 .tscn 文件中:

[sub_resource type="VisualScript" id="VisualScript_o1b1i"]
data = {
"any_state_pos": Vector2(0, 0),
"base_type": &"GameObject",
"is_created_first_action_node": true,
"nodes": [
0, Vector2(-26.6667, 106.667), SubResource("VisualScriptAction_06ixh"), 
1, Vector2(186.667, 80), SubResource("VisualScriptAction_jgf6y"), 
2, Vector2(0, 0), SubResource("VisualScriptActionLink_d6fgq"), 
3, Vector2(0, 0), SubResource("VisualScriptActionLink_siowv"), 
4, Vector2(0, 0), SubResource("VisualScriptActionLink_rupok")],
"scroll": Vector2(-49.3939, -398)
}

适合原型开发。长期来看并不理想。

游戏场景 游戏对象 菜单场景 实例化的游戏对象「内置脚本」
GameScene GameObject MenuScene 带有内置脚本的实例化 GameObject​:clapper_board:
![image 19x21, 100%](upload://xhJ3tPjHLREEc2ZWApaLqwu19Rl.png) ![image 22x17](upload://wHzWywLhQvPVQg4VCrcKUi73BPr.png)
:cross_mark: :warning: :cross_mark: :warning:
![image 234x378, 50%](upload://yi6wDGRw7CKfNYT7CA8Dl96vovP.png) ![image 227x187, 75%](upload://6EI7HSNkGDT6vrl96BLxfOtu6cR.png)

我只会在 GameObject 场景的 .tscn 文件中使用内置脚本。我认为这不是良好的实践。我仅在一次性原型开发中使用它。

希望这对你有帮助。

1 个赞

谢谢,Brasten。

在我正在重新编辑原始问题文本时,收到回复让我感到惊讶。感谢您细致的解释,甚至专门制作了表格。我不是很聪明,所以仍然无法理解,但我会花时间仔细查看并思考您教给我的内容。感谢您的回复。

谢谢,Brasten。

关于前半部分在项目文件夹中构建场景的内容,我已经理解了。
确实,需要为每个舞台(关卡)增加 game_scene,非常感谢。

关于后半部分的嵌入式脚本,
虽然您特意用图片以表格形式进行了说明,但我还是觉得有些难以理解。
不过,我至少明白了除了原型对象之外,最好不要使用嵌入式脚本这一点。
我会慢慢学习。非常感谢。