地图编辑部分教程总结

学习视频:https://player.bilibili.com/player.html?bvid=BV1NC4y1q7bZ&autoplay=0

资源下载:https://cupnooble.itch.io/sprout-lands-asset-pack

https://www.patreon.com/posts/scripts-godot-4-68719570

原视频地址:https://www.youtube.com/watch?v=Luf2Kr5s3BM

地图编辑部分教程总结

这部分的核心是使用 TileMap 节点和 TileSet 资源来构建一个可交互、有层次感且带有碰撞的游戏世界。

1. 创建并配置 TileMap
  • 添加节点 :在 GameLevel 场景中,右键添加一个 TileMap 子节点。
  • 创建 TileSet :在 TileMap 的检查器中,为其创建一个新的 TileSet 资源。这会在底部打开一个专门的 TileSet 编辑标签页。
2. 导入素材并自动切分瓦片
  • 拖入素材 :直接将 Sprout Lands 素材包中的各种图集(如草地 grass.png、山丘 hills.png、泥土 dirt.png、水 water.png、木屋 wooden_house.png、栅栏 fences.png 等)拖拽到 TileSet 编辑器中。
  • 自动切分:Godot 4 会弹出提示询问是否自动创建瓦片,选择"是"。引擎会智能地将整张图集切分成单个可用的瓦片,极大地简化了准备工作。
3. 使用多层(Layers)构建深度
  • 问题:有些瓦片(如山丘、房屋)带有透明区域,如果直接画在基础地面上,会显得很奇怪。
  • 解决方案 :为 TileMap 创建多个图层。
    • 基础地面层 (base ground):用于绘制不透明的基础地形,如草地。
    • 顶层地面层 (top ground):用于绘制带有透明区域的装饰性瓦片,如山丘、路径等,它们会覆盖在基础层之上。
    • 高处墙壁层 (high ground walls):用于绘制更高层级的物体,如房屋墙壁、悬崖壁,以营造高低错落的视觉效果。
  • Z-index 控制 :通过为不同图层设置不同的 Z Index(例如,将地面层设为 -5),确保玩家角色(默认 Z-index 为 0)始终能正确地在地面之上、墙壁之下或之上进行渲染。
4. 为瓦片添加碰撞(Collision)
  • 目标:让玩家无法穿过墙壁、悬崖等障碍物。
  • 步骤
    1. 创建物理层 :在 TileSet 的检查器中,展开 Physics Layers 并添加一个元素。这会创建一个默认的碰撞层(Layer 1, Mask 1)。
    2. 进入绘制模式 :在 TileSet 编辑器中,点击 Paint Properties 按钮,并选择刚刚创建的物理层(Physics Layer 0)。
    3. 绘制碰撞体
      • 对于简单的方形障碍物(如完整的墙壁瓦片),直接点击瓦片,Godot 会自动生成一个覆盖整个瓦片的矩形碰撞体。
      • 对于复杂的瓦片(如带斜坡的悬崖边缘),需要手动编辑碰撞形状。点击瓦片后,可以在编辑器中使用工具(如 Manual AddEdit Points)精确地绘制出只覆盖不可通行区域的碰撞多边形,确保玩家可以站在悬崖顶部但不能从侧面穿过去。

可以使用网格来确保连接的瓦片边缘可以连续

5. 添加随机性和细节
  • 随机绘制 :在绘制基础草地时,可以先选中多种变体的草地块,然后使用 Random 工具进行绘制,或者使用 Fill Bucket(油漆桶)填充后,通过调整 Scattering(散射)值来控制变体出现的频率,从而快速创建出自然、不重复的地表。
6. 锁定 TileMap 防止误操作
  • GameLevel 场景中选中 TileMap 节点,在检查器中勾选 Locked(锁定)。这样可以防止在视图中不小心拖动整个地图,但依然可以正常绘制瓦片。
7. 添加跟随相机(Camera2D)
  • 添加相机 :在 GameLevel 中添加一个 Camera2D 节点,并将其设为当前激活的相机(勾选 Current)。
  • 实现跟随 :为了让相机跟随玩家,需要在玩家 (Player Cat) 节点下添加一个 RemoteTransform2D 子节点。将 RemoteTransform2DRemote Path 指向场景中的 Camera2D 节点。这样,相机就会自动跟随玩家的位置移动。

通过以上步骤,教程成功地将一个空旷的场景变成了一个具有视觉层次、物理碰撞和动态视角的、可供玩家探索的完整游戏世界。

相关推荐
weixin_409383123 天前
godot 击败敌人后增加经验的脚本
游戏引擎·godot
weixin_409383123 天前
godot 获取敌人位置自动发射子弹 旋转枪口
游戏引擎·godot
刘欣的博客3 天前
在TileMapLayer中显示一个瓦块(Godot学习)
godot
风酥糖5 天前
Godot游戏练习01-第24节-多人游戏暂停菜单,游戏优化
游戏·游戏引擎·godot
SCLchuck6 天前
Godot 4 2D 物理引擎位置初始化踩坑:add_child() 和 position 到底谁先? (错误位置触发物理事件)
游戏引擎·godot·游戏开发·物理引擎
小贺儿开发7 天前
Unity3D 拼图互动游戏
游戏·unity·人机交互·2d·拼图·互动
风酥糖8 天前
Godot游戏练习01-第23节-新增Player名称显示
游戏·游戏引擎·godot
YY_pdd9 天前
godot的项目打包为安卓程序
游戏引擎·godot
amadeusCristina9 天前
Godot ——Dialogue Manager插件
游戏引擎·godot
风酥糖9 天前
Godot游戏练习01-第22节-错误弹窗与连接错误处理
游戏·游戏引擎·godot