Detect Controller Collide

Unityのイベント OnControllerColliderHit は、CharacterController が他のオブジェクトと衝突したタイミングを把握するのに役立ちます。VRChatでは、CharacterControllerが他のプレイヤーと衝突したことを検知するために、OnControllerColliderHitPlayer イベントが追加されています。このイベントには、衝突したプレイヤーの VRCPlayerApi オブジェクトへの参照を含む ControllerColliderPlayerHit 構造体が含まれています。
Detect Controller Collide Example World にアクセスして、実際に試してみてください!
サンプルの使用方法
Unity Editorでシーンを開始するか、VRChatでワールドにアクセスしてください。ワールド内のキャンバスを見て、「Last hit:」ラベルの下の空欄に注目しましょう。カプセル状の「キャラクター」が壁に衝突すると、その表示が「Wall」に変わるはずです。
カプセルのスポーン地点と壁の間に立って、カプセルが壁に向かう途中であなたにぶつかるようにしてください。衝突すると、ラベルの表示があなたのディスプレイネームに変わるのが確認できるはずです!カプセルはスポーン地点に戻り、あなたがどかない限りぶつかり続けます。あなたが横に移動すると、再び壁と衝突し、ラベルの表示は「Wall」に戻ります。
サンプルのインポート
以下の手順に従って、このサンプルを Unity プロジェクトに追加します。
- Unity エディターのメニューの「VRChat SDK > 🏠 Example Central」から Example Central ウィンドウ を開きます。
- リストの中からこのプレハブを探すか、タイトル(このページのタイトルと同じ)で検索します。
- 「Import」ボタンを押して、Unitypackage をプロジェクトにインポートします。
技術的な詳細
このシーンには、サンプルの主要なプレハブとロジックを含む DetectControllerCollide GameObject が配置されています。
最初の子オブジェクトである CharacterController には、CharacterController コンポーネントと、衝突検知ロジックを含む Graph Program を持つ UdonBehaviour が設定されています。
OnCharacterControllerHitExampleGraph
変数
このグラフには以下のパブリック変数があります。
| 名前 | 説明 |
|---|---|
CharacterController |
CharacterController への参照。Update() 中に Move() メソッドを実行するために含めています。 |
float moveSpeed |
characterController が移動する速度。内部で Time.deltaTime が乗算されます。 |
TextMeshProUGUI hitNameText |
衝突が検知された際に更新される対象の textField への参照です。 |
Transform characterControllerStartPos |
characterController が毎回移動を開始する位置です。 |
イベント
このグラフには4つのイベントがあります。
Update()は継続的に実行され、characterController のMove()を呼び出して前方に移動させます。OnControllerColliderHit()は、characterController がプレイヤー以外のオブジェクトと衝突したときに実行されます。イベントを通じて渡されるControllerColliderHit構造体からオブジェクト名が抽出され、hitNameTextフィールドに設定されます。OnControllerColliderHitPlayer()は、characterController がプレイヤーと衝突したときに実行されます。イベントを通じて渡されるControllerColliderPlayerHit構造体からプレイヤー名が抽出され、hitNameTextフィールドに設定されます。__ResetCharacterController()はカスタムイベントで、2つの衝突イベントから呼び出され、characterController を開始位置にリセットします。
最終更新: