Character Controller は、主に Rigidbody による物理特性を使用しない、1 人称や 3 人称のプレイヤー制御に使用されます。
プロパティ | 機能 |
---|---|
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 にしておくことをお勧めします。
キャラクターコントローラーの スクリプトリファレンス を参照してください。
Unity 公式サイトの Resources から、事前設定されアニメーション化された、移動するキャラクターコントローラーのプロジェクトサンプルをダウンロードできます。