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() 関数を介して衝突するオブジェクトに力を適用できます。
一方、プレイヤーキャラクターが物理特性の影響をうけるようにしたい場合は、キャラクターコントローラーの代わりに、リジッドボディ を使用した方がよいでしょう。
キャラクターのメッシュに合うように、Height と Radius を修正できます。人間のキャラクターの場合は、約 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 エリアから、事前設定されたアニメート化や移動するキャラクターコントローラーを示すプロジェクトのサンプルをダウンロードできます。