VRChat 非公式日本語ドキュメント

Detect Controller Collide

Detect Controller Collide

Unityのイベント OnControllerColliderHit は、CharacterController が他のオブジェクトと衝突したことを検知するのに便利です。VRChatでは、CharacterControllerが他のプレイヤーと衝突したことを検知するために OnControllerColliderHitPlayer イベントが追加されています。このイベントには ControllerColliderPlayerHit 構造体が含まれており、衝突したプレイヤーの VRCPlayerApi オブジェクトへの参照が含まれています。

Detect Controller Collide Example Worldを訪れて、実際に試してみてください!

サンプルの使用方法

Unity Editorでシーンを開始するか、VRChatでワールドを訪れてください。ワールド内のキャンバスを見て、「Last hit:」ラベルの下の空白が、カプセル「character」が衝突すると「Wall」に変わることを確認してください。

カプセルのスポーン地点と壁の間に立つと、カプセルが壁に向かう途中であなたにぶつかります。その際、衝突した瞬間にラベルがあなたの表示名に変わるのを確認できるはずです!カプセルはスポーン地点に戻り、あなたがその場から退くまであなたにぶつかり続けます。あなたがどくと、カプセルは再び壁に衝突し、ラベルは「Wall」に戻ります。

サンプルのインポート

以下の手順に従って、このサンプルをUnityプロジェクトに追加してください:

  1. Unity Editorのメニューから「VRChat SDK > 🏠 Example Central」を選択し、Example Centralウィンドウを開きます。
  2. リストの中からこのプレハブを見つけるか、タイトル(このページのタイトルと同じ)で検索してください。
  3. 「Import」ボタンを押して、Unitypackageをプロジェクトにインポートしてください。

Technical Breakdown

シーンには DetectControllerCollide GameObjectがあり、この例の主要なプレハブとロジックが含まれています。

最初の子オブジェクトである CharacterController には、CharacterControllerコンポーネントと、衝突を検知するロジックを持つグラフプログラムを割り当てたUdonBehaviourが含まれています。

OnCharacterControllerHitExampleGraph

Variables

このグラフには以下のパブリック変数があります:

NameDescription
CharacterControllerCharacterControllerへの参照です。Update() 内で Move() メソッドを実行するために含まれています。
float moveSpeedCharacterControllerが移動する速度です。内部で Time.deltaTime が乗算されます。
TextMeshProUGUI hitNameText衝突が検知された際に更新される、ターゲットのtextFieldへの参照です。
Transform characterControllerStartPosCharacterControllerが毎回移動を開始する位置です。

Events

グラフには4つのイベントがあります:

  • Update()は継続的に実行され、characterControllerのMove()を呼び出して前方に移動させます。
  • OnControllerColliderHit()は、characterControllerがプレイヤー以外のオブジェクトと衝突するたびに実行されます。オブジェクトの名前はイベント経由で渡された ControllerColliderHit 構造体から抽出され、hitNameText フィールドに設定されます。
  • OnControllerColliderHitPlayer()は、characterControllerがプレイヤーと衝突するたびに実行されます。このイベントには ControllerColliderPlayerHit 構造体が含まれており、衝突したプレイヤーのVRCPlayerApiオブジェクトへの参照が含まれています。プレイヤーの名前はその構造体から抽出され、hitNameText フィールドに設定されます。
  • __ResetCharacterController()は、characterControllerを初期位置に戻すために、2つの衝突イベントから呼び出されるカスタムイベントです。

最終更新: