Player
Characterを継承してPlayerを作る
シーンの継承
Scene > New Inherited Scene > Character.tscn
継承元のテンプレートと同じNodeが作られる。
グレーアウトしてる部分もあるが、普通に編集できる。
スクリプトの継承
元のスクリプトを外す > 新規スクリプト > 継承元を参照 > Character.gd
継承順は、 KinematicBody2D -> Character -> Player
なので、KinematicBody2Dのプロパティ/メソッドも使える
また、extends "res://~~~" のような表記になる。
lerp()
clamp()
を使って、最高速を固定、摩擦による減衰を実装しつつ
プレイヤーの動作を決定
code: player.py
extends "res://Character/Character.gd"
var motion = Vector2() # 引数なし = (0, 0)
func _physics_process(delta):
update_movement()
move_and_slide(motion) # 二重継承すると、親の親のメソッドが保管されなくて辛い
func update_movement():
if Input.is_action_pressed("move_down") and not Input.is_action_pressed("move_up"):
motion.y += SPEED
elif Input.is_action_pressed("move_up") and not Input.is_action_pressed("move_down"):
motion.y -= SPEED
else:
motion.y = lerp(motion.y, 0, FRICTION ) # lerp(from, to, step) : step は 0 ~ 1. 現在値から目的値まで、stepの割合分だけ変化
if Input.is_action_pressed("move_right") and not Input.is_action_pressed("move_left"):
motion.x += SPEED
elif Input.is_action_pressed("move_left") and not Input.is_action_pressed("move_right"):
motion.x -= SPEED
else:
motion.x = lerp(motion.x, 0, FRICTION )
motion.x = clamp(motion.x, -MAX_SPEED, MAX_SPEED)
motion.y = clamp(motion.y, -MAX_SPEED, MAX_SPEED)
Node2D.look_at( vec2 )
Node2Dのtransformに関するメソッド。
Vector2Dで表されるグローバル座標の方向を向く
get_grobal_mouse_position( )
めっちゃ簡単
画面のマウス位置のグローバル座標をVector2Dで返す