Character Controller は,Rigidbody 物理特性を使用しない 3 人称または 1 人称のプレイヤー制御も主に使用されます。
Property: | 特徴: |
---|---|
Height | キャラクターの Capsule Collider の高さ。 この値を変更すると,正負の方向で Y 軸に沿ってコライダが拡大縮小されます。 |
Radius | カプセル コライダのローカルの半径。 これは基本的にコライダの幅となります。 |
Slope Limit | コライダが,示された値以下の勾配のみを登るよう制限します。 |
Step Offset | 示された値よりも地面に近い場合にのみ,キャラクターが階段を登ります。 |
Min Move Distance | キャラクターが示された値未満で動こうとしても,全く移動しません。 ジッタを減らすのに使用できます。 ほとんどの場合,この値は 0 のままにしておいてください。 |
Skin width | 2 つのコライダが,Skin Width と同じ深さで互いに突き抜けます。 Skin Wdith が大きくなると,ジッタが減ります。 Skin Width が低いと,キャラクターが動けなくなる場合があります。 Radius の 10% にこの値を設定しておくとよいでしょう。 |
Center | これにより,ワールド スペースでカプセル コライダが相殺されますが,キャラクターがどのように旋回するかには影響しません。 |
従来の Doom 形式の 1 人称制御は物理的に現実的ではありません。 キャラクターは,時速 90 マイルで走り,すぐに停止し,急旋回します。 これはあまり現実的でないため,剛体と物理特性を使用し,この動作を作成するのは,非実践的で,感じが悪くなります。 これを解決するため,専用のキャラクター コントローラを使用します。 これは単にカプセル型の Collider で,スクリプトからある方向に移動するよう指示します。 コントローラは,移動を実行しますが,衝突により制約されます。 壁に沿って滑り,( Step Offset よりも低い場合)階段を登り, Slope Limit 内で勾配を登ります。
コントローラは,それ自体への力には反応せず,自動的に剛体を離しません。
キャラクターコントローラでリジッドボディまたはオブジェクトを離したい場合は,スクリプティングを通じて,_OnControllerColliderHit()_関数を介して衝突するオブジェクトに力を適用できます。
一方,プレイヤー キャラクターが物理特性の影響をうけるようにしたい場合は,キャラクター コントローラの代わりに,Rigidbody を使用した方がよいでしょう。
キャラクターのメッシュに合うように, 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 にしておくことをお勧めします。
キャラクター コントローラのスクリプト リファレンス の リンク を参照してください。
当社ウェブサイトの Resources エリアから,事前設定されたアニメート化および移動するキャラクター コントローラを示すプロジェクトのサンプルをダウンロードできます。