【Godotで作ろう脱衣ブロック崩し】第3回:ボールを作ろう
このたびは、Godot Engineチュートリアル記事「Godotで作ろう脱衣ブロック崩し」にアクセスいただき、ありがとうございます。
目次はこちらです。
今回は、ボールを作りましょう。
3:ボールの作成
3.1:ボールシーンのノード構成
プロジェクトを開いたら、新規シーンを作成して、ルートノードとして"CharacterBody2D"を設定しましょう。
その子ノードとして、CollisionShape2DとSprite2D、2つのノードを追加します。
ここまで終わったら、シーンのノード構造はこうなるはずです。
3.2:各ノードの設定
CollisionShape2DノードのインスペクターからShapeの項目を"新規 CircleShape2D"に設定します。
作成されたCircleShape2Dを選択すると、設定項目がいくつか出てくるので、その中の"Radius"を8pxに設定してください。
次に、Sprite2DノードのインスペクターからTextureを設定し、ballフォルダの中のball.svgを指定してください。
それで、CharacterBody2Dノードのインスペクターからコリジョンレイヤーとマスクを
下図のように、レイヤーは1番のみ、マスクは2,3,4番の3つのみをオンにしてください。
CharacterBody2Dノードの名前を"ball"に書き替えて、このシーンを"ball.tscn"という名前でballフォルダの中に保存してください。
3.3:スクリプトのアタッチおよび新規作成
ballノードにスクリプトをアタッチします。
ballノードを選択した状態で、シーンのノードツリーの右上くらいにある書類のようなアイコンをクリックしてください。
すると、このような画面が開きます。
"テンプレート"の項目を"Node: Default"に変更して、"作成"ボタンを押します。
3.4:スクリプトの入力・編集
スクリプトを新規にアタッチすると、画面がテキストエディタのようなものに切り替わり、スクリプトを編集できます。
これを、以下のように書き換え・追記します。
ちなみに、#記号が頭にある行はコメントであり、プログラムの動作に影響を与えません。
# このクラスはCharacterBody2Dを継承している
extends CharacterBody2D
# このクラスはBallという名前
class_name Ball
# 必要なプロパティの定義
# initial_velocity:ボールの移動速度の初期値
var initial_velocity = Vector2(250.0, -250.0)
# hold:この値がtrueのとき、ボールは移動しない
var hold = true
# このメソッドはほぼ毎フレーム呼び出される
# ここに物理演算に関する処理を書く
func _physics_process(delta):
# holdがtrueならば、速度を0にする
if hold:
velocity = Vector2.ZERO
# なおかつマウスの左ボタンが押されていたらholdをfalseにして速度を初期化する
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
hold = false
velocity = initial_velocity
# 移動して当たり判定をチェック
var collision_info = move_and_collide(velocity * delta)
# 何かに当たったら跳ね返る
if collision_info and not hold:
velocity = velocity.bounce(collision_info.get_normal())
# 当たった相手が何者なのかを調べる
var collider = collision_info.get_collider()
# 当たった相手がhitメソッドを持っていた場合、それを呼び出す
if collider.has_method("hit"):
collider.call_deferred("hit")
スクリプトをこのように記述して、ball.gdを保存します。
お疲れ様です。今回の記事で解説する作業はここまでです。
おわりに
次回の更新は、早くて7月中旬、遅くても7月末を予定しています。
お楽しみにお待ちください。