ゲームに欠かせない当たり判定。
「チャレンジしてみたけどよく分からない・・・」
「思った通りに動かない・・・」
「実際に動いてるところをみて参考にしたい!」
なんてことはありませんか?
格闘ゲームやシューティングゲームなど攻撃や敵に当たり判定がなかったら・・・?
すべてすり抜けてしまいます・・・
そんなゲームに欠かせないコライダー(当たり判定)について書いていきます。
この記事を読むと・・・
- 上手く動かなかったときのチェックポイント3点
- コライダーの仕組みがわかる
- コライダーの実装手順がわかる
- コライダー接触後、アクションが追加できる(当たり判定が作れる)
私が作成したオリジナルゲームを使いながら丁寧に解説していきます。
コライダー・当たり判定で迷うことはもうありませんよ!
せっかく始めたゲーム開発・・・。
挫折してしまうのはもったいない!
朝起きたら、ゲーム開発に関する知識詰め込まれてないかな・・・なんて。
アンケートで分かった「稼ぐこと」ができた学習方法をまとめました。
\ゲーム開発ができる「引き出し」が無限に!/
ゲーム開発ができる世界へワープしませんか?
コライダー当たり判定が動かない【チェックポイント3つ】
「設定できているはずなのに動かない・・・」
あるあるです・・・。
たくさん失敗した経験から確認すべきポイントをまとめました。
- リジットボディ入ってる?
- トリガーへのチェックの有無
- スクリプト書く側、合ってる?
リジットボディ入ってる?
リジットボディが接触させたいものに入っている必要があります。
接触する片側には必須となりますのでご注意を。
リジットボディ(Rigidbody)ってなんだっけ?という方はこちらの記事で解説しています。
トリガーへのチェックの有無
OnTriggerEnterを使って接触したものを貫通させたい場合・・・
トリガーにチェックが入っていないとOnTriggerEnterは呼ばれまず下記動画のようになります。
接触しても全く反応しないという悲しい結果になってしまいました。
スクリプト書くのはどちらか
コライダーに接触後、アクションをさせたい側にスクリプトを書くのはNGです。
〇〇に接触したら・・・△△するというスクリプトのため、
接触する側(〇〇側)にスクリプトを書く必要があります。
上手く動かない場合はご確認ください。
大丈夫!と思っても意外とあるあるなんですよね・・・
コライダーを使ってできること
リジットボディが設定されているものが衝突するかすり抜けるかをコライダーを使って管理します。
百聞は一見にしかず、下記動画をみてください。
実生活の天井やドアをイメージしてもらうと良いです。
設定したものが衝突するか通過を判定しています。
コライダー実装手順 3ステップ
ボックスコライダーやサークルコライダーなど様々な形のコライダーがあります。
よく使う3つのコライダーはこちらです。
- Circle Collider 2D:円形
- Box Collider 2D :四角形
- Capsule Collider 2D:カプセル型
今回解説しているゲームのコライダーはCircle Collider 2D(円形:爆弾)とBox Collider 2D(四角形:猫)を使っています。
キャラクターの形に応じて選びましょう!
緑の枠がコライダーです!
今回はBox Collider 2Dです。
追加したいキャラクターや背景等をヒエラルキーから選びます。
コンポーネントを追加をクリック後、追加したいコライダーを選択します。
ボックスコライダーのインスペクター内にあるエッジの半径の値を調整することで大きさを決めることができます。
緑の枠が大きくなりました。
当たり判定を広くとることができます。
衝突したら成功です!
でも、このままではただぶつかっているだけなのでコライダー同士が接触したら・・・〇〇する!【当たり判定】を作っていきましょう。
コライダーに接触したら・・・?【当たり判定】
コライダー同士が接触した後、呼ばれる関数の条件
OnColisionEnter:他のコライダーに接触したとき
OnColisionExit:他のコライダーが離れたとき
OnColisionStay:他のコライダーが触れている間
OnTriggerEnter:他のコライダーに接触したとき
OnTriggerExit:他のコライダーが離れたとき
OnTriggerStay:他のコライダーが触れている間
さらっと関数を出してみたものの分からん!という方がほとんどではないでしょうか・・・
実際にこの関数を使ってゲーム内での動きを確認していきますのでご安心を。
OnTriggerEnterの使い方
OnTriggerEnterは一番シンプルで使い勝手が良いです。
呼び出される条件は・・・接触したとき。
例えば・・・接触したら消えるなどに使うことができます。
void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("cat player"))
{
Destroy(collision.gameObject);
}
}
スクリプトを入力するのは接触される側です。
(今回は爆弾に当たったのが、猫なら・・・消すというスクリプトです。)
猫ちゃん側のインスペクターにスクリプトを入力(アタッチ)しても猫ちゃんは消えません(Destoryされない)。
IFの使い方・キャラクターの動かし方を詳しく知りたい方はこちらの記事で解説しています。
OnCollisionEnterとの違い
違いはコライダーを貫通するかどうかです。
・OnColisionEnter:コライダー接触時、貫通しない
・OnTriggerEnter:コライダー接触時、貫通する
比較してみた動画がこちらです。(OnColisionEnterから)
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "cat player")//接触したコライダーがねこちゃんだった場合
{
text.SetActive(true);//textをアクティブにする(表示させる)
}
}
猫ちゃんが落下してきて、下にある猫缶に接触するとテキスト(UnityFIGHT)を出現させるCollisionEnter2Dを使ったスクリプトです。
続いてOnTriggerEnterです。
void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("cat player"))//接触したコライダーがねこちゃんだった場合
{
text.SetActive(true);//textをアクティブにする(表示させる)
}
}
猫ちゃんは貫通して落下していますがテキスト(UnityFIGHT)は出現していますね。
ご理解いただけましたか?
ページを何度かよみながら実際にスクリプトに当てはめてもらうと理解が深まりますよ!
\ゲーム開発ができる「引き出し」が無限に!/
ゲーム開発ができる世界へワープしませんか?
まとめ コライダー・当たり判定の実装とチェックポイント
コライダーや当たり判定が上手く動かなかったときの3つチェックポイントをまとめました。
実装手順や当たり判定の種類についても解説しました。
まったくの未経験からゲームを完成させようと思うとつまづくことも多いと思います。
わたしもそうでした。
昨日知らなかったことが今日知れればいいんです。
少しずつ自分のモノにしていきましょう!
少しでもあなたの力になれたら嬉しいです。
ではまた別の記事で〜
ゲームの作り方総集編!
11ステップであなたもゲームが作れる。喜んでもらえる。
未経験からでも、分かる!が積み上がりゲームを完成できる。
詳細はこちらから。
コメント