【Defold】衝突判定を付ける
シューティングゲームの自機が発射した弾と敵キャラクターの様に衝突判定が必要な個所では、GameObjectにコリジョンコンポーネントを追加することで衝突判定ができる様になります。
そもそもDefold Engineって何?という方はこちら。
目次
サンプル
Collisionコンポーネントを追加する
衝突用のCollisionコンポーネントを追加するには、GameObjectを選択して右クリック->[Add Component]->[Collision Object]を選択します。
作成したcollisionobjectを右クリック->[Add Shape]で衝突判定用の形を選択しサイズを調整します。
CollisionObjectのプロパティ設定
プロパティ | 値 |
Type | Kinematic |
Group | 衝突グループA。分かりやすい名前を設定して下さい |
Mask | ここで設定したグループと衝突判定が行われます |
Typeは重力の影響を受けたくないのでKinematicに変更 しています。GroupやMaskは状況によって設定してみてくください。例えばシューティングゲームの弾と敵との衝突判定を付ける場合は、
弾のプロパティ
プロパティ | 値 |
Type | Kinematic |
Group | bullet |
Mask | enemy |
敵のプロパティ
プロパティ | 値 |
Type | Kinematic |
Group | enemy |
Mask | bullet |
この様に設定します。これで弾は敵と衝突しますし、敵と弾は衝突します。
コードを書く
衝突判定が取れる様にcollisionobjectの設定が終えたら、次はコードを書いていきます、まずは弾の方から
function on_message(self, message_id, message, sender)
if message_id == hash("collision_response") then
if message.group == hash("enemy") then
go.delete()
end
end
end
この様な何時でon_messageにメッセージが飛んできます。メッセージ内容がcollision_responseかどうかを確認し、衝突した時のグループがenemyなのかどうかをチェックしています。弾が衝突した対象がenemyであれば、自身を削除、つまり弾を削除しています。
これと同様に敵のスクリプトも書いていきます。
function on_message(self, message_id, message, sender)
if message_id == hash("collision_response") then
if message.group == hash("bullet") then
go.delete()
end
end
end
弾のスクリプトとほとんど同じです。違いは衝突確認するグループが弾なのかどうかという点です。敵は弾と衝突したかどうかを知りたいので、bulletグループかどうかを確認しています。衝突したことを確認できたら、敵を削除しています。