装備マスターを作成する
サンプル開始前の準備
- Unityスタートアップが完了している
- アイテムマスターを作成するが完了している
- ユニットマスターを作成するが完了している
- 報酬マスターを作成するが完了している
概要
このサンプルでは、次の内容を扱います。
- 報酬対象になる装備マスターを作成する
- 報酬タイプにEquipmentを追加する
- 既存の報酬表示コードを装備報酬に対応させる
装備マスターフォーマット
- id(int) ID
- name(string) 名前
- rarity(enum:rarity_type) レアリティ
- part(enum:equipment_part) 装備部位
- atk(int) 攻撃力
- def(int) 防御力
レアリティ列挙
- Common
- Rare
- Epic
装備部位列挙
- Weapon(武器)
- Head(頭)
- Body(体)
- Arm(腕)
- Leg(脚)
- Accessory(アクセサリー)
報酬列挙追加
- Equipment(装備)
手順は次の通りです。
- Excel列挙ファイルの作成
- Excelデータファイルの作成
- YAMLの作成
- コンバート
- 動作確認
Excel列挙ファイルの作成
Excel列挙ファイルの作成を参考に、EnumBase.xlsx にレアリティ、装備部位、報酬タイプの定義を追加します。
Assets/Wiener/Data/excel/EnumBase.xlsx
rarity_type

to from value
none None 0
common Common 1
rare Rare 2
epic Epic 3
equipment_part

to from value
none None 0
weapon Weapon 1
head Head 2
body Body 3
arm Arm 4
leg Leg 5
accessory Accessory 6
reward_type

to from value
none None 0
item Item 1
unit Unit 2
equipment Equipment 3
Excelデータファイルの作成
Equipment.xlsx
Unity Asset版では、Assets/Wiener/Data 配下にExcelファイルを配置します。
Assets/Wiener/Data/excel/Equipment/Equipment.xlsx
Assets
+-- Wiener
+-- Data
+-- client
+-- excel
+-- Const
+-- Equipment
| +-- Equipment.xlsx
+-- Item
+-- Reward
+-- Unit
+-- EnumBase.xlsx

int string rarity_type equipment_part int int
id name rarity part atk def
0 Invalid None None 0 0
2000000001 Bronze Sword Common Weapon 12 0
2000000002 Iron Helm Common Head 0 8
2000000003 Knight Armor Rare Body 0 24
2000000004 Power Gloves Rare Arm 6 5
2000000005 Swift Boots Rare Leg 0 10
2000000006 Dragon Charm Epic Accessory 18 18
2000000007 Excalibur Epic Weapon 45 0
Reward.xlsx
装備用のデータを追加します。

int int reward_type int
group_id reward_id reward_type reward_count
1000000001 1000000001 Item 2 Item: Potion (S)
1000000001 1010000001 Item 2 Item: Power Up (S)
1000000002 1000000002 Unit 1 Unit: Skilled Warrior
1000000002 1000000002 Item 5 Item: Potion (M)
1000000002 1020000001 Item 10 Item: Koban
1000000003 1000000004 Unit 1 Unit: Villager A
1000000003 1010000003 Item 20 Item: Power Up (L)
1000000003 2000000001 Equipment 1 Equipment: Bronze Sword
F列のコメントは入力確認用のメモです。ヘッダー行に型と列名を記載していないため、データとしては取り込まれません。
YAMLの作成
YamlEditorを使用してYAMLを作成します。
YamlEditorを開く
Tools > Wiener > Open Yaml Editorを選択してYamlEditorを開きます。

Enum YAMLを作成
左のツリーのenumフォルダを右クリックしてRecreate From Enumを選択し、次のYAMLを追加します。
- rarity_type.yaml
- equipment_part.yaml
- reward_type.yaml

equipmentフォルダを作成
左のツリーのyamlフォルダを右クリックしてCreate Folderを選択し、equipmentフォルダを作成します。 
equipment.yamlを作成
左のツリーのequipmentフォルダを右クリックしてCreate From Inputを選択し、Equipment.xlsxを読み込んでequipment.yamlを作成します。


WienerDictionaryに変更
container_typeをWienerDictionaryに変更して、Saveボタンを押下します。

コンバート
コンバータを開く
Tools > Wiener > Open Converterを選択してコンバータを開きます。

コンバート実行
Run Developを押下してコンバートを実行し、エラーが出ないことを確認します。

動作確認
次のReward.cs、Sample.csスクリプトを作成してシーンに配置し、正常にログが出力されることを確認してください。
Reward.cs
using Wiener;
namespace Wiener
{
interface IRewardData
{
string Name { get; }
}
public partial class ItemData : IRewardData {}
public partial class UnitData : IRewardData {}
public partial class EquipmentData : IRewardData {}
}
public class Reward
{
public int Id { get; private set; }
public RewardType Type { get; private set; }
public int Count { get; private set; }
public string Name => _rewardData?.Name ?? "";
private IRewardData _rewardData;
public Reward(WienerManager wienerManager, int id, RewardType type, int count = 1)
{
Id = id;
Type = type;
Count = count;
_rewardData = type switch
{
RewardType.Item => wienerManager.Item.TryGetValue(id, out var item) ? item : null,
RewardType.Unit => wienerManager.Unit.TryGetValue(id, out var unit) ? unit : null,
RewardType.Equipment => wienerManager.Equipment.TryGetValue(id, out var equipment) ? equipment : null,
_ => null
};
}
}
Sample.cs
using UnityEngine;
using Wiener;
using WienerLib;
public class Sample : MonoBehaviour
{
void Start()
{
var wm = new WienerManager();
var textAsset = Resources.Load("basic") as TextAsset;
var result = wm.LoadBasicPack(textAsset.bytes);
if (result != Result.Success)
{
Debug.LogError($"Failed to load basic pack: {result}");
return;
}
OutputEquipment(wm);
OutputReward(wm);
}
void OutputEquipment(WienerManager wm)
{
foreach (var equip in wm.Equipment.Values)
{
Debug.Log($"Id: {equip.Id}, Name: {equip.Name}, Part: {equip.Part}, Rarity: {equip.Rarity}");
}
}
void OutputReward(WienerManager wm)
{
foreach (var rewards in wm.Reward.Values)
{
foreach (var reward in rewards)
{
var r = new Reward(wm, reward.RewardId, reward.RewardType, reward.RewardCount);
Debug.Log($"GroupId: {reward.GroupId}, Name: {r.Name}, Id: {r.Id}, Type: {r.Type} Count: {r.Count}");
}
}
}
}
実行結果
