Unityでカンタンデータベース作成!アイテムや武器などを沢山作ろう!Scriptable Objectの使い方

ころもちゃん

敵や装備みたいな、バリエーションがたくさんあるものは、どうやって作ればいいの??

本記事の内容

・データベースとはなにか?
・データベースScriptableObjectを使おう

目次

データベースを作ろう!

データベースってなに?

ゲームを作っていると、敵・アイテム・装備・スキルなど、同じような機能を持ったパラメータ違いのオブジェクトが複数必要になることがあります。

プログラムの基本的な考え方として、似たようなオブジェクトは抽象化して、共通化する、というものがあります。具体的な例でみてみましょう。
たとえば、「モンスターボール」・「スーパーボール」・「きずぐすり」・「まんたんのくすり」、というアイテムをゲームに実装するとします。

これらのアイテムを抽象化して、同じ括りでまとめてみましょう。

  • アイテムのアイコン
  • アイテムの種類(ボール or 回復)
  • アイテムの名前
  • アイテムの説明
  • 効果値(例えばモンスターボールなら50%、スーパーボールなら70%、きずぐすりなら20、まんたんのくすりなら999)

つぎにこの括りに合わせて、各アイテムを当てはめてみます。画像は公式に怒られたくないので、適当なアイコンを入れています。

アイコン画像種類名前説明効果値
モンスターボールボールモンスターボール低確率で捕まえる50
スーパーボールボールスーパーボール中確率で捕まえる70
きずぐすり回復きずぐすりHPを20回復する20
まんたんのくすり回復まんたんのくすりHPを満タンまで回復する999
アイテムデータベース

この表こそがデータベースです。
アイテム1つ1つをそれぞれ管理するよりも、アイテムデータベースとして一元化すると利点がたくさんあります。

  • ゲーム内にアイテムを追加したい時に、データベースを更新するだけでアイテムを増やすことができます
  • 処理の高速化
  • バグ発生確率の低下(エラー起きたときに1つ1つを修正するのではなく、データベースを修正するだけでよくなる)
  • エクセルやメモ帳などの外部ファイルをデータベースに読み込ませることで、テキストベースで管理が可能。つまり、プロジェクト内の誰でも更新作業が行える。

同じ属性で複数の種類がある、といったものは必ずデータベース化するのがよいでしょう。

Unityにおけるデータベース

ここまでがデータベースの概念についてでした。次に、このデータベースを実際に実装するにはどうしたらいいか、を見てみましょう。

Unityでは、先程のデータベースの表のヘッダ(1行目)に必要な列の内容をScriptable Objectで行います。
作るには以下の手順を行います。
※以下では、ChatGPTを使用しています。使い方はこちらの記事を参照してください。

STEP
ヘッダ部(表の1行目)に属性の一覧(列に何が必要か)を定義し、スクリプト作成

今回は、必要な属性は以下の通りでしたね。

  • アイテムのアイコン
  • アイテムの種類(ボール or 回復)
  • アイテムの名前
  • アイテムの説明
  • 効果値(例えばモンスターボールなら50%、スーパーボールなら70%、きずぐすりなら20、まんたんのくすりなら999)

ではこの内容で、ChatGPTに以下の通りお願いしてみましょう。


返ってきたスクリプトはこちらです。

using UnityEngine;

// アイテムの種類を表す列挙型
public enum ItemType
{
    Ball,   // ボール
    Heal    // 回復
}

[CreateAssetMenu(fileName = "NewItem", menuName = "Inventory/Item")]
public class Item : ScriptableObject
{
    [Header("Item Properties")]
    public Sprite icon;        // アイテムのアイコン画像
    public ItemType itemType;  // アイテムの種類
    public string itemName;    // アイテムの名前
    [TextArea]
    public string description; // アイテムの説明
    public int effectValue;    // 効果値

    // ここに必要に応じてメソッドや追加のプロパティを定義できます
}
STEP
生成したスクリプトを新規作成

では、ChatGPTの生成したスクリプトを、ゲームエンジンUnityで作ってみましょう。
まずは、プロジェクトウィンドウで右クリックして、[C#スクリプトを作成]をします。

次に、作成したスクリプトに、AIの生成したコードを貼り付けて保存します。

これで、データベースの定義は完成です。
次に、データベースの中身を入れていきます。

STEP
行の数分のScriptable Objectにアイテムの設定値を定義

プロジェクトウィンドウに戻って、また右クリック→[作成]→[Inventory]→[Item]を選択します。
この階層は、先程貼り付けた[CreateAssetMenu(fileName = "NewItem", menuName = "Inventory/Item")]
という内容によって変化します。AIによっては名前が違うと思うのでご留意ください。

作成すると、青い箱のマークのオブジェクトが作成されたと思います。これをインスペクタウィンドウで見てみましょう。

先程のデータベースの表のヘッダ部にあたる内容が表示されていますね。これをクリックして各アイテムの内容をセットしていきます。今回はアイテムを4つ作るので、4つのScriptable Objectがあればよい、ということですね。

きずぐすりなら、こんな感じに設定すればよいですね。

これでデータベースの作成が完了です!簡単ですね!

このデータベースを最初に作った上で、実際にアイテムを回復する処理や、ボールを投げる処理を作るときに、このデーベースから対象のアイテムを検索し、効果値を取得して処理を行うことができます。

たとえば、「きずぐすり」というアイテムをプレイヤーが使用する処理を行うときに、「きずぐすり」に該当するアイテムデーベースを検索し、効果値20を取得→プレイヤーのHPを20回復する、という流れになります。

実際にHPの処理を作成する場合は、このデータベースの内容をAIに伝えた上でスクリプトを生成してもらうと、より精度の高いコードを返してくれます。

まとめ

ScriptableObjectを使うと、カンタンにデータベースを作ることが出来ます!ぜひ沢山の要素をゲームに登場させて、ゲームを充実させましょう!

それでは素敵なゲーム制作ライフを!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ゲーム制作の敷居を下げ、もっと多くの人にゲーム作りを楽しんでもらうために、ゲームをカンタンに作る方法を”網羅的に”解説しています。
よかったらブックマークお願いします。

コメント

コメントする

目次