1.raycaster最好不要从x轴上向下射,否则如果你的野猪站在地面上,godot会认为ray是从地板边缘射到地板内部,没有发生碰撞
2.spirite2D可放在Node2d下,这样你在sprite2D中标记一些碰撞体后
再设置Node2D的scale。X即可完美翻转碰撞体,否则设置sprite2D的flip_h之后这些标记的碰撞体不会跟着翻转
3.CharacterBody2D 的collisionLayer是物体所处的碰撞层,collisionMask是物体可以与那些层碰撞。右击三个点可为碰撞层命名,方便修改 raycaster的layer mask同理
4.@onready变量的初始化在子场景中晚于@export变量
5.raycaster在父Node翻转后不会更新,只需force_raycaster_update()一下即可
6.获取enum的数值的对应名称
enum State{
A
}
State.keys()[A] #"A"
7.timer 自动会从time值往下减,start()后time_left值变time(oneshot时)
8.@export变量可在动画中更改,实现类似动画播放百分之多少内按键可连击的效果
9.项目-项目设置-输入映射添加动作后按加号绑定按键,之后可用is_action_XXX获取
10.攻击-受攻 较为通用,可新建脚本,继承自area2D,提高代码复用性
area2D 有onarea——entered信号,可在——init中绑定
area2D要在它下面添加collisionshape才可检测碰撞
可以让hitbox主动去找(主动碰撞),它可以不待在任何层上,
而hurtbox待在层上,不主动找
例如:
让player的hurtbox待在playerhurtbox这一层(layer设为这个值),mask不设
让enemy的hitbox不呆在任何层(layer不设),mask设为playerhurtbox。
这样,enemy攻击且只攻击player
(注:此处的playerhurtbox为命名过的物理层)
11.多段攻击时会有碰撞区域不同的情况,可以多设几个collisionshape2D,然后在关键帧中决定是否启用
12.双击信号点击连接(在inspector中)