クラフト作業台
CoddyのUnityジャーニー「Unityのゲームアーキテクチャ」セクションの一部。レッスン 62/64。
サバイバルゲームでは、作業台を使うと、集めたものを使えるアイテムに加工できます。木と石を集めるボタンが2つあり、3つのレシピでさらにアイテムを作れます。木2個で板1枚、板1枚と石2個で斧1本、板4枚でいかだ1艘を作れます。レシピのボタンは、インベントリにレシピに必要なものがすべてあるときだけ押せます。クラフトすると、それらのアイテムは消費されます。レシピは作業台のインスペクターでデータとして入力するため、新しいレシピを追加してもコードを書く必要はありません。インベントリは変更のたびに、変更を受け取るリスナーに通知します。また、変更のたびにJSONとして保存されるため、ゲームを終了してもデータは失われません。
これを作るレッスンは2つあります。このレッスンでは、Backpackに配置するInventoryを書きます。作業台のレシピは次のレッスンで扱います。
チャレンジ
難しいパート1:Inventoryを完成させましょう。採集の準備ができています。
- シリアライズ可能な
ItemStack(publicitem、count)とInventoryData(publicList<ItemStack> stacks)を追加します。 Count、Add、Remove(スタック数が0になるとスタックを削除)とDescribeを完成させます。例:Wood 3, Plank 1またはempty。- 変更のたびに
Application.persistentDataPathにinventory.jsonを保存し、Changedを発生させます。Awakeで読み込みます。
「プレイ」を押して採集し、もう一度プレイすると、木材が戻っています。その後「確認」を押します。
自分で試してみよう
using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
// ここにItemStackとInventoryDataを記述する
public class Inventory : MonoBehaviour
{
public event Action Changed;
void Awake()
{
// inventory.jsonが存在する場合は読み込む
}
public int Count(string item)
{
return 0;
}
public void Add(string item, int amount)
{
}
public void Remove(string item, int amount)
{
}
public string Describe()
{
return "empty";
}
}
Unityのゲームアーキテクチャのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド