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 から、事前設定されアニメーション化された、移動するキャラクターコントローラーのプロジェクトサンプルをダウンロードできます。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.