Unityでキャラクターを動かしてみた その2
こんにちは🍎
前回一応ながら歩き回る所まで作成しましたが、機能的にはとてもとても最低限な物だったので今回はそこからもう少しちゃんとしたものに作りこんでみました。
今回使用してるScript一覧です。(※一部省略)
StageCharacter.cs (キャラクター機能の本体)
StageCharacter_Animation.cs (キャラクターの表示を管理する処理)
StageCharacter_Move.cs (キャラクターの移動を管理する処理)
まずざっとキャラクターの機能を機能別に分けました。
別に同じキャラクター関連の処理だし変数の管理も楽だしStageCharacter.csに処理全部書いていいんじゃない?🐫って思うかもしれませんが、後々色んな機能を追加していく中で結構ボリューム増大してくるので可能な限り分けた方がいいと思います。
アニメーションの処理と移動の処理のソースコード見てもらえばわかりますが、まだ大した事してないこの段階で双方150行くらいあるので分けないと色んな機能が混在してきて確実にスパになります。🍝
後機能的に分けることで他のプロジェクトなどで移動処理だけ欲しいなってなった際に、そのままか場合によっては数行の書き換えで使えたりするのでオススメです。
StageCharacter_Animation.cs
上記で説明していますがキャラクターの表示に関してまとめた機能になります。
一部StageCharacter_Moveに依存しているので完全に独立した物ではありませんが、移動状態や待機状態等を判断してキャラクターのアニメーションの切替を行えます。
アニメーションの登録に関してはあらかじめプレハブ化したMeshUvControl_Add_Animationで設定したアニメーションパターンを持つオブジェクトをStageCharacterにあるanimationWaitなどの変数にエディタ上で設定していただければ生成時に自動的にセットされます。
StageCharacter_Move.cs
こちらは前回のStageCharacter.csでやってたことを移したもので前回との相違点は接地の状態を認識したり必要以上に加速したりしないようになってます。
なんで接地判定が必要かというと、ジャンプを行う動きがあった場合に今ジャンプできるか?の確認をしないと空中を蹴って飛び続けることができちゃいますよね、(六式みたいな)それもを防止するのも大事ですが、接地してる確認というのはアクションゲームなどで地面を歩いてる時の減速と空中を移動してる時の減速で差をつけることができるので、ゲーム内の動きに微妙なリアルさを付けることができます。
地上の減速処理のみ
地上と空中で減速の速度を切り替え
見ていただけるとお分かりになりますが接地判定を取って地上と空中で減速を切り替えないとだいぶ違い出ますよね。(この減速に関して一応Rigidbodyの抵抗の設定とコライダーの摩擦設定で何とかする手もありますが、自分的なやりやすさ優先で今回は上記の方法で実装しています。)
あとそれに合わせてキャラクターの地形判定用のコライダーはCapsuleColliderに変更しました。
こちらは主に斜めな床とかや小さい段差の障害物などを上ったり乗り越えたりする際にBoxColliderだとガチっとハマってしまうのでハマらないで多少乗り越えられるように球形な曲線を利用した感じです。
こんな感じでぬるっと超えたりできます。
っと、ちゃんとしようとするとまだまだやる事ありますが、とりあえずここら辺で一度まとめとかないと膨大な記事になってしまうので今回はこの辺で、また次回詰めていこうと思います。
実際動作するアセットフォルダも置いておきますので、アセットフォルダを空プロジェクトに入れれば確認できます。
2022_03_01_Assets.zip (447.08kB)
ダウンロード