前回RPGで使える便利な機能について紹介しましたが、ScriptableObjectについては具体的な使い方について掘り下げてみようと思います。
別にRPGに限らずとも使用する機会はいくらでもありますが、RPGはScriptableObjectを使う良い例ですので、どんな使い方をするのか紹介したいと思います。
【Unity】RPGにおけるScriptableObjectの使い方
前回ざっくりと紹介しましたが、共有データを格納する際に使用するんでしたね。
例えば、パーティという大きな枠組みがあるとします。全てのRPGに当てはまることではありませんが、基本的にゲームスタート序盤は、主人公1人だったり仲間がいても精々少数人数だと思います。
が、しかし物語が進むにつれて仲間ってどんどん増えていきますよね。戦闘でも最大4人で戦うっていうのがRPGの王道だったりします。
このようなパーティメンバーのデータは、ScriptableObjectを使って1つのアセットにまとめておきたいものです。攻撃力や防御力などといったステータスを共有データとしておくわけです。
キャラクターデータを例にスクリプトを作成する
スクリプトの作成方法は、通常時と同様に「Create」→「C# Script」でOKです。
名前は「CharacterDate」としました。
スクリプトの内容はこんな感じにしました。追加すればまだまだたくさんあると思いますが、HPやMP、攻撃力や防御力などを作りました。
それから、普段デフォルトで継承している「MonoBehaviour」を「ScriptableObject」に書き換えておきましょう。また、スタートメソッドなどは不要なので消しておいてOKです。
CreateAssetMenuを使う事で、アセットメニューからCharacterDataクラスのデータを作成することが出来ます。
もちろん、新しいスクリプトを作成してそこからインスタンス化を行いデータを指定することも可能です。この場合はゲッターやセッターメソッドを作っておくと使い勝手が良いです。
スクリプトを保存したら「Asset」→「Create」の中に「CreateCharacterData」という項目が作成されているはずなのでクリックします。
すると、アセットファイルが作成されるので選択してみます。
先ほど作成したフィールドが表示されましたね。ここにパーティメンバーのステータスを入力していくことになります。
パーティメンバーの数に応じて先ほどと同じ手順でアセットファイルを作成していけば良いですね。
アイテムなども、ゲームの内容によって物凄い種類になると思いますので、是非ScriptableObjectを有効活用してみましょう。