第四部分:TileMapLayer、TileSet、地图碰撞、层级和 Y-sort

2026-05-19
444615 分钟
...

这一部分开始进入 RPG 地图核心了。

你现在要先建立一个大脑模型:

TileSet = 图块资源库
TileMapLayer = 用图块画出来的一层地图
TileMap 编辑器 = 画地图的画笔工具
Collision = 地图上哪些地方不能走
Y-sort = 谁在前面谁在后面的排序规则

在 Godot 4 现在的文档里,TileMapLayer 是用于 2D tile 地图的节点,它使用 TileSet 作为图块来源;旧的 TileMap 节点已经被标记为 deprecated,官方建议改用多个 TileMapLayer 节点来实现多层地图。(Godot Engine documentation)

1. TileSet 是什么

TileSet 可以理解成“地图素材库”。

比如你有一张图:

grass.png

里面包含:

草地
泥土地
石路
水边
墙壁


栅栏
屋顶

这些小格子被切出来之后,就变成一个个 tile。

TileSet 负责保存这些 tile 的信息:

这个图块显示哪一块图片
这个图块有没有碰撞
这个图块属于什么地形
这个图块有没有导航区域
这个图块有没有遮挡光照
这个图块有没有自定义数据

所以,TileSet 不是地图本身。

它更像是:

地图画笔库

前端类比:

TileSetUI 组件库 / icon sprite 图集 / CSS class 集合

你有了组件库,不代表页面已经搭好了。

你有了 TileSet,也不代表地图已经画好了。

2. TileMapLayer 是什么

TileMapLayer 才是你真正画地图的地方。

一个 TileMapLayer 代表一层地图。

比如:

GroundLayer草地泥土石路
WaterLayer水面河流
ObjectLayer石头栅栏
DecorationLayer草丛小装饰
RoofLayer屋顶树冠前景遮挡

每一层都可以使用同一个 TileSet

官方文档也建议在合适的时候使用多个 TileMapLayer,这样可以区分前景、背景,并允许多个图块在同一个格子位置重叠。(Godot Engine documentation)

简单理解:

TileSet 是素材
TileMapLayer 是用素材画出来的一层地图

3. 为什么要分多层

不要把所有东西都画在一个 TileMapLayer 上。

这会让你后面非常痛苦。

比如你把草地、树、屋顶、墙壁、装饰全部画在一层:

WorldLayer

一开始没问题。

但后面你会遇到:

角色应该走在草地上
角色应该被树干挡住
角色应该能走到树冠后面
角色应该被屋顶遮住
水面可能要动画
地面不应该挡住角色
墙壁应该挡住角色
装饰有些能穿过有些不能穿过

如果都在一层,管理起来会像一团毛线球,越扯越乱。

推荐结构:

World Node2D
├── Ground TileMapLayer
├── Path TileMapLayer
├── Water TileMapLayer
├── DecorationBack TileMapLayer
├── Objects TileMapLayer
├── Player CharacterBody2D
├── DecorationFront TileMapLayer
└── Roof TileMapLayer

更适合初学阶段的简化结构:

World Node2D
├── Ground TileMapLayer
├── Obstacles TileMapLayer
├── Player CharacterBody2D
└── Foreground TileMapLayer

这就够你先做一张 RPG 小地图了。

4. 地图层级推荐

对于你现在的 RPG,我建议先这样拆:

Main Node2D
└── World Node2D
    ├── Ground TileMapLayer
    ├── Objects TileMapLayer
    ├── Player CharacterBody2D
    └── Foreground TileMapLayer

每层职责:

Ground地面草地泥土石路一般没有碰撞
Objects树干石头栅栏一般有碰撞
Player玩家
Foreground树冠屋顶前景遮挡一般没有碰撞只负责盖住角色

这样你就能实现:

角色站在地面上
角色被墙挡住
角色走到树后时树冠盖住角色

这是 RPG 地图最基础但很关键的结构。

5. TileMapLayer 和 Player 的关系

玩家不是画在 TileMapLayer 里的。

玩家是一个独立节点:

Player CharacterBody2D

地图是地图,玩家是玩家。

结构一般是:

World
├── Ground
├── Objects
├── Player
└── Foreground

千万不要想着“把玩家也当作 tile 画到地图里”。

玩家需要:

输入控制
动画切换
碰撞移动
血量状态
交互检测
攻击范围
相机跟随

这些都不是普通 tile 该干的事。

tile 适合做静态地图。

角色、怪物、NPC、宝箱、门,后面大多应该做成独立 Scene。

6. TileSet 里的碰撞是什么

地图碰撞不是直接在 TileMapLayer 上画一个大碰撞。

更常见的做法是:在 TileSet 里给某些 tile 设置碰撞形状。

比如:

墙壁 tile有碰撞
石头 tile有碰撞
树干 tile有碰撞
草地 tile没有碰撞
 tile没有碰撞
水面 tile看设计可以有也可以没有

官方文档说明,如果 TileSet 里没有碰撞检测,玩家和其他对象就可以直接穿过地板或墙;要给每个 tile 定义碰撞、导航或遮挡形状,需要先在 TileSet 资源里创建对应的 physics、navigation 或 occlusion layer。(Godot Engine documentation)

你可以这样理解:

TileSet 里定义这个图块能不能撞
TileMapLayer 里放置这个图块出现在哪里

只要你在地图上画了一个带碰撞的墙 tile,角色移动时就会被挡住。

7. 怎么给 TileSet 加碰撞

大致流程是:

选中 TileMapLayer

Inspector 里找到 TileSet

展开 TileSet 资源

找到 Physics Layers

Add Element

打开 TileSet 编辑器

选择某个 tile

给它画 Collision Polygon

如果是方块类图块,可以直接用矩形碰撞。

Godot 的 TileSet 编辑器里,创建 physics layer 后,可以进入 tile 的 Physics Layer 区域编辑碰撞形状;文档也提到可以在 TileSet 编辑器聚焦时按 F 快速创建矩形碰撞形状。(Godot Engine documentation)

比如:

墙壁 tile整个 16x16 都碰撞
石头 tile底部一小块碰撞
 tile只给树干底部碰撞
草地 tile不设置碰撞

这里很重要:不是所有看起来“很大”的东西都应该整张图碰撞。

比如树:

树冠很大但角色应该能走到树冠后面
树干才是真正挡路的部分

所以树的碰撞应该放在树干/底部区域,而不是整棵树。

8. 玩家为什么能被墙挡住

玩家要被墙挡住,需要两边都配置好。

玩家这边:

Player CharacterBody2D
Player 下面有 CollisionShape2D
Player 移动用 velocity + move_and_slide()

地图这边:

墙壁 tile TileSet 里有 collision
这个 tile 被画在 Obstacles TileMapLayer
Obstacles TileMapLayer collision_enabled 是开启的

然后玩家移动时:

velocity = direction * speed
move_and_slide()

move_and_slide() 会处理 CharacterBody2D 和碰撞体之间的移动结果。

如果角色没被挡住,通常检查这几个地方:

Player 有没有 CollisionShape2D
CollisionShape2D 有没有设置 Shape
TileSet 里墙壁 tile 有没有画碰撞
TileMapLayer collision_enabled 是否开启
Player 是不是用 move_and_slide() 移动
是不是直接 position += xxx 导致绕过碰撞

这个排查顺序非常实用。

9. 地面一般不要加碰撞

草地、泥土、石路这种地面,一般不加碰撞。

也就是说:

Ground TileMapLayer通常没有碰撞
Objects TileMapLayer通常有碰撞
Foreground TileMapLayer通常没有碰撞

地面只负责显示。

障碍物才负责阻挡。

比如:

草地能走
能走
可以穿过除非你想挡路
小草丛可以穿过
石头不能穿过
不能穿过
树干不能穿过
通常不能穿过除非做涉水

你以后做地图时,不要上来就给所有 tile 都加碰撞。

那样角色会像进了看不见的监狱,寸步难行,游戏会很“坐牢”。

10. TileMapLayer 的显示层级

默认情况下,Scene 树里越靠下的节点,越后绘制,也就是越容易盖在上面。

比如:

World
├── Ground
├── Objects
├── Player
└── Foreground

大致显示效果是:

Ground 在最底
Objects Ground 上面
Player Objects 上面
Foreground Player 上面

所以 Foreground 可以盖住玩家。

但是如果你要实现“玩家在树前面时盖住树,玩家在树后面时被树盖住”,只靠节点顺序不够。

这就需要 Y-sort。

11. Y-sort 是什么

Y-sort 就是按 Y 坐标排序绘制顺序。

在 2D 俯视角或 3/4 视角游戏里,越靠屏幕下方的东西,通常越应该显示在前面;越靠屏幕上方的东西,通常越应该显示在后面。Godot 4 中可以在 CanvasItem 类型节点上启用 Y Sort Enabled,启用后子节点会按 Y 坐标参与排序。(kidscancode.org)

比如:

角色在树的上方
角色应该被树挡住

角色在树的下方
角色应该挡住树

这就是 RPG 里很常见的“前后遮挡”。

12. Y-sort 最容易踩的坑

很多人开了 Y-sort 还是没效果,是因为开错地方了。

Y-sort 要让“需要互相排序的节点”在同一个启用 Y-sort 的父节点下面。

比如:

World Node2D  开启 Y Sort Enabled
├── Objects TileMapLayer
├── Player CharacterBody2D
└── NPC CharacterBody2D

这样 ObjectsPlayerNPC 才可能互相按 Y 坐标排序。

如果结构是:

World
├── Tilemaps
│   └── Objects
└── Characters
    └── Player

你只给 Tilemaps 开 Y-sort,Player 不在它下面,那它们就不是同一组排序对象,效果就可能不对。

简单记:

要互相比较前后关系的东西
必须放在同一个启用 Y-sort 的父节点下面

13. 为什么树的排序经常怪怪的

因为 Y-sort 排序看的是节点的 Y 坐标点。

很多素材的原点在图片中心。

比如一棵树:

图片高度 64px
原点在中心

但你真正希望用来排序的点是“树根”。

也就是:

树的底部

如果原点在树中心,角色走到树附近时,排序就可能提前或滞后,看起来怪怪的。

常见解决方式:

让树/角色的 position 对齐脚底
 Sprite2D 向上偏移
碰撞体放在脚底附近
Y-sort 使用脚底位置作为排序基准

也就是说,节点位置不要放在图片中心,而是放在“它站在地面上的那个点”。

这点特别重要。

14. Player 的图片和碰撞应该怎么摆

推荐结构:

Player CharacterBody2D
├── AnimatedSprite2D
└── CollisionShape2D

Player 节点的位置代表脚底中心。

然后:

AnimatedSprite2D 往上偏移
CollisionShape2D 放在脚底附近

比如角色图片是 32x48。

可以这样想:

Player 节点原点脚底中心
AnimatedSprite2Dposition.y = -24 左右
CollisionShape2Dposition.y = -6 左右

这样好处是:

Y-sort 用脚底判断前后
碰撞也主要发生在脚底
角色靠近墙和树会更自然

不要让碰撞体包住整个角色图片。

否则角色头发碰到墙就走不动了,体验很奇怪。

15. 树应该怎么做

树有两种做法。

第一种:树作为 tile。

Objects TileMapLayer 里画树干/树体
Foreground TileMapLayer 里画树冠

这种适合大量铺地图,简单直接。

第二种:树作为独立 Scene。

Tree StaticBody2D
├── Sprite2D
└── CollisionShape2D

这种适合需要交互的树,比如:

砍树
掉木材
季节变化
被风吹动
被火烧毁

对于你现在第一阶段,建议先用 tile 做树。

别一开始就把所有东西都做成独立 Scene,不然项目会膨胀得太快。

16. 什么时候用 tile,什么时候用独立 Scene

这个判断很重要。

适合用 tile 的东西:

草地
泥土
石路
水边
墙壁
普通树
普通石头
普通栅栏
普通装饰

适合用独立 Scene 的东西:

玩家
NPC
怪物
宝箱

传送点
可采集植物
可破坏木桶
任务物品
会动的平台
可以互动的机关

一句话:

只是摆在那里显示或挡路tile
需要逻辑状态交互动画变化Scene

前端类比:

tile静态背景元素
Scene有状态组件

17. Foreground 前景层是什么

Foreground 是“盖在角色上方”的那一层。

比如:

树冠
屋顶
门框上半部分
洞口阴影
高草顶部
桥的栏杆
室内吊灯前景

它的目的不是挡路,而是制造空间感。

比如:

角色走到树后面
树冠盖住角色上半身

这会让地图立刻有 2.5D 的感觉。

虽然你的游戏本质还是 2D,但视觉上会有前后空间。

18. 地图层级的一个实用版本

现在你可以按这个来搭第一张地图:

Main Node2D
├── World Node2D
│   ├── Ground TileMapLayer
│   ├── Water TileMapLayer
│   ├── BackDecorations TileMapLayer
│   ├── YSortObjects Node2D
│   │   ├── Objects TileMapLayer
│   │   ├── Player CharacterBody2D
│   │   └── NPCs Node2D
│   └── Foreground TileMapLayer
└── UI CanvasLayer

解释一下:

Ground最底层地面
Water水面可放在地面上
BackDecorations不会遮挡角色的小装饰
YSortObjects需要和角色排序的对象
Objects树干石头墙等
Player玩家
NPCsNPC
Foreground永远盖在最前面的树冠屋顶等
UI界面不参与世界排序

初学阶段还可以更简单:

Main
├── Ground
├── Objects
├── Player
├── Foreground
└── UI

先别架构洁癖,能走、能撞、能遮挡,就是胜利。

19. TileMapLayer 的 Y Sort Origin

TileMapLayer 有一个很关键的属性:

Y Sort Origin

它表示这个 tile 用哪个 Y 偏移点参与 Y-sort。

官方文档说明,Y Sort Origin 是每个 tile 用于 Y-sort 的垂直偏移,只有在 CanvasItem 的 Y Sort Enabled 开启时才有效。(Godot Engine documentation)

比如树 tile 是 32x64。

如果默认按 tile 中心排序,可能不对。

你希望它按树底部排序,就可以调整 Y Sort Origin。

简单理解:

Y Sort Origin = 这个 tile脚底在哪里

对于树、房子、石头这类有高度的东西,这个属性很重要。

20. Z Index 和 Y-sort 的区别

这俩也容易混。

Z Index 是固定层级。

比如:

UI 永远在最上面
Foreground 永远盖住玩家
Ground 永远在最底下

Y-sort 是动态层级。

比如:

玩家在树上方树盖住玩家
玩家在树下方玩家盖住树

可以这样记:

Z Index固定谁压谁
Y-sort根据 Y 坐标动态决定谁压谁

实际项目里,它们会一起用。

比如:

GroundZ Index = -10
YSortObjectsZ Index = 0并开启 Y-sort
ForegroundZ Index = 10
UICanvasLayer单独在界面层

21. CanvasLayer 为什么放 UI

UI 不应该放在 World 里和地图一起滚动。

比如血条、背包按钮、任务文本,它们应该固定在屏幕上。

所以 UI 一般放在:

CanvasLayer

结构:

Main
├── World
│   ├── Ground
│   ├── Player
│   └── Foreground
└── UI CanvasLayer
    ├── HPBar
    ├── BagButton
    └── DialoguePanel

这样 Camera2D 跟随玩家移动时,地图会动,UI 不会跟着地图跑飞。

22. 地图碰撞的推荐设置

你的第一张 RPG 地图可以这样做:

Ground TileMapLayer
碰撞关闭或不设置碰撞

Objects TileMapLayer
碰撞开启
TileSet 中给墙树干石头栅栏设置碰撞

Foreground TileMapLayer
碰撞一般关闭
只负责显示遮挡

角色:

Player CharacterBody2D
CollisionShape2D小一点放脚底
移动move_and_slide()

这个组合就能实现:

角色可以在草地上走
角色不能穿墙
角色不能穿过树干
角色可以被树冠盖住

23. 自动地形 Terrain 是什么

Terrain 是 Godot 4 里用于自动连接地形的系统。

比如你画水边、泥土边缘、草地边缘时,如果每个拐角都手动选 tile,会很累。

Terrain 的作用是:

你画一片区域
Godot 自动根据周围邻居选择合适的边连接图块

官方文档里也说,Godot 4 的 terrains 是 Godot 3.x autotiling 的更强替代方案,可以根据 terrain 数据自动选择正确的 tile 变体。(Godot Engine documentation)

不过我建议你现在先别急着研究 Terrain。

你现在优先顺序应该是:

1. 能导入 TileSet
2. 能切 tile
3. 能画 Ground
4. 能画 Objects
5. 能设置碰撞
6. Player 能被挡住
7. 再研究 Terrain 自动连接

不然你会一下子被编辑器面板淹没。

Godot 的 TileSet 面板信息量很大,别硬刚,容易怀疑人生。它不是你笨,它是真有点绕。

24. Pattern 图案是什么

Pattern 可以理解成“一组 tile 的预设组合”。

比如你画了一个小房子:


窗户

屋顶

你不想每次都重新摆一遍,就可以保存成 Pattern。

以后直接把这一组刷到地图上。

适合:

小房子
树丛组合
石头堆
篝火营地
路口装饰
固定尺寸的地毯
室内家具组合

官方文档说明,Pattern 虽然在 TileMap 编辑器中编辑,但会存储在 TileSet 资源里,因此保存为外部 TileSet 后,可以在不同 TileMapLayer 中复用。(Godot Engine documentation)

你可以把它类比成:

Figma 组件
Prefab 小组件
一组选中的 tile 保存成模板

25. 第一张 RPG 地图建议怎么画

不要一上来画大地图。

先画一个小地图:

30 x 20

目标:

一片草地
一条小路
几棵树
几个石头
一个小房子轮廓
一个出生点

地图结构:

Ground整块草地
Path铺一条泥土路
Objects树干石头
Foreground树冠屋顶
Player放在出生点

第一张地图只验证三件事:

角色能走
角色不能穿过障碍
角色遮挡关系基本正确

不要第一张地图就追求漂亮。

先把技术链路跑通。

漂亮可以后面慢慢换素材、调色、加雾、加雨、加光照。

26. 最小可用场景结构

你可以现在就按这个搭:

Main Node2D
├── World Node2D
│   ├── Ground TileMapLayer
│   ├── Obstacles TileMapLayer
│   ├── Player CharacterBody2D
│   │   ├── AnimatedSprite2D
│   │   ├── CollisionShape2D
│   │   └── Camera2D
│   └── Foreground TileMapLayer
└── UI CanvasLayer

先别加 NPC。

先别加天气。

先别加任务。

先别加卡牌。

先让这个最小场景能跑起来。

这就是项目的地基。

27. 地图制作的正确顺序

建议你按这个顺序来:

1. 准备 tileset 图片
2. 导入 Godot
3. 创建 TileSet
4. 设置 tile 尺寸比如 16x16 32x32
5. 创建 Ground TileMapLayer
6. 用草地铺满一小块区域
7. 创建 Obstacles TileMapLayer
8. 放几块墙或树干
9. TileSet 里给障碍 tile 设置碰撞
10. 创建 Player
11. Player CollisionShape2D
12. move_and_slide() 移动
13. 测试是否会被障碍挡住
14. 添加 Foreground
15. 测试遮挡关系

这个顺序非常重要。

不要跳着来。

否则你会遇到一种很烦的情况:

不知道是 TileSet 错了
不知道是 TileMapLayer 错了
不知道是 Player 碰撞错了
不知道是移动代码错了
不知道是层级错了

一步一步验证,才不会迷路。

28. 常见错误 1:TileMapLayer 没有指定 TileSet

现象:

底部 TileMap 面板没有可用图块
不能画地图

原因:

TileMapLayer TileSet 为空

解决:

选中 TileMapLayer
Inspector
Tile Set
新建 TileSet 或加载已有 TileSet

29. 常见错误 2:tile 尺寸设置错了

现象:

图块切得乱七八糟
一个 tile 里包含半个草地半个石头
画出来错位

原因:

TileSet Tile Size 和素材实际格子不一致

比如素材是 16x16,但你设置成 32x32,就会切错。

你要确认:

素材每格到底是 16x16、24x24、32x32 还是别的

像素风 RPG 常见:

16x16
32x32

30. 常见错误 3:角色穿墙

排查:

Player 是不是 CharacterBody2D
Player 有没有 CollisionShape2D
CollisionShape2D 有没有 Shape
移动是不是用 move_and_slide()
障碍 tile 有没有 collision polygon
TileMapLayer collision_enabled 有没有开
Player Collision Layer / Mask 有没有和地图匹配

初学时先用默认 Layer/Mask,不要上来就改一堆碰撞层。

等你理解了再细分:

World
Player
Enemy
Hitbox
Interactable

31. 常见错误 4:角色被树冠挡得不对

原因通常是:

树冠放错层
Y-sort 没开
Y-sort 开在错误父节点
树的排序原点不对
Player 的原点不在脚底
Sprite 没有向上偏移

最简单解决:

树干放 Obstacles
树冠放 Foreground
Foreground 永远盖住 Player

这是简单粗暴但稳定的做法。

等后面你想做更自然的遮挡,再研究 Y-sort。

32. 常见错误 5:整个角色碰撞太大

现象:

角色还没碰到墙看起来就被挡住
角色靠近树很别扭
角色头顶碰到东西也走不动

原因:

CollisionShape2D 包住了整张角色图

解决:

只让脚底附近有碰撞

比如:

角色图:32x48
碰撞:16x10放在脚底附近

这对俯视角 RPG 特别关键。

33. 这一部分最重要的记忆点

TileSet 是图块资源库
TileMapLayer 是地图的一层
Godot 4 新项目建议用多个 TileMapLayer
Ground 通常没碰撞
Objects 通常有碰撞
Foreground 通常只负责遮挡
碰撞是在 TileSet 里给 tile 设置的
Player 是独立 CharacterBody2D不是 tile
Y-sort Y 坐标决定前后遮挡
Y-sort 要开在共同父节点上
角色和树的原点最好放在脚底

34. 你现在的小练习

做一个最小地图:

Main
├── Ground TileMapLayer
├── Obstacles TileMapLayer
├── Player CharacterBody2D
└── Foreground TileMapLayer

实现目标:

Ground 铺草地
Obstacles 放几块墙或树干
给障碍 tile 设置碰撞
Player 能移动
Player 不能穿过障碍
Foreground 放一个树冠或屋顶能盖住 Player

这一步完成之后,你就真的有“RPG 地图雏形”了。

第五部分预告:Camera2D、地图边界、玩家出生点、场景组织

下一部分适合继续讲:

Camera2D 怎么跟随玩家
为什么相机不能无限看到地图外
地图边界怎么限制
Marker2D 怎么当玩家出生点
MainWorldPlayerUI 应该怎么组织
如何为后面切换地图做准备

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
godot2026-07-27
Godot 4 常用 UI 节点详解
Godot 4 常用 UI 节点详解 在 Godot 4 中,UI 系统基于 Control(控件) 节点构建。所有 UI 节点都继承自 Control,形成一棵完整的 UI 树。与游戏引擎中常见的"Canvas + DOM"模式不同,Godot 的 UI 系统是声明式的——你在场景中搭好节点树,引擎自动完成布局计算。 一、布局系统:Container 家族 Container 是 Godot UI 的 骨架 。它决定了子节点的大小和位...
学习
godot2026-07-09
Godot 4 自动地形系统(AutoTileSet / Terrains)完全指南
前言 在 2D 游戏开发中,地形瓦片(tile)的拼接是一个绕不开的问题。想象一下:你有一片草地、一条河流、一段平台——如果每一块边缘、角落、过渡区域都要手动选择对应的瓦片图,工作量将是巨大的。 自动地形系统 就是为了解决这个问题而生的。 一、什么是自动地形(Autotiling)? 自动地形的核心思想很简单: 你只管画,引擎帮你选对瓦片 。 当你在 TileMap 上绘制地形时,引擎会自动检测每个瓦片的上下左右邻居,然后根据预设的规则...
学习
godot2026-06-25
Godot 中 zindex 和 ysort 的区别总结
在 Godot 2D 游戏开发中,角色、树木、怪物、地面、技能特效、UI 都需要正确的显示顺序。比如角色走到树前面时,角色应该挡住树;角色走到树后面时,树又应该挡住角色。 这种显示顺序主要和两个概念有关: 和 。 其中 用来手动控制图层顺序, 用来根据物体的 Y 坐标自动排序。 一句话理解 是手动分层。 是根据 Y 坐标自动排序。 简单来说: | 属性 | 作用 | 适合场景 | | | | | | | 数值越大,显示越靠前 | 地面、...
学习
godot2026-06-11
Tileset 资源图的标准和规范
一、什么是 Tileset 资源图 Tileset,中文通常叫“图块资源图”或“瓦片图”,是 2D 游戏中非常常见的一种地图资源组织方式。 简单来说,Tileset 就是把很多小图块按照固定尺寸排列在一张图片里。游戏引擎会按照固定的格子大小去切割这张图片,然后把每个小格子当成一个独立的地图块使用。 比如一个 32×32 像素的 Tileset 中,每一个 tile 都是 32×32 像素。地图编辑器或游戏引擎会按照 32×32 的网格,...
学习
godot2026-05-29
用户角色精灵图制作角色的完整流程
在 2D RPG 游戏里,角色通常不是用一张单独图片完成的,而是用一张“角色精灵图”来做。 所谓角色精灵图,通常是一张包含多个动作帧的大图。比如角色向下走有 4 帧,向左走有 4 帧,向右走有 4 帧,向上走有 4 帧。Godot 会根据这些帧不断切换图片,看起来角色就动起来了。 这篇文章主要介绍:拿到一张角色精灵图之后,如何在 Godot 中把它做成一个可以正常移动、播放动画、和地图产生遮挡关系的角色。 一、先理解角色精灵图是什么 角...
学习
godot2026-05-26
Godot 节点系统详细介绍
Godot 里最核心的东西不是“类”,也不是“组件”,而是 节点 Node 。 你可以把 Godot 的节点理解成: 在前端里,一个页面是由很多 DOM 元素组成的; 在 Godot 里,一个游戏场景是由很多 Node 节点组成的。 比如一个玩家角色,可能不是一个单独对象,而是这样的结构: 这里的 是根节点,下面挂着显示图片、播放动画、碰撞检测、摄像机、音效等子节点。 Godot 官方文档也把节点和场景放在一起讲:多个节点组成树状结构后...
学习

评论

请登录后发表评论

去登录
加载评论中...