【Unity入門】OnTriggerEnterを使ってすれ違った時の処理を記述する
オブジェクトを通り抜けたときに処理を呼び出すことができます。
やり方は
void OnTriggerEnter() { すれ違った時の処理 } |
と記述するだけです。
すれ違ったオブジェクトの情報を取得したい場合は、
void OnTriggerEnter(Collider 変数) { すれ違った時の処理 } |
と記述します。
この記事の目次
実際にやってみる
準備
それでは、実際にオブジェクトを通り抜けた時の処理を記述してみましょう。
まずは、以前作成した、『Unity Basics』というプロジェクトを開いてください。
『Unity Basics』を開いたら、オブジェクトを通り抜けた時の処理をするシーンを作りましょう。
Scenesフォルダの中に作成します。
ProjectウィンドウでScenesフォルダを選択しましょう。
選択した状態で『+』ボタンを押しましょう。
色々と出てくるので、『Scene』をクリックしましょう。
すると、Scenesフォルダの中に新しくSceneが作成されます。
Sceneの名前を『Collider』に変更しておきましょう。
今回は『Collider』の中でやっていきたいので、Sceneを移動します。
『Collider』をダブルクリックしましょう。
すると、Sceceを移動することができます。
Hierarchyウィンドウを見ると、現在のSceneが『Collider』に変わっていますね。
次に他のオブジェクトとぶつかった時の処理を記述するスクリプトを作りましょう。
Scriptsフォルダを選択してください。
選択した状態で『+』ボタンを押しましょう。
色々と出てくるので『C# Scripts』を選択します。
すると、新しくスクリプトが作成されます。
名前が確定してしまう前に『ColliderScript』と変更しましょう。
名前を変更したら、スクリプトを編集していきましょう。
ColliderScriptをダブルクリックしてください。
すると、VIsual Studioが起動して、ColliderScriptを編集できるようになります。
オブジェクトを通り抜けた時の処理を記述
それでは、実際にオブジェクトを通り抜けた時の処理を記述していきましょう。
今回は、地面と落下する球を作って、球が地面とすれ違ったら、コンソールに『すれ違った』と表示されるようにしてみましょう。
まずは、地面を作ります。
Hierarchyウィンドウで『+』ボタンを押してください。
色々と出てくるので、3D Object > Planeと押していきます。
すると、地面を作成することができます。
次に落下させる球を作りましょう。
Hierarchyウィンドウで『+』ボタンを押してください。
色々と出てくるので3D Object > Sphereと押していってください。
すると、球が作られます。
作った球は落下させ、地面を通り抜けさせる必要があるので、位置を変更して地面よりも高い場所に配置しておきましょう。
次に、球に重力を適用して、落下するようにしましょう。
球にRigidbodyコンポーネントを追加します。
Sphereを選択してください。
選択したら、Inspectorウィンドウで、『Add Component』を押しましょう。
色々と出てくるので、Physics
Rigidbodyと押していきます。
すると、SphereにRIgidbodyコンポーネントが追加されます。
これで、Sphereが落下するようになりました。
実際に落下するのか、再生して確かめてみましょう。
再生ボタンを押してください。
すると、確かにSphereが落下することがわかりますね。
次に、球が地面を通り抜けるようにしましょう。
Sphereを選択してください。
選択したら、InspectorでSphere Colliderの
Is Triggerに
チェックを入れましょう。
すると、オブジェクトを通り抜けるようになります。
実際に通り抜けるようになったのか、再生して確かめてみます。
再生ボタンを押しましょう。
すると、確かに通り抜けるようになったのがわかりますね。
次に、Sphereが地面を通り抜けたら、コンソールに『通り抜けた』と表示されるようにしましょう。
スクリプトを編集していくのですが、その前にSphereにスクリプトを追加しておきましょう。
ColliderScriptをSphereにドラッグ&ドロップします。
すると、ColliderScriptがSphereに追加されます。
それでは、スクリプトを編集していきましょう。
ColliderScriptをダブルクリックしましょう。
すると、編集できるようになります。
Update関数の下に、
void OnTriggerEnter(){ Debug.Log(“すれ違った”);} |
と記述しましょう。
コードについて説明していきます。
OnTriggerEnterというのは
Start関数や
Update関数と同じ
イベント関数です。
今回のOnTriggerEnterの場合は、スクリプトを追加したオブジェクトが他のオブジェクトとすれ違った時に呼ばれます。
他のオブジェクトとすれ違った時に『すれ違った』とコンソールに表示したいので、OnTriggerEnterの中には
Debug.Log(“すれ違った”); |
と記述しています。
この状態で再生すると、地面とすれ違った時に、コンソールに『すれ違った』と表示されるはずです。
実際にそうなるのか、再生して確かめてみましょう。
スクリプトを保存してUnityエディタに戻りましょう。
Unityエディタに戻ったら再生ボタンを押してください。
すると、Sphereが地面とすれ違った瞬間に、コンソールに『すれ違った』と表示されます。
うまくいっていますね。
すれ違ったオブジェクトを取得
次に、すれ違ったオブジェクトの情報を取得してみましょう。
今回は、すれ違ったオブジェクトの名前をコンソールに表示してみようと思います。
今回すれ違うオブジェクトはPlaneです。
なので、Planeと表示されるようにします。
コードを書いていくのですが、まずは前回書いたコードを
コメントアウトしておきましょう。
コメントアウトのやり方はコメントアウトしたい箇所を選択した状態でコマンドキーを押しながら、『/』を押すだけです。
コメントアウトすると、このような表示になります。
それでは、コードを書いていきましょう。
コメントアウトしたコードの下に
void OnTriggerEnter(Collider other){ Debug.Log(other.gameObject.name);} |
と記述しましょう。
コードについて説明していきます。
まず、このコードはOnTriggerEnterを使っているので
他のオブジェクトとすれ違った時に呼ばれます。
引数にはCollider型の
otherという名前の変数をとります。
Collider型の変数はすれ違ったオブジェクトの情報を扱います。
なので、other.gameObject
と記述すると、すれ違ったオブジェクトを取得することができます。
今回であれば地面のオブジェクトであるPlaneとすれ違うので、Planeが取得されます。
取得されたPlaneに対して.nameと記述することで、
名前を取得します。
今回の場合だとPlaneですね。
なので、Debug.Logにより
地面とすれ違うと、『Plane』とコンソールに表示されるはずです。
実際にそうなるのか再生して確かめてみましょう。
スクリプトを保存して、Unityエディタに戻りましょう。
Unityエディタに戻ったら、再生ボタンを押してください。
すると、球が地面とすれ違った時、コンソールには『Plane』と表示されますね。
このようにして、オブジェクトとすれ違った時の処理を記述することができます。