is_on_ceiling()
デフォルトだと、JumpしてStaticBody2D に衝突しても上方向の速度が0にならない
KinematicBody2Dは物理エンジンの影響を受けないので、
is_on_floor() と同様に、天井に達したときの挙動を手動で記述する必要がある。
code: python
const UP = Vector2(0, -1.0) # 下方向が正
var motion = Vector2(0, 0)
func _physics_process(delta):
apply_gravity()
move()
jump()
animate()
move_and_slide(motion, UP)
func apply_gravity():
if is_on_floor():
motion.y = 0
if is_on_ceiling():
motion.y = 1
else:
motion.y += GRAVITY
move_and_slide/colide() の第2引数のfloor_normalについて
実は、このfloor_normal(デフォルトは(0, 0)) は、
floor と ceiling の方向を決めるのに使われている。
デフォルト状態(0, 0) だと、床と天井という概念がなくなり、全てがwallとして扱われる。
(Hotline Miami のようなトップビューのゲームを作るのに便利かも)
このベクトルの方向によって、
is_on_floor()
is_on_ceiling()
の挙動が入れ替わる。