学習記事一覧 · Unity

【学習】Unity:アイテム所持とセーブ入門(第1回)― メモリだけの所持:Dictionary で増減

これまでの学習では、変数に値を入れて表示する、といった形でプログラムを動かしてきたと思います。

しかしゲームでは、種類が増えても同じ書き方で表したいデータがあります。典型例が 所持アイテム です。

名前個数 のセットを、たくさん管理する。

今回は、その最小形として Dictionary<string, int> を使い、メモリ上だけで「増える・減る」を体験します(まだ保存はしません)。

シリーズ


今日のゴール

  • ポーションを 3 個鍵を 1 個 のように、名前と個数で管理できる
  • AddItem で増えUseItem で減る(足りないときはメッセージ)
  • Dictionary は「キーと値のペアをまとめる箱」 だと言える

準備

  • 空のシーンと、適当な GameObject(名前例:ItemLab
  • 新規スクリプトを作成し、下記のコードに差し替える

完成コード

using System.Collections.Generic;
using UnityEngine;
public class SimpleItemManager : MonoBehaviour
{
    private Dictionary<string, int> items = new Dictionary<string, int>();
    public void AddItem(string itemName, int count)
    {
        if (!items.ContainsKey(itemName))
        {
            items[itemName] = 0;
        }
        items[itemName] += count;
        Debug.Log(itemName + " を " + items[itemName] + " 個持っています");
    }
    public void UseItem(string itemName, int count)
    {
        if (!items.ContainsKey(itemName) || items[itemName] < count)
        {
            Debug.Log("アイテムが足りません");
            return;
        }
        items[itemName] -= count;
        Debug.Log(itemName + " を使いました。残り " + items[itemName] + " 個");
    }
}

手を動かす(ここ重要)

  1. スクリプトを GameObject にアタッチする
  2. Play して動作を確認する

例:Start で試す

private void Start()
{
    AddItem("ポーション", 3);
    UseItem("ポーション", 1);
}

例:Inspector から試す(任意)

SimpleItemManager[ContextMenu] を付けてメニューから呼ぶ、などでも構いません。


プログラムの流れ

AddItem が呼ばれる

その名前のキーがなければ 0 で初期化

個数を加算してログ
UseItem が呼ばれる

キーがない/個数不足ならログして return

減算してログ

重要ポイント

  • Dictionary<string, int> … キーが アイテム名(文字列)、値が 個数(整数)
  • ContainsKey … まだそのアイテムを持ったことがないか確認する
  • この段階では Play を止めるとデータは消える(メモリ上だけ)ことも、あえて実験してみてください

発展アイデア

  • foreachitems の中身をすべて Debug.Log する(一覧表示の予習)
  • 負の個数にならないよう UseItem 内でガードする(すでにしている場合はスキップ)

次に進む

同じ名前のまとめ方はこれで体験できました。次回は 1 アイテムをクラスにし、将来の 説明文・アイコン などに備えます。

第2回:クラスと List で整理する