【Unity】当たり判定!アイテムをGETするエフェクト実装|Colliderの基礎

collision-detection Unity development

回転するアイテムは配置できたけど、接触しても跳ね返されてしまう。

そうですね、当たり判定をするプログラムを実装して解決しましょう。

実際に画面操作をしながら理解を深めていただきたく、以下の続きとして解説していきます。
エッセンスだけを知りたい方は、このステップをスキップして本文へお進みください。

【解説画面に沿ってやりたい方】
以下の1記事の内容をベースに解説しますので、事前に実施をお願いします。(必須)

[所要時間:約10分]

▼キーボードからオブジェクトを操作▼

解説画面と全く同じ環境にしたい場合は、追加で以下の3記事を実施お願いします。(任意)

[所要時間:約30分]

▼オブジェクトに色を付ける▼

▼オブジェクトが落ちないように壁を作る▼

▼エディタでパラメータ調整▼

▼回転するアイテム配置▼

ここまでで、事前準備は完了したと思いますので、早速解説していきましょう。

まず、アイテムをGETするというのは、どのような状態なのか整理していきましょう。

「オブジェクト同士(球とアイテム)の当たり判定」→「オブジェクトの一方(アイテム)を非表示」の状態。

オブジェクト同士の当たり判定

オブジェクト同士の当たり判定(接触検出)は、Colliderコンポーネントの役割です。
ゲームには欠かせないコンポーネントです。

当たり判定される領域

まずは、オブジェクトの当たり判定される形状を[Mesh Renderer]で確認しましょう。

Hierarchyウインドウの[Player](オブジェクトなら何でも可)を選択します。
Inspectorウインドウの[Mesh Renderer]の左側のチェックを外してOFFにします。1-Collider1

Sceneビューは、[Mesh Renderer]のON/OFFでこのように変化します。2-Collider-ONOFF

[Mesh Renderer]がOFFの時に表示される「緑の球線」が、当たり判定がされる領域という訳です。

オブジェクトの形状毎に当たり判定領域は異なりますので、他のオブジェクトも確認してみてください。

当たり判定を入れる

まずは、球[Player]がアイテム[Item]を通り抜けるようにしていきます。
ここで、Colliderコンポーネントの出番です。

当たり判定は、接触するオブジェクトの片方に入っていれば動作します。
そのため、今回は、[Item]の方に設定します。

Projectウインドウのプレハブ化した[Item]を選択し、Inspectorウインドウの[Open Prefab]をクリックします。3-Item-Openprefab

編集モードに移行します。

Inspectorウインドウの[Box Collider]>[Is Trigger]にチェックを付けてONにします。これで、物理演算をせず(接触して止まらず)に、「当たり判定」のみを実施するようになります。4-Is-Trigger-ON

[Is Trigger]をONにすると、プレハブ化されている[Item(1)]と[Item(2)]にも、ここでの設定内容が反映されます。

これで、[Player]が[Item]、[Item(1)]、[Item(2)]を通り抜けるようになります。

当たり判定の確認

[▶︎]ゲームプレイで、実際に通り抜けるかを確認してみてください。
5-Player-Item-Through

[Player]が[Item]を通り抜けています。
これで、通り抜けは完了です。

オブジェクトの一方を非表示

当たり判定により、アイテム[Item]を非表示にします。

「球[Player]に当たった相手(アイテム等)を非表示にする」というプログラムをScriptに書いていきます。そのため、球[Player]に関連付けられているScriptを開きます。

Projectウインドウの[PlayerController]をクリックして、VisualStudioでScriptを開きます。6-Script-open

当たり判定をトリガーにするメソッド追加

「OnTiggerEnterメソッド」の出番です。

OnTiggerEnterメソッド
他のオブジェクトのトリガーに、自分のColliderが入った(接触した)瞬間だけ実行されるメソッド。
Scriptは、以下のオレンジ枠部の内容を追記します。8-Script-rewrite

void:戻り値を持たない
OnTriggerEnter:他のオブジェクトに接触した瞬間に実行
(Collider other):引数で、other(自分以外の他のオブジェクト)に接触するとその相手(オブジェクト)のColliderが代入される。

other.gameObject:自分以外の他のオブジェクトを表す。
SetActive():Inspectorウインドウの下のチェックをON/OFFするメソッドです。オブジェクトのアクティブ/非アクティブを切り替えます。
7-SetActiveFalse:Bool型でFalse(偽)は非表示、True(真)は表示になります。

追記が完了したら、保存します。

当たり判定をトリガーに非表示化するかの確認

[▶︎]ゲームプレイで、当たり判定により非表示化するかを確認しましょう。9-gemeview

当たり判定(接触検出)で、アイテムを非表示化することができました。
お疲れ様でした。

▼ポチッと応援お願いします▼
にほんブログ村 IT技術ブログ Unityへ
にほんブログ村
タイトルとURLをコピーしました