※2017/08/02 加筆修正
例えば、キャラクターと障害物の当たり判定を取りたい場合。
障害物の設定
Box Collider 2Dを付ける
ボックスコライダーというのは、衝突判定を取る範囲の設定をするコンポーネントのこと。
(1)障害物を配置したら、インスペクターで
Add Component - Physics 2D - Box Collider 2Dを選ぶ。
(2)コライダーのサイズを設定する。
サイズの調整方法
Sizeの項目で、適当に数値を入れておいて、Editボタンを押したら、緑色の線が出るので、四角いハンドル部分をドラッグして調整する。
キャラクターの設定
Box Collider 2Dを付ける
障害物と同様に設定する。
Rigidbody 2Dを付ける
リジッドボディは、重力や抵抗力といった物理演算をするコンポーネントのこと。
設定項目の詳細は、公式にて。
この状態で再生すると、重力の影響を受けてキャラクターが下方向へ落ちて行くはず。
目的に応じて設定するのだけど、設定の方法で使うメソッドが変わってくる。
物理演算が必要な場合
キャラクターの設定項目
・RigidbodyのBodyType : Dynamic
・Box ColliderのIs Triggerのチェックを外す。
スクリプト
スクリプトは、Unity側で用意されたイベントトリガーがあるので、それを使う。
//衝突した時に、一度だけ実行する void OnCollisionEnter2D(Collision2D coll) { } //衝突している間、毎フレーム実行される void OnCollisionStay2D(Collision2D coll) { } //離れた時に、一度だけ実行する void OnCollisionExit2D(Collision2D coll) { }
引数について
Collision2D coll が引数で設定されている。collは変数名なので任意の名前でOK。
これは、衝突した相手のCollision2Dを取得している。
なので、衝突した相手のタグ名を取得したい場合は、こう書く。
string tag = coll.gameobject.tag;
物理演算が必要ない場合
キャラクターの設定項目
・RigidbodyのBodyType : Kinematic
・Box ColliderのIs Triggerにチェックを入れる 。
(障害物の方には、チェックを入れなくて良い)
スクリプト
同様にスクリプトは、Unity側で用意されたイベントトリガーがあるので、それを使う。
//衝突した時に、一度だけ実行する void OnTriggerEnter2D(Collider2D other) { } //衝突している間、毎フレーム実行される void OnTriggerStay2D(Collider2D other) { } //離れた時に、一度だけ実行する void OnTriggerExit2D(Collider2D other) }
引数について
同様に、otherは変数名なので任意の名前でOK。
以上。