学习空间/场景实例、资源与路径
Godot 核心 / LESSON 07

场景实例、资源与路径

分清蓝图、运行中的实例、共享数据和可写存档位置。

基础约 7 分钟阅读,实作另计7 节现在学
CONCEPT MAP先看一眼知识之间的联系
先看一眼知识之间的联系01磁盘资源02节点实例03运行状态04用户存档
同一张资料卡的静态说明、屏幕表现与已读状态属于不同层次,先分类再选择保存位置。

01三个对象不要混淆

磁盘上的 player.tscn 是可加载的场景资源;PackedScene 是这种打包场景在程序中的表示;instantiate() 创建真正的节点实例,add_child() 才把它放入场景树。同一份场景可以产生多个实例,但它们使用的某些 Resource 可能仍然共享。

02路径从谁出发

写法含义适用范围
res://当前 Godot 工程根目录纹理、脚本、场景和资源
user://当前应用的用户数据目录存档和设置;不是项目源码目录
$Sprite2D从当前节点出发寻找子节点节点引用,不是磁盘文件路径
D:\恐怖rpgWindows 本地绝对目录本机工具操作;不宜硬编码进可分发游戏

03一个场景实例练习

spawn_practice.gd gdscript
extends Node2D

# 先在练习项目中创建并保存 player.tscn。
@export var player_scene: PackedScene

func _ready() -> void:
    if player_scene == null:
        push_error("请在 Inspector 指定 Player Scene")
        return
    var player: Node = player_scene.instantiate()
    add_child(player)
  1. 给空 Node2D 挂脚本,把 player.tscn 拖到 Inspector 的 Player Scene。
  2. 运行并在 Remote 场景树中找新建的节点。
  3. 清空资源引用后再运行,观察错误提示是否清楚;这属于依赖缺失测试。

04共享资源不是自动独立副本

两盏练习灯共享同一个材质资源时,修改材质可能影响两盏。两张物品卡共享静态名称与图标通常是好事;把某个玩家的临时“已拿走”标记写进共享资源,往往不是。先区分静态定义与运行状态,再决定是否需要资源副本或独立状态对象。

05把一个资源引用从文件追到画面

在 FileSystem 面板中找到一张练习图片,先确认文件名,再找到引用它的 Sprite2D。你要建立的不是“图片在某个文件夹”的印象,而是一条具体链路:源文件存在,纹理资源被节点引用,节点进入运行场景,最后被当前视野显示。同一个文件可以被几个节点引用;文件夹里有图片却没有任何节点引用,也不会自动出现在游戏中。

  1. 记录图片在工程中的 res:// 路径和引用它的节点名称。
  2. 在 Inspector 临时清空纹理,运行,观察这是缺少显示资源而不是节点消失。
  3. 恢复纹理,确认画面回来。
  4. 只在练习工程中使用 Godot 的文件管理操作调整文件位置,并在操作后检查引用;不要一开始就在外部终端批量改名。

06用一张资料卡分清定义、实例和状态

设想一张教学资料卡,标题和说明固定,玩家是否打开过它会变化。标题、说明、图标属于定义;屏幕上当前显示的那张卡属于节点实例;这次游戏是否读过属于运行状态。把三者写成三列,之后每增加一个字段都先问它属于哪列。例如“已读次数”不是图片属性,也不应该因为两张卡共用图标就自动共享。

可以先不写背包系统,只放两个 Button 和一个 Label。两个按钮引用同一份静态定义,分别记录自己的点击次数。再故意让它们使用同一个计数变量,观察为什么点击左边会影响右边。这个对照帮助你理解共享不是错误本身:共享标题减少重复维护,共享独立进度却可能违背需求。是否复制资源应由数据含义决定,不是看到联动就把所有资源全部复制。

07遇到路径错误,先判断是哪一种路径

报错里出现找不到节点时,先看它从哪个节点出发查找;出现打不开资源时,先看 res:// 下的文件;保存失败时,再看 user:// 的应用数据位置。不要拿 Windows 磁盘路径去修复一个节点相对路径。为问题记录完整错误信息,同时写出“这是节点路径还是文件路径”,往往就能把调查范围缩小一半。

导出前还有一项很有价值的自查:全文搜索自己电脑的盘符,逐条区分文档说明与运行时代码。说明文档记录工作目录没有问题,但游戏运行时依赖 D 盘上的个人图片,就可能只在开发机上成功。练习的完成证据应包含:清空资源能得到清楚提示;恢复引用后正常;关闭重开工程后引用仍成立。真正的分发可靠性还需要后续导出测试,不能由编辑器中的一次显示代替。

动手后,再勾选

不是“我看懂了”,而是你在独立练习里做出并检查过。

CHECK YOUR UNDERSTANDING

换一个情景,你会怎么判断?

保存玩家进度优先写到哪里?

用自己的话,留一条笔记

可以写“我之前以为……,现在发现……”,或者记录还没解决的问题。

仅保存在此浏览器0 / 20000

回到资料核对

本课是解释与练习,不替代对应版本的官方手册。网页实验不运行 Godot;未标明实机验证的代码,仍需在独立工程中检查。

把这课收进你的理解里。

标记已读不会自动勾选实作,也不代表游戏功能已经完成。

输入一个你想弄明白的问题。

按 Esc 关闭 · 标题、关键词和正文一起搜索