Godot学习日志第一期--简单熟悉引擎

Mizuhara37 Lv3

终于开始发表技术性的文章啦,这里大多是自用的笔记加上自己的理解(其实是温习加深印象),希望对你我都有帮助
我目前看的教程是B站上的《从零开始的<冥日芳粥:肿么滴>》,这个教程教的有点浅,gdscript具体语法教的挺少,速度也快,看这个就当作对引擎的熟悉了。本日志是每两集教程后进行一次总结。

说实话Godot总给我一直scratch的感觉,当然其实也完全不像(个人看法),毕竟本来这两者定位完全不同。Godot的各种树形节点我认为是一大亮点,真的太清晰了,并且也提供了实例节点能直接拿来使用,不赖~。还有像场景是单独的一个文件,角色又是单独的一个文件,把角色运用到场景中就直接实例化子节点,不赖不赖。


推荐文件结构

还有什么头什么命名,总之每个单词首字母大写GroundTileMapLayer这样,还有常量

瓦片地图

新建场景,先在场景文件中创建子节点TileMapLayer。TileMapLayer可以创建好几个,都能同时组成地图结构。教程是分为GroundTileMapLayer和OverlayTileMapLayer分别对应地砖墙壁 和 贴近地板显示
瓦片地图最好是在xy轴原点开始绘制,对应的相机也要移动。
动态瓦片和普通瓦片分开设置,在TileSet点+创建图集。注意材质的切割。动态瓦片询问是否自动创建图块,要点否,选中选中第一列后,在选择面板中点每一行第一列的图块,修改速度并选择帧播放模式。设置好后重新拖拽选中第一列瓦片,点击四次frames中的添加元素按钮。

玩家场景搭建

新建场景(超级组装)属性为CharacterBody2D(专门用于人物移动,具有物理规则)
碰撞体积(新建CollisionShape2D)
这部分有点懒得写了,直接放图片吧



将玩家放入游戏场景需要实例化子场景

`
extends CharacterBody2D

const NORMAL_ANIMATION_PREFIX :=&”normal” #normal通用前缀名 习惯大写写常量 := 自动定义变量
@export var move_speed: float = 120.0 #像素/s
@onready var body_sprite: AnimatedSprite2D = $BodySprite #引用
var facing_suffix: StringName = &”right” #朝向

#内置逻辑入口,实例化后开始调用_ready

func _ready() -> void:
_update_animation()

func _physics_process(delta: float) -> void:
var move_input = Input.get_vector(“move_left”,”move_right”,”move_up”,”move_down”) #—–>输入映射不再一一叙述
#-x +x -y +y 二维向量 八向输入
velocity = move_input * move_speed
move_and_slide()

#输入并非二维零向量,则存在输入 重新根据当前按键计算使用朝向值
if move_input != Vector2.ZERO:
facing_suffix = _vector_to_facing_suffix(move_input)

_update_animation() #随时变化

func update_animation() -> void:
var animation_name := StringName(“%s
%s” % [NORMAL_ANIMATION_PREFIX, facing_suffix])
# 检测是否存在这个动画,利于查错
if not body_sprite.sprite_frames.has_animation(animation_name):
push_warning(“Missing player animation: %s” % animation_name) #我说这个字符串真像C的printf啊
return
#退出不执行
# 现在的动画和animation_name 不同就变化,变化用.play(name)
if body_sprite.animation != animation_name:
body_sprite.play(animation_name)

#后缀计算
func _vector_to_facing_suffix(direction: Vector2) -> StringName:
#这个用于手柄控制,也利于后续开发 分量大就优先使用哪个轴
if abs(direction.x) >= abs(direction.y):
return &”right” if direction.x >0.0 else &”left”

return &”down” if direction.y > 0.0 else &”up”
#这里return的逻辑有点怪第一次见到,
# return &”right” if direction.x >0.0 相当于 if direction.x>0.0: return &”right” else return &”left”
`

Node2D什么功能都没有,最最基础
Area2D飞出去命中然后消失,多用于子弹类似的物体
RigidBody2D完全交给物理引擎,箱子石头,被炸飞的杂物(拟真模拟需求)

Sprite2D渲染纹理

面向对象类,让它自己维护更新自身

脚本内部函数 _abc_def
暴露在外的公共函数 abc_def

godot 的 _process 相当于 unity 的 Update
godot 的 _physics_process 相当于 unity 的 FixedUpdate
_process 会受到显屏幕刷新率影响
_physics_process 会受到项目设置影响
(项目设置→常规→Physics→Common→Physics Fps)

  • 标题: Godot学习日志第一期--简单熟悉引擎
  • 作者: Mizuhara37
  • 创建于 : 2026-08-09 00:10:03
  • 更新于 : 2026-08-13 19:30:12
  • 链接: https://mizuhara37.github.io/2026/08/09/godot-learning1/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
Godot学习日志第一期--简单熟悉引擎