【再編集】Unity開発メモまとめ「CharacterMotor」

※本記事は旧ブログの記事を再編集し、再度投稿したものです。
 一部内容に差異がある可能性がありますので、予めご了承ください。

CharacterControllerのパラメータ

CharacterControllerのパラメータについてまとめたものです。
Unity公式にもリファレンスがあるので、合わせて確認すると分かりやすいと思われます。

・Slope Limit
どのくらいの傾斜まで登れるかを設定します。
数値がそのまま限界角度になるようです。

・Step Offset
「指定された値よりも地面に近い場合登る」と書いてあります。
要するに階段とかを登るためのものですね。
あまり大きくしすぎると絶壁すらもホイホイ登ってしまうため注意が必要です。

・Min Move Distance
この値未満の移動ができなくなる・・・らしいです。
自分が検証した感じだと動くか動かないかの二極だったので、デリケートな気がします。
公式にも「ほとんどの場合は0でいい」と書いてあるので、いじらなくてよさそうです。

・Skin Width
コライダーの位置はそのままに、地面との間を設定するもの(?)
公式曰く「動作させるための重要なパラメータ」らしいですが、自分のキャラではよく分かりませんでしたorz
「Radiusの10%程度にしておくといい」とあるので、0.05くらいにしておきます。

・Center
コントローラのカプセルコライダーの位置です。
キャラクターの旋回には影響しないそうです。

・Radius
カプセルコライダーの大きさ(半径)です。

・Height
カプセルコライダーの高さです。

CharacterMotorのパラメータ

すごくパラメータが多いです。
移動やジャンプの挙動に大きく影響するので大切な部分でもあります。

・Can Control
CharaCterMotorの有効/無効を切り替えます。
これだけを無効にすると、移動・ジャンプが行えなくなり、入力した方向への回転のみになります。

・Use Fixed Update
そのまま捉えると「FixedUpdate関数を使うかどうか」といった感じでしょうか。
前に検証してもよく分からなかったですorz

Movement

移動に関するパラメータです。
デフォルトではWSで前後、ADで左右に移動ができます。
ゲームパッドを接続している場合、左スティックで移動ができます。

・Max Forward Speed
前方への移動速度です。
PlatformInputControllerを使っている場合、入力方向へ旋回するので、実質全方向への移動速度になります。

・Max Sideways Speed
平行移動時の移動速度です。
PlatformInputControllerのAutoRotateをOFFにしている場合、これが平行移動速度として適用されます。

・Max Backwards Speed
後方への移動速度です。
PlatformInputControllerのAutoRotateをOFFにしている場合、(略

・Slope Speed Multiplier
坂などの斜面に対する速度の減少度合いを設定します。
縦軸が速度、横軸が高さ(?)だと思われます。
例えば線を一定にすると、(SlopeLimit以内の傾斜なら)どんな坂でも一定の速度で登れるようになります。

SlopeLimitと似ていますが、あちらは「滑る斜面の角度」に対し、こちらは「坂に対する減少速度」です。
使ってみると分かりますが、似て非なるもの・・・というよりほぼ別物です。

・Max Ground Acceleration
「Acceleration」は加速度とかそんな感じの意味です。
移動入力時の加速度を設定します。
もっと具体的にいうと、軸の入力値が0~1の間の時の速度・・・だと思います。
ゲームパッドでスティックを少しだけ倒すと分かりやすいです。

この値とPlatformInputControllerの「MaxRotationSpeed」の値を大きく設定すると、向きと逆方向に入力した際のキレがよくなります。
あまり高くしすぎると初速度が早すぎて操作しにくくなりそうなので程々で。

CharacterControllerはPhysicsMaterialの影響を受けませんが、この値を小さくすると「氷の上で滑る」ような感じにできます。
その場合は判定を作り、EnterとExitでこの値を変化させるのがいいと思います。

・Max Air Acceleration
Max Ground Accelerationの空中版です。
この値を大きくすると、空中でも機敏に動けるようになります。
逆に小さくすると空中制御がしにくくなり、ファミコンのアクションゲームのような癖のある挙動になります。

・Gravity
そのまま「重力」です。
ゲーム的に言うと落下速度ですが、どちらかというと重力加速度(?)な気がします。
これ単体で大きくしても歪な挙動になるので、下のMaxFallSpeedと合わせて調整しましょう。

ちなみにProjectSettings→PhysicsのGravityは適用されないようです。
まあ両方が作用したらいろいろと面倒になりそうなので、別々でいいと思います。

・Max Fall Speed
Fallは「落下」とかそういう意味ですね。
となれば「最大落下速度」とかそんな感じでしょうか。
Gravityと合わせて、ゲーム内容に合った値に調節しましょう。

Jumping

ジャンプに関するパラメータです。
デフォルトでは接地状態でスペースキーを押すことでジャンプが行えます。

・Enabled
ジャンプの有効/無効を切り替えます。

・Base Height
基準となるジャンプの高さです。
ジャンプ入力すると、最低限この高さまでは飛びます。
実際は重力とかもあるので数値通りの高さではないです。

・Extra Height
ジャンプ入力し続けることで飛べる高さです。
BaseHeight分の高さを飛んだ後もスィーっと飛び続けます。
BaseHeightを1、ExtraHeightを100にした状態でスペースキーを押し続けると分かりやすいです。

・Perp Amount
「Perp」は垂直という意味です。
坂の上でジャンプした時、どの程度斜めにジャンプするか設定します。
斜角に対し、0だと垂直(影響なし)、1だと直角、0.5はその間です。

・Steep Perp Amount
「Steep」は急勾配という意味です。
PerpAmountの急斜面版みたいな感じでしょうか。
デフォルトだと0.5なので、壁に密着してジャンプすると変な方向に飛んだりしますが、これを0にすればなくなります。

Moving Platform

地面が動いている場合の挙動を制御します。

・Enabled
MovingPlatformの有効/無効を切り替えます。
これを無効にすると、動く床の上でも位置が移動しません。
スーファミのアクションゲームでよくありそうな感じですね。

・Movement Transfer
「None」
ジャンプ時の床の影響を受けません。
横に動くリフトからジャンプしても垂直に飛びます。

「InitTransfer」
ジャンプ時に床の速度を参照し、停止するまで速度が掛かります。
「動く床だから考慮するけど、そんなに飛ばしたくない」時にお世話になりそうです。

「PermaTransfer」
ジャンプ時に床の速度を参照し、着地するまで速度が掛かります。
デフォルトはこれで、慣性的にもこれが一番自然な形でしょうか。

「PermaLocked」
ジャンプした床の動きに合わせて移動します。
往復するリフトの上でジャンプした場合、リフトからはみ出ずに連動して動きます。

Sliding

スライダーの有効/無効を・・・と言いたいところですが、ONとOFFで何も変わりませんでした。
他は効くのにこれだけ効かないというのも考えにくいところですが・・・。
もしかしたらスクリプトからの制御を無効にする・・・のかもしれません。

・Sliding Speead
斜面から自動的に滑り落ちる際の速度です。

・Sideways Control
斜面に対して垂直方向に移動する際の速度です。
変に難しい表現をしている気がしますが、つまり「滑っている際の左右への移動速度」ですね。

・Speed Control
斜面から下り方向へ移動入力した際に滑る速度です。
この値が低いと下り方向へ入力しても速度がほとんど変わりません。
所謂スライダー系のステージで、プレイヤーの入力で調節できるようにする場合に使えそうです。

PlatformInputControllerのパラメータ

プレイヤーの回転を担うスクリプトで、三人称視点の場合に使用します。
パラメータが少ないので、モーターほどきつくはないかと思います。
ちなみに一人称視点(所謂FPS)の場合は「FPSInputController」を使いますが、本記事では扱いません。

・Auto Rotate
回転の有効・無効を切り替えます。
無効にするとMovementのMaxSidewaysSpeedとMaxBackwardsSpeedが有効になります。

・Max Rotation Speed
プレイヤーのY軸の回転速度を設定します。
ロボットアクションによくある「旋回速度」とほぼ同じだと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*