NeosVR開発用メモ書き - CharacterController
主に特定のオブジェクトに操作キャラと同等の当たり判定の適用及び操作を行いたい場合などに使用する。
応用用途は広いが、この記事を書いた時点ではバイクや車の挙動制御に用いられている場合が多い。
恐らくLogiX経由で移動制御することでNPCを歩かせるような動作も実装可能と思われる。

以下、管理人の理解度などに応じて記述が追加されます。

仕様について

後日文章を整理します。

CharacterControllerのコンポーネントを追加されたSlotは
設定に応じた挙動を行えるようになる。
コントロール自体はLogiXから行う。

衝突判定について

移動時の地面や壁との衝突判定については、
設定したSlot、もしくはCharacterControllerで設定したrootの原点の中心点のみに判定が存在する。
同じSlotにColliderが設定されていてもCharacterControllerの挙動については無視される。

それ以外の衝突判定については、CharacterController内のHeightとRadiusの大きさに依存する。
子に入っているオブジェクトより小さくすることは出来ない。

何も考えずに設定をすると、モデルのど真ん中が地面と壁の判定になる為、以下のような対策が必要になる。
対策
空のSlotを追加してそれにCharacterControllerとGrabを追加。
追加したSlotの真上に設定したいオブジェクトを設置して子にする。
子のオブジェクトのGrabbableをFalseにする。
これで足元に判定を移動しつつ掴んで移動なども可能になる。
子のGrabbableをTrueにしておくと子だけが移動してしまうので注意。
対策2
空のSlotを追加して地面の判定を決める点までは似ているが、
CharacterRootに任意のSlotを指定することで、特定のSlotをRootにしてかつそのSlotの原点をあたり判定とすることが出来る。
CharacterControllerを追加したSlotと当たり判定のあるSlotを別にすることが出来る。


簡単な実装例

なんても良いのでオブジェクトを用意。今回はBOX。
コンポーネント
Physics>CharacterController
を追加

TractionForce(牽引力?)を0かそれに近い値に設定しておく。


コード例

WriteRefの記入先はCharacterControllerのSimulatingUser。
恐らくユーザーなら誰を指定しても良いものと思われるが、ユーザー毎の違いは不明。

これで右コントローラーのスティックを動かすとBOXが動き出す。
ApplyCharacterForceだと徐々に加速するような動きになる。