Unityのカスタムキャラクターコントローラー「Pretty Good Character Controller」がOSSとして公開中
Unityのキャラクターコントローラーをリジッドボディで再実装したオープンソースプロジェクト「Pretty Good Character Controller」が公開されています。開発者のthesquirrelyjones氏がGitHubにMITライセンスで公開しており、スターは205を超えています。

標準コントローラーが苦手とするケースへの対応
Unityに標準搭載されているCharacter Controllerは、壁への引っかかりや動く床との連携など、特定の状況で想定外の挙動をすることがあります。このプロジェクトはそうしたエッジケースに対処することを目的として設計されています。サードパーソン用とファーストパーソン用の2種類のプレハブが含まれ、キーボード・マウス操作とゲームパッド操作の両方に対応しています。
RigidbodyベースでFixedUpdateではなくUpdateで動作し、ステップ昇降や地形に沿った移動といった補正をフレーム内で適用します。地面の傾斜を推定する処理には三角形状のレイキャストパターンを使用しており、階段のようなジオメトリも滑らかな斜面として扱います。
物理更新のタイミングを制御するPhysics Manager
このプロジェクトのもうひとつの特徴は、物理更新のタイミングを管理するPhysics Managerスクリプトです。Unityの標準的な物理更新は固定タイムステップ(FixedUpdate)で動作するため、ゲームのフレームレートと一致せず、物理オブジェクトとスクリプト制御オブジェクトの間に視覚的なズレが生じることがあります。フレームレートが低下した場合には1フレームに複数回の物理更新が走り、さらなる処理負荷につながることもあります。
Physics ManagerはTime.deltaTimeをタイムステップとしてフレーム開始時に物理更新を行います。フレームレートが低下した際にdeltaTimeを分割して複数回更新するオプションや、最大分割数の設定、あるいは複数回更新の代わりにゲーム全体をスローダウンさせるオプションも用意されています。物理起因のスタッタリングに悩んでいる場合、このスクリプト単体でも参考になるかもしれません。
Unityの標準キャラクターコントローラーで壁や段差の処理に課題を感じている方、または物理更新のタイミングによるスタッタリングを解消したい方は、このプロジェクトのコードを参照してみてください。





