UnityでViveコントローラーと接触したオブジェクトの情報を取得する方法を記録しておく。
UnityにはOnTriggerEnterというメソッドがあるので、ViveコントローラーのInspectorに新規スクリプトを付け、下記の内容を記述すれば良い。上手く動いていれば、オブジェクトに接触する度にログに「接触して、接触相手の名前を取得」と表示されるはず。
1 2 3 4 5 6 7 8 9 |
using System.Collections; using UnityEngine; public class ControllerContact : MonoBehaviour { GameObject grabedByController; void OnTriggerEnter (Collider other) { grabedByController = other.gameObject; Debug.Log ("接触して、接触相手の名前を取得"); } |
コントローラーが接触した相手は、otherと書くだけで呼び出すことができる点が非常に使いやすい。下のスクリプト例にある、other.gameObjectはコントローラーと接触したオブジェクトのことなので、grabedByControllerにコントローラーと接触したオブジェクトが代入される。other.gameObjectの後に、.nameとか.transform.positionを付ければ、接触したオブジェクトの名前や座標を取得することも簡単にできる。
なお、このメソッドを使用する際の注意点として、コントローラーと接触相手のオブジェクトのInspector設定がある。このメソッドが呼ばれる条件として、コントローラーか接触相手の少なくとも一方にrigidbodyが付けられていなければならない。また、両方にcolliderの設定もされていなければならない。(反対に、ステージに複数のオブジェクトがあり、接触時に情報取得したくないものがあればcollider設定を外しておけば良い)