【极简】Godot4.4 简易仓库A(附完整代码/素材包)

无望其速成,无诱于势利。

一、展示

【极简】Godot4.4 快速搭建测试场景A(附完整代码/素材包)基础上,本文实现简易仓库,功能:物品堆叠。

请添加图片描述

二、复刻

(一)节点结构

1. inventory_ui.tscn

  • InventoryUI(CanvasLayer)
    • PanelContainer
      • GridContainer

2. slot_ui.tscn

  • SlotUI(VBoxContainer)
    • TextureRect
      • StackLabel(Label)
    • NameLabel(Label)

请添加图片描述

(二)独立资源/脚本

1. event_bus.gd(事件总线)

功能:集中定义信号

extends Node

@warning_ignore("unused_signal")
signal inventory_item_added(item: InventoryItem)	# 添加物品

var inventory_items: Array[Resource]	# 存储物品数据的列表

func _ready() -> void:
	inventory_items.resize(6)

项目设置->全局->路径(该脚本的路径)->添加,使得该脚本被设置为全局脚本。

在这里插入图片描述

2. inventory_item.gd(物品信息模板)

功能:可复用的物品信息的模板

class_name InventoryItem
extends Resource

@export var texture: Texture
@export var name: String
@export var max_stack: int = 99
var stack: int = 0

3. inventory_item.tres(物体信息实体)

创建resource文件,并命名为 inventory_item.tres;

在这里插入图片描述
在这里插入图片描述
点击打开后,在检查中把inventory_item.gd 附加到 inventory_item.tres 上;

在这里插入图片描述
可以发现检查器中多出来InventoryItem,里面正是在 inventory_item.gd 中的各种数值。

(三)附加脚本

1. Egg.gd

附加到egg.tscn中的Egg节点(Sprite2D):

extends Sprite2D
## 可收集的蛋

@export var item: InventoryItem
# 蛋的默认数量
@export var stack : int = 1

# 从PickUpComponent连接的信号
func _on_pick_up_component_body_entered(body: Node2D) -> void:
	if body is CharacterBody2D:	
		item.stack = stack
		EventBus.inventory_item_added.emit(item)	
Godot 4.4 中,使用 `.pck` 文件打资源时,资源路径不再自动含 `res://` 前缀。这一变化影响了资源引用的逻辑,特别是在使用 C# 编写脚本时,必须确保资源路径与 `.pck` 文件中定义的路径完全一致,否则将导致资源加载失败。 当使用 C# 创建 `.pck` 文件时,开发者需要明确指定资源的相对路径。例如,若资源位于项目目录下的 `assets/textures` 文件夹中,则打时应使用 `assets/textures/texture.png` 作为路径,而不是 `res://assets/textures/texture.png`。这种路径结构在加载 `.pck` 文件时必须保持一致,以确保资源可以被正确识别和引用。 在 C# 脚本中加载 `.pck` 文件时,可以使用以下代码: ```csharp ResourceLoader.Load("assets/textures/texture.png"); ``` 该代码将尝试从 `.pck` 文件中加载指定路径的资源。如果路径与打时定义的路径不一致,则资源将无法加载[^1]。 此外,在使用 C# 创建 `.pck` 文件时,开发者还需注意资源依赖关系的管理。由于 `.pck` 文件中的资源路径不再含 `res://`,因此所有资源引用必须基于项目根目录的相对路径。这种设计化了资源打流程,但也要求开发者在资源引用时更加精确,以避免因路径错误导致的资源丢失或加载失败。 为了适应这一变化,建议开发者在打 `.pck` 文件时使用统一的路径结构,并在脚本中保持一致的引用方式。例如,可以使用项目根目录下的 `assets` 文件夹作为资源存储的主目录,并在打时使用 `assets/` 作为资源路径的前缀。这种方式不仅化了资源管理,还能确保 `.pck` 文件中的资源路径与脚本中的引用路径保持一致。 ### 示例代码 以下是一个使用 C# 创建 `.pck` 文件的示例: ```csharp using Godot; using System.IO; public class PckPacker : Node { public void PackResources(string pckPath, string sourceDir) { var pck = new FileAccess(); Error err = pck.Open(pckPath, FileAccess.ModeFlags.Write); if (err != Error.Ok) { GD.Print("无法创建 .pck 文件"); return; } var files = Directory.GetFiles(sourceDir, "*", SearchOption.AllDirectories); foreach (var file in files) { string relativePath = file.Substring(sourceDir.Length + 1); pck.StoreString(relativePath); byte[] data = File.ReadAllBytes(file); pck.StoreBuffer(data); } pck.Close(); } } ``` 该代码将指定目录下的所有文件打为 `.pck` 文件,并使用相对路径存储资源。在加载 `.pck` 文件时,开发者需要确保资源路径与打时使用的相对路径一致。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForBigData

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值