Unity Asset Storeから無料でダウンロードできる「Prototype Hero Demo」には
- キャラクターの画像とジャンプしたときなどの演出の画像
- 動かすためのアニメーション
- 動かすためのC#スクリプト
- タイルマップのステージ
などなどアクションゲームを作りたいけどよくわからない人が理解するべき内容が最小構成で入っています。
この最小構成っていうのがポイントで、下手にいろいろなことができると何がなんだかよくわからなくなってしまう人も多いと思うんですよね。
なので何がどうなってそう動いているかを把握するためには実はかなりいい教材なんじゃないかなと思って今回記事にしてみようと思いました。
Demoの実行の仕方
詳細な説明は省きますが、AssetStoreからPrototype Hero Demoをダウンロードし、Package ManagerからImportすると、ProjectのAssetsにインポートされます。

その中に「Demo」というシーンが含まれるので実行するとHierarchyに中身が表示されます。
PrototypeHeroがキャラクターに関するオブジェクトになります。

選択した状態でInspectorをみるとスクリプトやAnimator、下にスクロールしたらRigidbodyやBox colliderが使われていると思いますが、ほぼどんなゲームでも使われるものなのでよく理解をする必要があります。

実行ボタンを押すと次のような簡単なアクションゲームが動きます。

最低限理解が必要な箇所
ボタンが入力された時にどのように動くのか、そもそもキャラが動くために必要な条件が書かれているのが「PrototypeHeroDemo.cs」。
Unityでは基本的にC#でプログラムを書くことになるので、最低限理解しておくべき部分でしょう。
だいたい160行くらいのプログラムになっています。

一つずついきましょう。
class
まず「public class PrototypeHeroDemo : MonoBehaviour」ですが、MonoBehaviourというクラスを継承してPrototypeHeroDemoというクラスを作りますよ、ということになります。
MonoBehaviourや継承、クラス、以降細かい部分については端折りますが、調べればいくらでも情報があります。近いうちに体系的にまとめてみたいとは思っています。
SerializeField
Header(“Variables”)から数行書かれている[SerializeField]の部分についてはinspectorに表示されている項目と一致すると思います。


変数名(m_maxSpeed)とMax Speedで表記が違うように見えますが、これはunity側が勝手に書き換えています。
試しに自分でもパラメータを追加してみると次のように変化したのがわかります。


publicとprivate

このあとで使う変数を宣言します。
例えば一番上はAnimator型の変数m_animatorを宣言しています。
ちなみにここでpublicを宣言すると、Inspectorに変数が表示されます。
ならSerializeFieldなんてわけわからないものを書かないでpublicでいいじゃんとなりそうですが、publicだと好き勝手にどこからでも扱えてしまうので、あとあと結構問題になる可能性が高まります。
目的が「Inspectorにパラメータを表示したい」のであればpublicは書かないほうが良いでしょう。
void Start ()
プログラムの最初に一度だけ呼ばれる関数です。いつどの関数が呼ばれるのかはライフサイクルとしてまとめられています。
UnityではStartの中に書いたものは実行したときの初めのタイミングで一度だけ実行されるので、一度だけ実行したい処理を入れておきます。
例えば
m_animator = GetComponent<Animator>();
であればComponentのAnimatorの部分を操作することが出来ます。Animatorにこう動いてほしいという処理を後で使うためにここで実行しておくのです。
必要なものをここで準備するイメージ。

void update()
Update は、 1 フレームにつき 1 度呼び出されます。これは、フレームのアップデートの主となる関数です。
https://docs.unity3d.com/ja/2021.2/Manual/ExecutionOrder.html
地面にいるかどうかを判断したり、ボタンが入力されている時にジャンプや走ったりなどの動作を判断する箇所です。
ここの書き方を変えると動きが良くなったり悪くなったりと遊び方に大きく関係してくる部分です。
自分で色々と変更することが一番理解が早まると思います。
Animator
特定の状態のときにAnimationが動くようにAnimatorを設定します。
ややこしいですが、Animationはパラパラ漫画でAnimatorはそれを管理してどのように表示するかを決めるものといったところでしょうか。

このようにIdle(動いていない状態)から走りはじめ→走っている状態→止まる時といったように流れを設定してこの状態を動作の度に繰り返し実行しています。


例えば走る時、Animatorに状態をセットします。ここではAnimStateに1をセットしています。
Transitionの「Idle→RunStart」のConditionはAnimStateが1で地面に接している状態になって表現されます。

まとめ
- Prototype Heroは2Dアクションのキャラの動かし方の基本がタダで学べる
- C#のスクリプトやAnimatorの最小構成がわかる
ちょっとした動きにこれだけのものが必要と捉えるか、これだけでこんなことができるのかと捉えるかはあると思いますが、最低限必要なものを理解できると他の部分の理解にもつながるので少しずつ勉強していけるといいですね。