ScriptableObjectを使ったキャラクターデータ管理入門
はじめに
Unityで多数のキャラクターやスキルを扱う場合、ScriptableObjectを用いてデータを管理する手法がおすすめです。
これにより、エディタ上で直感的にデータ編集が可能となり、プログラム内で簡単に参照できます。
基本的なデータ構造の例
CharacterData ScriptableObject
1体のキャラクターに対応するデータ用ScriptableObject。
ここでは、キャラクター名、最大レベル、スプライト画像、スキルデータへの参照などを持ちます。
[CreateAssetMenu(fileName="CharacterData", menuName="CharacterData")]
public class CharacterData : ScriptableObject {
public string characterName; // キャラクター名
public int maxLevel; // 最大レベル
public Sprite characterSprite; // キャラクターの画像
public SkillData skill; // キャラクター固有のスキル参照
}
SkillData ScriptableObject
スキルごとのデータ用ScriptableObject。
スキル名、発動時アニメーション、エフェクトPrefabなどを定義します。
[CreateAssetMenu(fileName="SkillData", menuName="SkillData")]
public class SkillData : ScriptableObject {
public string skillName; // スキル名
public AnimationClip skillAnimation; // スキル発動時アニメ
public GameObject skillEffectPrefab; // スキル発動時のエフェクト
}
MasterData ScriptableObject
ゲーム内に存在する全キャラクター情報をまとめたScriptableObject。
[CreateAssetMenu(fileName="MasterData", menuName="MasterData")]
public class MasterData : ScriptableObject {
public List<CharacterData> characters;
}
MasterDataを1つ用意し、ProjectビューでCharacterDataを複数作成して、このcharactersリストに格納します。
開発フロー例
1. スキルデータ作成
SkillDataを作成し、スキル名・アニメーション・エフェクトなどをInspectorで設定します。
2. キャラクターデータ作成
CharacterDataを作成し、キャラクター名や最大レベル、SkillDataへの参照を設定します。
3. MasterData設定
MasterDataを作成し、charactersリストに上記で作成したCharacterDataをまとめます。
こうすることで、MasterData一つで全キャラ情報を一元管理できます。
キャラクター情報を取得するサンプルコード
MasterData内から、指定した名前のキャラクターを取得する例です。
public class CharacterDatabase : MonoBehaviour {
public MasterData masterData; // Inspectorでアサイン
public CharacterData GetCharacterByName(string name) {
foreach (var character in masterData.characters) {
if (character.characterName == name) {
return character;
}
}
return null; // 見つからなかった場合nullを返す
}
}
このGetCharacterByNameメソッドを使うと、たとえば「Pikachu」という名前のキャラを取得したい場合:
CharacterData pikachuData = characterDatabase.GetCharacterByName("Pikachu");
if (pikachuData != null)
{
// pikachuDataからスキルやスプライト情報が取得できる
Debug.Log("Max Level: " + pikachuData.maxLevel);
}
類似記事
Unityをもっと学びたい“あなた”へ 『どこでもUnity教室』
Unityを独学しているけれど、情報収集に時間がかかり、孤独や不安を感じていませんか?
「どこでもUnity教室」は、そんなあなたのために作られたオンライン学習コミュニティです。
初心者から中級者までを対象に、独学では難しいスキル習得をサポートします。
講師や仲間と一緒に学びながら、分からないことはすぐに解決できる環境をご用意しました。
孤独や情報過多の不安を解消し、効率よく次のステップへ進みましょう!
どこでもUnity教室の特徴
-
無料で気軽に始められる!
初心者も中級者も歓迎!仲間と一緒に学びましょう。 -
作業通話ができるボイスチャンネル
独学の孤独を解消して、効率よく学べます。 -
すぐに質問できる安心サポート
質問を投稿すればすぐに解決!他の参加者や講師が迅速に対応します。 -
オンライン教材を順次公開予定
実践的な課題でスキルを磨ける教材が続々登場します。
独学に限界を感じていませんか?
ChatGPTやインターネットを使えば情報は簡単に手に入りますが、それだけでは「知っているけどできない」第2段階で止まってしまいます。
スキル習得の「第2段階」とは?
「第2段階」は、自分の弱点を認識する重要なステップです。この段階では、
- 「やりたいことがわかるけど、どう実現するかわからない」
- 「スクリプトを書いてみたけど、うまく動かない」
といった悩みに直面します。
「どこでもUnity教室」で第2段階を突破!
「どこでもUnity教室」は、あなたが第2段階を効率よく突破し、次のステップに進むための環境を提供します:
- 質問しやすい環境:気軽に質問して、すぐに問題を解決!
- 安心の実践課題:失敗を恐れず挑戦できるステップアップ型の課題。
- 的確なフィードバック:つまずきポイントを明確にして次のステップへ!(有料プラン予定)
無料で始められるので、まずは参加して学びを加速させましょう!
参加はこちら!
「どこでもUnity教室」Discordサーバーは2024年12月2日スタート!
無料で参加できるこの機会をお見逃しなく!
❏ Discordサーバーに参加する ❏
一人で悩む必要はありません。あなたの成長を全力でサポートする仲間と環境が、ここにあります!
Discussion