🎉

Unity初心者でも簡単!敵ステータスのデータベースを構築!? 「ScriptableObject」で管理する方法とは。

2024/11/29に公開

自己紹介

閲覧ありがとうございます。はじめまして、ゲーム開発所RYURYUの"りゅうや"と申します。

❏ ゲーム開発ランキング【 1位 】実績多数
❏ ココナラ総販売【 200件達成 】
❏ GC甲子園2022・東京ゲームショウ2023など出展経験あり

ゲーム開発所RYURYUとは

Unityを駆使した先進的な「ゲーム・VR・メタバース開発」や「オンライン教育サービス」を展開するゲームスタジオです。

Zennで5日間でFPSゲームをゼロから開発する本を執筆しました!!

どこでもUnity教室「5日間でFPSゲームをゼロから完成!」初心者向けの実践型講座
【2025年版 / Unity 6対応】
https://zenn.dev/ryuryu_game/books/fd28de9d8e963a

ScriptableObjectとは?

ScriptableObjectはUnityでデータ管理を効率化するための特殊なオブジェクトです。データベースのようにデータを管理・格納するための仕組みとして利用されます。そのため、ScriptableObjectを活用してデータベース的な役割を果たすことが可能です。

主なメリット

  • データとロジックの分離
    データをコードから切り離し、管理しやすくなります。
  • 再利用性の向上
    同じデータを複数のオブジェクト間で使い回すことで冗長性を削減できます。
  • パフォーマンスの向上
    メモリ効率が良く、ゲームの負荷を軽減します。

ScriptableObjectのテンプレート

以下は基本的なテンプレートです。これを元に様々なデータを管理できます。

変数の補足
• fileName: 作成されるアセットのデフォルト名
• menuName: エディタで右クリックメニューに表示される名前

using UnityEngine;

[CreateAssetMenu(fileName = "ファイル名", menuName = "メニュー名", order = 1)]
public class NewData : ScriptableObject
{
    // ここに変数を定義します
}

データベースの構築

ここでは、ScriptableObjectを使って、敵キャラクターのステータスとスキルを管理するデータベースを作成します。

まずは、敵のステータスを管理するデータベースを作成します。

敵キャラクターのステータス (EnemyStats)
・敵の名前
・体力
・攻撃力
・速度
・画像
・スキルの配列 (スキルのデータベース)

敵のスキル (Skill)
・スキルの名前
・スキルの詳細説明
・ダメージ量
・クールダウン

実際のコードで理解する

敵キャラクターのステータス (EnemyStats)

using UnityEngine;

[CreateAssetMenu(fileName = "NewEnemyStats", menuName = "ScriptableObjects/EnemyStats", order = 1)]
public class EnemyStats : ScriptableObject
{
    public string enemyName;   // 敵の名前
    public int health;         // 体力
    public int attackPower;    // 攻撃力
    public float speed;        // 移動速度
    public Sprite enemySprite; // 敵の見た目
    public Skill[] skills;     // 敵が持つスキルの配列
}

敵のスキル (Skill)

using UnityEngine;

[CreateAssetMenu(fileName = "NewSkill", menuName = "ScriptableObjects/Skill", order = 2)]
public class Skill : ScriptableObject
{
    public string skillName;   // スキル名
    public string description; // スキルの説明
    public int damage;         // スキルのダメージ
    public float cooldown;     // スキルのクールダウン時間
}

データの作成方法

1.Assetsフォルダで右クリック

エディタのAssetsフォルダ内で右クリックします。

2.Create > ScriptableObjects > NewDataを選択

右クリックメニューから「Create > ScriptableObjects > NewData」を選びます。

3.アセットが生成される

Assetsフォルダに「NewData」という名前のアセットが作成されます。このアセットを選択すると、インスペクタでデータを設定できるようになります。

4.最後にデータベースにデータを記入して完了

データの利用方法

以下のスクリプトを用いて、作成した敵データをゲームで利用できます。

1. EnemyStatsの作成

引き続き、Unityエディタの「Create > ScriptableObjects > EnemyStats」から複数の敵キャラクターを作成し、それぞれに名前、ステータス、スキルを設定します。

2. EnemyManagerの設定

シーンに新しい空のゲームオブジェクトを追加し、EnemyManagerスクリプトをアタッチします。インスペクタで、EnemyDatabaseフィールドに作成したEnemyStatsアセットをドラッグ&ドロップして割り当てます。

3. ゲームの実行

ゲームを実行すると、EnemyManagerスクリプトのStart()メソッドが実行され、enemyDatabaseに登録された敵キャラクターのデータがConsoleに表示されます。

using UnityEngine;

public class EnemyManager : MonoBehaviour
{
    public EnemyStats[] enemyDatabase;  // 敵データベース (複数の敵を格納する)

    void Start()
    {
        // データベース内の全ての敵を出力する
        foreach (EnemyStats enemy in enemyDatabase)
        {
            Debug.Log("敵の名前: " + enemy.enemyName);
            Debug.Log("体力: " + enemy.health);
            Debug.Log("攻撃力: " + enemy.attackPower);
            Debug.Log("移動速度: " + enemy.speed);

            // スキルを持っている場合、そのスキルも出力する
            if (enemy.skills != null && enemy.skills.Length > 0)
            {
                foreach (Skill skill in enemy.skills)
                {
                    Debug.Log("スキル名: " + skill.skillName);
                    Debug.Log("ダメージ: " + skill.damage);
                }
            }
            else
            {
                Debug.Log("スキルがありません。");
            }
        }
    }
}

まとめ

この記事では、UnityのScriptableObjectを用いて敵キャラクターのステータスやスキルを管理する方法を紹介しました。
• データの分離と再利用が容易
• 開発効率とメンテナンス性の向上

ScriptableObjectを活用することで、複雑なゲームシステムも効率的に管理可能です。
ゲーム開発におけるデータ管理の改善にぜひお役立てください!

有料本

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a


Unityをもっと学びたい“あなた”へ 『どこでもUnity教室』

Unityを独学しているけれど、情報収集に時間がかかり、孤独や不安を感じていませんか?
「どこでもUnity教室」は、そんなあなたのために作られたオンライン学習コミュニティです。

初心者から中級者までを対象に、独学では難しいスキル習得をサポートします。
講師や仲間と一緒に学びながら、分からないことはすぐに解決できる環境をご用意しました。
孤独や情報過多の不安を解消し、効率よく次のステップへ進みましょう!

どこでもUnity教室の特徴

  • 無料で気軽に始められる!
    初心者も中級者も歓迎!仲間と一緒に学びましょう。

  • 作業通話ができるボイスチャンネル
    独学の孤独を解消して、効率よく学べます。

  • すぐに質問できる安心サポート
    質問を投稿すればすぐに解決!他の参加者や講師が迅速に対応します。

  • オンライン教材を順次公開予定
    実践的な課題でスキルを磨ける教材が続々登場します。

独学に限界を感じていませんか?

ChatGPTやインターネットを使えば情報は簡単に手に入りますが、それだけでは「知っているけどできない」第2段階で止まってしまいます。

スキル習得の「第2段階」とは?

「第2段階」は、自分の弱点を認識する重要なステップです。この段階では、

  • 「やりたいことがわかるけど、どう実現するかわからない」
  • 「スクリプトを書いてみたけど、うまく動かない」
    といった悩みに直面します。

「どこでもUnity教室」で第2段階を突破!

「どこでもUnity教室」は、あなたが第2段階を効率よく突破し、次のステップに進むための環境を提供します:

  • 質問しやすい環境:気軽に質問して、すぐに問題を解決!
  • 安心の実践課題:失敗を恐れず挑戦できるステップアップ型の課題。
  • 的確なフィードバック:つまずきポイントを明確にして次のステップへ!(有料プラン予定)

無料で始められるので、まずは参加して学びを加速させましょう!

参加はこちら!

「どこでもUnity教室」Discordサーバーは2024年12月2日スタート!
無料で参加できるこの機会をお見逃しなく!

❏ Discordサーバーに参加する ❏

https://discord.gg/AhxnbR4D

一人で悩む必要はありません。あなたの成長を全力でサポートする仲間と環境が、ここにあります!

Discussion