次は当たり判定処理をします。
当たり判定処理で、ぶつかったキャラクターごとに処理内容を変えるためにはコリジョンマスクを用いる方法とグローバルグループを用いる方法があります。
通常はこの両方を組み合わせて使用します。

(1) 当たり判定処理

上の方にある「スクリプト」をクリックしてスクリプト画面を開く

「taro.gd」を選ぶ

taro.gd の下の方に以下のソースコードを追加する

ソース 1: TAROが他のキャラクターにぶつかったら"ITAI"と表示
# 他のキャラクターに衝突したときに呼び出される関数
# 引数 area に衝突したキャラクターが入る
func _on_area_entered(area: Area2D) -> void:
	$"/root/MyWorld/CanvasLayer/Label".text = "ITAI"
	$"/root/MyWorld/CanvasLayer/Label".show()


(もしMyWorldシーンを開いてなければ)メイン画面の上にある「my_world」タブをクリックして MyWorld シーンに切り替える

右上の「現在のシーンを実行(F6)」を押すかF6キーでゲームを実行し、TAROがHANAKOやAPPLEに当たるとラベルに「ITAI」と表示されることを確認する。


(2) コリジョンマスクによる衝突のフィルタリング

メイン画面の上にある「apple」タブをクリックして APPLE シーンに切り替える

シーンドックの「APPLE」をクリックしてAPPLEのインスペクタを表示する

インスペクタの「CollisionObject2D → Collision → Layer」の値を現在の 1 から 2 に変更するとAPPLEのコリジョンレイヤーが 1 から 2 に変更される。

Ctrl+S を押してAPPLEシーン(taro.tscn)を一旦保存する

メイン画面の上にある「taro」タブをクリックして TARO シーンに切り替える

シーンドックの「TARO」をクリックしてTAROのインスペクタを表示する

インスペクタの 「CollisionObject2D → Collision → Mask」の 2 をオフにすると、TAROはコリジョンレイヤー2に属しているキャラクター(今回はAPPLE)と衝突しなくなる

Ctrl+S を押してTAROシーン(taro.tscn)を一旦保存する

メイン画面の上にある「my_world」タブをクリックして MyWorld シーンに切り替える

右上の「現在のシーンを実行(F6)」を押すかF6キーでゲームを実行し、dキーを押してAPPLEを表示する。

TAROがAPPLEに当たってもラベルの表示が変化しない事を確認する。


(3) グローバルグループによる衝突時の場合分け

新たに「ORANGE」シーンを作成する

メニューから「シーン → 新しい継承シーン」を選択し、「actor.tscn」を選ぶ

シーンドックの「Actor」を「ORANGE」に変更する

シーンドックの「ORANGE」を右クリックして「スクリプトを拡張」を選び、そのまま作成ボタンを押してORANGEのスクリプトファイル(orange.gd)を作成する。

シーンドックの「Sprite2D」をクリックしてSprite2Dのインスペクタを表示する

インスペクタの「Texure <空>」をクリックし、「読み込む」をクリックして「img/ORANGE.png」を選択する

上の方にある「2D」をクリックして2D画面を表示し、画像(50x50)が表示されていることを確認する

シーンドックの「CollisionShape2D」をクリックしてCollisionShape2Dのインスペクタを表示する

インスペクタの「Shape <空>」をクリックし、「CircleShape2D」を選択し、2D画面で当たり判定の領域を調整する

シーンドックの「ORANGE」をクリックしてORANGEのインスペクタを表示する

「インスペクタ」タブの右の方にある「グループ」タブをクリックしてグループドックを開く

グループドックの「+」ボタンを押し、名前に Enemy と入れ、グローバルをセットしてから作成ボタンを押すとORANGEシーンが Enemy グローバルグループに登録される。

Ctrl+S を押してORANGEシーン(orange.tscn)を保存する

メイン画面の上にある「hanako」タブをクリックして HANAKO シーンに切り替える

シーンドックの「HANAKO」をクリックしてHANAKOのインスペクタを表示する

(もし開いてなかったら)「インスペクタ」タブの右の方にある「グループ」タブをクリックしてグループドックを開く

グループドックの「+」ボタンを押し、名前に Friend と入れ、グローバルをセットしてから作成ボタンを押すと HANAKO シーンが Friend グローバルグループに登録される。

Ctrl+S を押してHANAKOシーン(hanako.tscn)を保存する

メイン画面の上にある「my_world」タブをクリックして MyWorld シーンに切り替える

シーンパネルの「MyWorld」を右クリックして「子シーンをインスタンス化 → orange.tscn」を選ぶとORANGEが表示されるので、適当な位置に移動する

上の方にある「スクリプト」をクリックしてスクリプト画面を開く

「taro.gd」を選ぶ

_on_area_entered関数を次のコードに置き換える

ソース 2: グローバルグループを用いた当たり判定
# 他のキャラクターに衝突したときに呼び出される関数
# 引数 area に衝突したキャラクターが入る
func _on_area_entered(area: Area2D) -> void:
	# 当たったキャラクターが"Enemy"グローバルグループに属しているか?
	if area.is_in_group("Enemy"):
		$"/root/MyWorld/CanvasLayer/Label".text = "ITAI"
		$"/root/MyWorld/CanvasLayer/Label".show()
	# 当たったキャラクターが"Friend"グローバルグループに属しているか?
	if area.is_in_group("Friend"):
		$"/root/MyWorld/CanvasLayer/Label".text = "Konnitiwa"
		$"/root/MyWorld/CanvasLayer/Label".show()


右上の「現在のシーンを実行(F6)」を押すかF6キーでゲームを実行し、TAROがORANGEに当たるとラベルに「ITAI」、HANAKOに当たると「Konnitiwa」と表示されることを確認する。