Unityでのステータス管理
前回までの記事で以下のように炎を纏った剣で斬りつける必殺技を作成した。前回までの記事↓
TPSのキャラ移動
ジャンプ
ダッシュ実装
自作キャラを動き回らせる
剣を振る方法
剣コンボ
足が浮く対策
剣の軌跡の作り方
燃える剣の必殺技
せっかく剣で斬れるようになったはいいが、現状では斬っても敵にダメージを与えられない。
敵にダメージを与えるには主人公の攻撃力、敵のHPや防御力といったステータスがまず必要となる。
そこでUnityでのステータス管理のやり方を紹介していく。
ステータス管理・実装目次
ScriptableObject作成ステータス記述
目次にもどる
ScriptableObject作成
ステータス管理方法は色々ある。今回は比較的簡単なScriptableObjectを使う方法について紹介していく。
ScriptableObjectとはゲームオブジェクトに紐付かない独立的なデータコンテナである。
まずは今まで作ってきたスクリプトとは別のスクリプトを作成しよう。今回は名前をcharadataとした。スクリプトの記述は以下の通り。
[CreateAssetMenu(menuName = "MyScriptable/Create charadata")]としてクラスの記述前に属性(Attribute)の指定を行っている。
属性はクラス定義や変数定義の前に[]で囲んで記述する
様々な属性があり、他の変数と区別したり特殊な挙動を実現することが可能。
例えばシリアル化(シリアライズ)の時に使っているSerializeFieldも属性の一つだ。
今回のスクリプトで使っている属性はCreateAssetMenuであり、プロジェクトビューを右クリックして開いたメニューからassetファイルの追加が可能となる。
今回は()内にmenuName = "Data/Create StatusData"と書いた。これはScriptableObjectを作成するパスを記述している。後述するがプロジェクトビューから右クリックでメニューを開きData→Create StatusDataと選択すればassetファイルを作成できるようになる。
public class charadata : ScriptableObjectとしてクラスを指定している。新規作成したスクリプトに記載されているMonoBehaviouではなく、ScriptableObjectクラスを継承している点に注意。
後はpublic string NAME;やpublic int MAXHP;のように作りたいステータス名を変数で指定していくだけでいい。
目次にもどる
ステータス記述
スクリプトの記述を終えたら、ScriptableObjectのファイルを作成してみよう。今回の場合はスクリプトにはmenuName = "Data/Create StatusData"と記述した。よって、プロジェクトビューを右クリックし、Create→Data→Create StatusDataと選択することでassetファイルが作成される。
今回はファイル名はPlayer1とした。選択してインスペクター欄を見よう。以下のようにスクリプトで作ったステータス名が並んでいる。
主人公のステータスを適当に入力していこう。
同じやり方で敵用のファイルを作成し、今回は以下のように適当に記述した。
ステータスを増やしたいならスクリプトで記述を追加して増やせばいい。これでステータス管理についてはひとまず可能になった。
なお、アイテムなどステータス以外でもScriptableObjectは当然役立つ。
例えばシーン切り替えで別のシーンに値を渡すのにも使える。以下の記事でマップ切り替えの方法を紹介しているがその際にもScriptableObjectを使用している。
マップ切り替えの方法
続きの記事は以下。
ScriptableObjectで作ったステータスをどうやって使うのかも紹介するので、ぜひ確認してほしい。
ダメージ判定・処理