自作ゲームリメイク中-CharacterMotor編-(Unity制作)
前回から少し機能を追加しました。
自作ゲームリメイク中-ImageEffect編-(Unity制作) - Redhuのゲーム開発Fragments
具体的には
- UI(仮)の配置
- 着地モーションの追加
- 移動によるカメラの遅延追従機能
- 旋回によるカメラ位置の切り替え
といったところです。(細かい点としてマウスカーソルの隠蔽拘束
着地モーションは地味ながらも、有ると無いとではメリハリがだいぶ変わります。
いずれドッスン着地硬直つくってやるからなぁ〜みてろよぉ〜みてろよぉ〜
さて、今回はこの機体の動かし方について、どのように制作したか説明したいと思います。アニメーションとの連動はまた次回。
CharacterMotor
上記より、キャラクターモーター・FPSインプットコントローラーというものを使用しています。
それぞれ簡単に言うと、キャラクターコントローラーを使って着地や移動処理を行うスクリプト、入力情報をモーターに受け渡すスクリプトです。
上記の数値はそれぞれちょっと変更してあるのでデフォ数値じゃないです。
気持ちいい動きになるように各々で変更してみましょう。
にしてもいろんなステータスがありますが、惑わされる必要は無し。
- Max Forward Speed
- Max SideWays Speed
- Max BackWards Speed
それぞれ、前進、横移動、後退時のスピード用パラメータです。
それぞれの方向で移動力を変えたいときは違う数値入れましょう(自分は同じ)
- Slope Speed Multiplier
坂道での速度変化ぐあいのカーブ・・・っぽいですね(よくわかっていないのでデフォ値)
- Max Ground Acceleration
- Max Air Acceleration
- Gravity
それぞれ、地上での加減速度、空中での加減速度、落下加速度 ですね。数値がデカければそれだけ設定速度に素早く近づきます。
- Max Fall Speed
最大落下速度。いくら落ち続けてもこれ以上の速度で落下することは無い上限値です。
以上がキャラクターモーター内のMovement内変数(?)です
外から弄るときはキャラクターモーターを何らかの方法で取得しておいて
(例えばMotor = GetComponent<CharacterMotor>();)
Motor.movement.maxForwardSpeed = hogehoge;
とかで弄ることが出来ます。(自分はステータス用にスクリプト用意して弄ってます)
次。Jumpingのコーナー。お察しの通りジャンプ行動関係のパラメータです。
Enableは別段説明する必要もないくらい。ジャンプが出来るかどうかの設定です。
- Base Height
- Extra Height
それぞれ、ジャンプボタンをチョン押ししたとき最低跳ぶ上昇力。押し続けた時さらに稼げる上昇力です。上昇力はGravityの下方向加速の影響受けてるので必ずしも数値どおりの上昇にはなりません。
- Perp Amount
- Steep Perp Amount
それぞれ、坂道からジャンプしたときのジャンプ方向影響値、キツイ坂道からジャンプした時の方向影響値。ッて感じのパラメータ。1に近づくほどジャンプ方向が地面の傾斜の影響をうけるようになります。
続いてMoveingPlatformのコーナー
動く足場に乗ってる時に関するコーナーです(弄ってないので適当感)
Enableのチェックを外すと動くものに乗ってても自分は動きません。絶対的存在です。チェックを入れると次の項目からふるまいを選びます
- None
乗っているものも動きの影響を受けない。慣性の法則ガン無視。
- InitTransfer
影響は受けるけどまあ、ささいだ。
- PermaTransfer
飛び立ってから着地するまで影響をうけるぜ。
- PermaLocked
飛び立ってからも影響をうけるぜ(!?)足場に親子付けされたような動き、かな?
続いてSlidingのコーナー。斜面を滑り落ちている時に関するパラメーターです(自分は全部デフォ)
- Sliding Speed
読んで字の如し、滑り落ちる速度です
- Sideway Control
滑り落ちている時、横方向にどれだけ足掻けるかの値です
- Speed Control
滑り落ちている方向へ向かった時の速度追加率です。値が低いほど速度追加がなくなります
以上、キャラクターモーターがデフォで表示してあるパラメーターたちでした。
最後、Groundedというのがありますが、これは「今自分が地面にいるか」の設置判定にモーターが使っているもので、わかりやすいように自分が表示させているだけです。
以上、キャラクターモーターでした。
キャラクターモーターとFPSインプットコントローラーをオブジェクトに持たせてやれば、そのオブジェクトをキー入力で操作することが出来るようになります。
最後に便利機能の紹介。
キャラクターモーター内部では色んな判定をしていますが、その中で便利に使えるものを2つ。
ひとつは「OnJump」
ジャンプした瞬間を判定しています。
もうひとつは「OnLand」
着地した瞬間を判定しています。
落下し始めた時を判定しています。
それぞれのタイミングでSendMessageがそれぞれの名前で発生しているので、他のスクリプトでOnJump関数やOnLand関数を用意しておけば、ジャンプや着地時のSE再生やアニメーション遷移トリガーなどに使いやすいはずです。「状態」ではなく「瞬間」の判定なのも使いやすい。
次回はこれと合わせてアニメーションについて。