見出し画像

ユニティちゃんに衝突判定を追加してみる

ユニティちゃんに衝突判定を追加する手順をまとめました。「ユニティちゃんを操作してみる」で作ったサンプルの続きになります。

・Unity 2018.4.17f1

【最新版の情報は以下で紹介】

1. ユニティちゃんに重力を追加

はじめに、ユニティちゃんに重力を追加して、床から落ちれるようにします。

(1) ユニティちゃんに「Add Component」で「Rigidbody」を追加。
「Rigidbody」を追加すると、重力を加えたり、任意の方向に力を加えたりするなど、ゲームオブジェクトを物理演算で制御できるようになります。

(2) 「Rigidbody」を以下のように設定。

Mass = 1
Use Gravity = true
Is Kinematic = false
Constraints
  Freeze Position = (false, false, false)
  Freeze Rotation = (true, true, true)

各設定項目の意味は、次のとおりです。

画像4

Mass : 重さ(kg)
Use Gravity : 重力を有効にするかどうか。今回はチェック。
Is Kinematic : 物理演算を無効にするかどうか。今回はチェックなし。
Constraints : 物理演算で移動または回転しないで欲しいXYZ軸を指定。

(3) Playボタンで実行して動作確認
実行すると、床をすり抜けて落ちていきます。

画像2

衝突判定を行うには両オブジェクトに「Collider」が必要になります。床(Plane)には初期状態で「Collider」がありますが、ユニティちゃんには「Collider」がないのが原因になります。

(4) ユニティちゃんに「Add Component」で「Capsule Collider」を追加。「Collider」は、物理衝突のためのオブジェクト形状を設定するコンポーネントです。「Collider」は形別に6種類あります。

Box Collider : 3D用の立方体型のCollider
Sphere Collider : 3D用の球型のCollider
Capsule Collider : 3D用のカプセル型のCollider
2D Box Collider : 2D用の正方形型のCollider
2D Circle Collider : 2D用の円型のCollider
Mesh Collider : メッシュ状のCollider

(5) 「Collider」をユニティちゃんの大きさに揃える
Sceneビューで確認しながら、Colliderをユニティちゃんの大きさをあわせます。

画像3
Center = (0, 0.5, 0)
Radius = 0.3

(6) Playボタンで実行して動作確認
実行すると、こんどは床をすり抜けません。床の端まで行くと落ちます。

画像4

2. Collisionイベントの追加

次に、ユニティちゃんが立方体と衝突したら、青色に変わるようにしてみます。

(1) Hierarchyウィンドウの「+ → 3D Object → Cube」で立方体を配置。
(2) 立方体の位置を調整。

Position = (1.0, 0.5, 0.0)
画像5

(3) 立方体にタグ「Cube」を追加。
「Add Tag」で「Cube」という名前のタグを追加してから選択します。

画像6

(4) ユニティちゃんのスクリプト(UnityChanTest)に以下のメソッドを追加。

// 他のオブジェクトとの衝突開始
void OnCollisionEnter(Collision collision) {
    if (collision.gameObject.tag == "Cube") {
        collision.gameObject.GetComponent<Renderer>().material.color = Color.red;
    }
}

「Collider」を持つオブジェクト同士が衝突すると、以下のメソッドが呼ばれます。

OnCollisionEnter : 他のオブジェクトと衝突開始
OnCollisionExit : 他のオブジェクトと衝突終了
OnCollisionStay : 他のオブジェクトと衝突中

// 他のオブジェクトとの衝突開始
void OnCollisionEnter(Collision collision) {
    // 処理
}

// 他のオブジェクトとの衝突終了
void OnCollisionExit(Collision collision) {
    // 処理
}

// 他のオブジェクトとの衝突中
void OnCollisionStay(Collision collision) {
    // 処理
}

(6) Playボタンで実行して動作確認
実行して、立方体に触ると青色になります。

画像7

3. Triggerイベントの追加

次に、ユニティちゃんが立方体をすり抜けたら、緑色が変わるようにしてみます。

(1) 立方体の「Collider」の「Is Trigger」にチェックを入れる。
「Trigger」が有効だとすり抜け、無効だとすり抜けない設定になります。

画像8

(2) ユニティちゃんのスクリプト(UnityChanTest)に以下のメソッドを追加。

// 他のオブジェクトとのすり抜け開始
void OnTriggerEnter (Collider other) {
    if (other.gameObject.tag == "Cube") {
        other.gameObject.GetComponent<Renderer>().material.color = Color.green;
    }
}

「Collider」を持つオブジェクト同士が衝突すると、片方の「Collider」の「Is Trigger」が有効な時、以下のメソッドが呼ばれます。

OnTriggerEnter : 他のオブジェクトとすり抜け開始
OnTriggerExit : 他のオブジェクトとすり抜け終了
OnTriggerStay : 他のオブジェクトとすり抜け中

// 他のオブジェクトとのすり抜け開始
void OnTriggerEnter (Collider other) {
    // 処理
}

// 他のオブジェクトとのすり抜け終了
void OnTriggerExit (Collider other) {
    // 処理
}

// 他のオブジェクトとのすり抜け中
void OnTriggerStay (Collider other) {
    // 処理
}

(6) Playボタンで実行して動作確認
実行して、立方体に触ると緑色なります。

画像10
画像10

この作品はユニティちゃんライセンス条項の元に提供されています


この記事が気に入ったらサポートをしてみませんか?