Version: 5.4
Capsule Collider
Character Joint

Character Controller

Character Controller は、主に Rigidbody による物理特性を使用しない、3 人称や 1 人称のプレイヤー制御に使用されます。

プロパティー

プロパティー 機能
Slope Limit コライダーが、指定した値以下の勾配(単位は度)のみを登るよう制限します。
Step Offset 指定された値よりも地面に近い場合にのみ、キャラクターが階段を登ります。キャラクターコントローラーの高さより大きくした場合エラーが発生します。
Skin width 2 つのコライダーが、Skin Width の深さまで互いに食い込みます。Skin Width が大きくなると、ジッタが減ります。Skin Width が小さいと、キャラクターが動けなくなる場合があります。値を Radius の 10% に設定しておくとよいでしょう。
Min Move Distance キャラクターが指定された値未満で動こうとしても、まったく移動しません。ジッタを減らすのに使用できます。ほとんどの場合、この値は 0 のままにしておいてください。
Center これにより、ワールド空間でカプセルコライダーをオフセットしますが、キャラクターがどのように旋回するかには影響しません。
Radius カプセルコライダーのローカル半径。これは基本的にコライダーの幅となります。
Height キャラクターの カプセルコライダー の高さ。この値を変更すると、正負の方向で Y 軸に沿ってコライダーが拡大縮小されます。
キャラクターコントローラー
キャラクターコントローラー

詳細

従来の Doom 形式の 1 人称制御は物理的に、現実的ではありません。キャラクターは、時速 90 マイルで走り、すぐに停止し、急旋回します。これはあまり現実的でないため、剛体と物理特性を使用し、この動作を作成するのは、違和感があります。これを解決するため、専用のキャラクターコントローラーを使用します。これは単にカプセル型の コライダー で、スクリプトからある方向に移動するよう指示します。コントローラーは、移動を実行しますが、衝突により制約されます。壁に沿って滑り、( Step Offset よりも低い場合)階段を登り、Slope Limit 内で勾配を登ります。

コントローラーは、それ自体への力には反応せず、自動的に剛体を離しません。

キャラクターコントローラーでリジッドボディやオブジェクトを離したい場合は、スクリプトで、OnControllerColliderHit() 関数を介して衝突するオブジェクトに力を適用できます。

一方、プレイヤーキャラクターが物理特性の影響をうけるようにしたい場合は、キャラクターコントローラーの代わりに、リジッドボディ を使用した方がよいでしょう。

キャラクターの微調整

キャラクターのメッシュに合うように、HeightRadius を修正できます。人間のキャラクターの場合は、約 2 メートルを常に使用することをお勧めします。また、回転軸がキャラクターの中心でない場合に、カプセルの Center で修正できます。

Step Offset もこれに影響するので、2 メートルサイズの人間の場合は、この値を 0.1 と 0.4 の間にしてください。

Slope Limit は小さすぎないようにしてください。多くの場合、90 °を使用するのがベストです。キャラクターコントローラーはカプセルの形状のため、壁を登ることができません。

動きを停止させない

Skin Width は、キャラクターコントローラーを調整する際に、正しく機能させるためのもっとも重要なプロパティーの 1 つです。 キャラクターが動かなくなった場合、多くは Skin Width が小さすぎることが原因です。Skin Width により、オブジェクトが若干コントローラーを突き抜けますが、ジッタが減り、動作停止を回避できます。

Skin Width を 0.01 より大きい値で維持し、Radius を 10% より大きい値にしておくとよいでしょう。

Min Move Distance は 0 にしておくことをお勧めします。

キャラクターコントローラーのスクリプトリファレンスの リンク を参照してください。

当社 Web サイトの Resources エリアから、事前設定されたアニメート化や移動するキャラクターコントローラーを示すプロジェクトのサンプルをダウンロードできます。

ヒント

  • キャラクターが頻繁に動作停止する場合は、Skin Width を調整してみてください。
  • 自身でスクリプトを記述したとき、キャラクターコントローラーが物理特性を使用して、オブジェクトに影響する場合があります。
  • キャラクターコントローラーは、物理特性を通じて、オブジェクトの影響を受けることはありません。
  • 注意: インスペクターでキャラクターコントローラープロパティーを変更することはシーン内でコントローラーを再生成することになります。今あるトリガーはすべて関連がいったん切れますので、再びコントローラーが動くまで OnTriggerEnter メッセージを受け取ることもできません。
Capsule Collider
Character Joint