ユニティちゃんに衝突判定を追加してみる
ユニティちゃんに衝突判定を追加する手順をまとめました。「ユニティちゃんを操作してみる」で作ったサンプルの続きになります。
【最新版の情報は以下で紹介】
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)
各設定項目の意味は、次のとおりです。
・Mass : 重さ(kg)
・Use Gravity : 重力を有効にするかどうか。今回はチェック。
・Is Kinematic : 物理演算を無効にするかどうか。今回はチェックなし。
・Constraints : 物理演算で移動または回転しないで欲しいXYZ軸を指定。
(3) Playボタンで実行して動作確認
実行すると、床をすり抜けて落ちていきます。
衝突判定を行うには両オブジェクトに「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をユニティちゃんの大きさをあわせます。
Center = (0, 0.5, 0)
Radius = 0.3
(6) Playボタンで実行して動作確認
実行すると、こんどは床をすり抜けません。床の端まで行くと落ちます。
2. Collisionイベントの追加
次に、ユニティちゃんが立方体と衝突したら、青色に変わるようにしてみます。
(1) Hierarchyウィンドウの「+ → 3D Object → Cube」で立方体を配置。
(2) 立方体の位置を調整。
Position = (1.0, 0.5, 0.0)
(3) 立方体にタグ「Cube」を追加。
「Add Tag」で「Cube」という名前のタグを追加してから選択します。
(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ボタンで実行して動作確認
実行して、立方体に触ると青色になります。
3. Triggerイベントの追加
次に、ユニティちゃんが立方体をすり抜けたら、緑色が変わるようにしてみます。
(1) 立方体の「Collider」の「Is Trigger」にチェックを入れる。
「Trigger」が有効だとすり抜け、無効だとすり抜けない設定になります。
(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ボタンで実行して動作確認
実行して、立方体に触ると緑色なります。
この作品はユニティちゃんライセンス条項の元に提供されています
この記事が気に入ったらサポートをしてみませんか?