2020/11/15(日) [n年前の日記]
#1 [godot] Godot Engineでアタリ属性を設定
Godot Engine 3.2.3 x64 を使って3D表示の簡単なシューティングゲームっぽいものを作る。
今回は各オブジェクトでアタリ判定をするためにアタリ属性を設定してみる。
今回は各オブジェクトでアタリ判定をするためにアタリ属性を設定してみる。
◎ レイヤーとマスクの名前を付ける。 :
Godot Engine は各種アタリ判定(衝突判定)をする際に、レイヤー(Layer)とマスク(Mask)というものを利用して、衝突するものとしないものの関係を設定することができる。
まずは分かりやすくするために、各レイヤーにレイヤー名を設定しておく。
レイヤー名の設定はプロジェクト設定で行える。「プロジェクト」 → 「プロジェクト設定」を選択。
「Layer Names」 → 「3D Physics」を選択。右側に「Layer 1」「Layer 2」と一覧が並んでる。ここでレイヤー名を設定できる。
Layer 1 から順々に、必要になりそうなレイヤー名を入力していく。今回は以下の4つが必要になる。
ついでに、3D Render にもレイヤー名をつけておく。将来的に使うかどうかわからないけど…。
まずは分かりやすくするために、各レイヤーにレイヤー名を設定しておく。
レイヤー名の設定はプロジェクト設定で行える。「プロジェクト」 → 「プロジェクト設定」を選択。
「Layer Names」 → 「3D Physics」を選択。右側に「Layer 1」「Layer 2」と一覧が並んでる。ここでレイヤー名を設定できる。
Layer 1 から順々に、必要になりそうなレイヤー名を入力していく。今回は以下の4つが必要になる。
- player (プレイヤー)
- playerbullets (プレイヤーの弾)
- enemy (敵)
- enemybullets (敵弾)
ついでに、3D Render にもレイヤー名をつけておく。将来的に使うかどうかわからないけど…。
◎ 各シーンのレイヤーとマスクを設定。 :
各シーンのレイヤーとマスクを設定していく。
まずはプレイヤーキャラ。res://assets/Player.tscn を開く。Collision の欄に「Layer」と「Mask」があるので、クリックして有効無効を切り替える。
プレイヤーの弾を設定する。res://assets/PlayerBullet.tscn を開く。
敵を設定する。res://assets/EnemyZako.tscn を開く。
敵弾を設定する。res://assets/EnemyBullet.tscn を開く。
まずはプレイヤーキャラ。res://assets/Player.tscn を開く。Collision の欄に「Layer」と「Mask」があるので、クリックして有効無効を切り替える。
- プレイヤーキャラなので、Layer は一番左の player を有効化。
- Mask でアタリ判定(衝突判定)をする対象を選ぶ。プレイヤーキャラは、「自分には当たらない」「自分の弾にも当たらない」「敵とは当たる」「敵弾にも当たる」ので、左から3番目の enemy と、左から4番目の enemybullets を有効化。
プレイヤーの弾を設定する。res://assets/PlayerBullet.tscn を開く。
- プレイヤーの弾なので、Layer は左から2番目の playerbullets を有効化。
- Mask は、「プレイヤーには当たらない」「自分(達)にも当たらない」「敵には当たる」「敵弾とは当たらない」ので、左から3番目の enemy だけを有効化。
敵を設定する。res://assets/EnemyZako.tscn を開く。
- 敵なので、Layer は左から3番目の enemy を有効化。
- Mask は、「プレイヤーには当たる」「プレイヤーの弾にも当たる」「自分には当たらない」「自分の弾にも当たらない」ので、一番左の player と、左から2番目の playerbullets を有効化。
敵弾を設定する。res://assets/EnemyBullet.tscn を開く。
- 敵弾なので、Layer は左から4番目の enemybullets を有効化。
- Mask は、「プレイヤーには当たる」「プレイヤーの弾には当たらない」「敵には当たらない」「自分(達)にも当たらない」ので、一番左の player だけを有効化。
◎ グループ名を指定。 :
後々、何かと何かが当たった(衝突した)際に、一体何に当たったのかを調べる必要が出てくるかもしれない。その判別をするために、各シーンに「グループ名」をつけておくことにする。
例えば、プレイヤーと、プレイヤーの弾に異なるグループ名をつけておけば、敵が何かに当たった際にグループ名を調べて、それがプレイヤーなのか、プレイヤーの弾なのかを判別することができたりする。
プレイヤーキャラのシーン、Player.tscn を開いて、ノードタブをクリック → グループをクリック。「player」と入力して「追加」。これで、プレイヤーに「player」というグループ名をつけられる。
プレイヤーの弾、PlayerBullet.tscn を開いて、「playerbullets」というグループ名を設定。
敵のシーン、EnemyZako.tscn を開いて、「enemys」というグループ名を設定。
敵弾シーン、EnemyBullet.tscn を開いて、「enemybullets」というグループ名を設定。
これで、アタリ属性を設定できた。
次回はアタリ判定処理を作る。
例えば、プレイヤーと、プレイヤーの弾に異なるグループ名をつけておけば、敵が何かに当たった際にグループ名を調べて、それがプレイヤーなのか、プレイヤーの弾なのかを判別することができたりする。
プレイヤーキャラのシーン、Player.tscn を開いて、ノードタブをクリック → グループをクリック。「player」と入力して「追加」。これで、プレイヤーに「player」というグループ名をつけられる。
プレイヤーの弾、PlayerBullet.tscn を開いて、「playerbullets」というグループ名を設定。
敵のシーン、EnemyZako.tscn を開いて、「enemys」というグループ名を設定。
敵弾シーン、EnemyBullet.tscn を開いて、「enemybullets」というグループ名を設定。
これで、アタリ属性を設定できた。
次回はアタリ判定処理を作る。
[ ツッコむ ]
以上です。