報酬マスターを作成する
サンプル開始前の準備
- Unityスタートアップが完了している
- アイテムマスターを作成するが完了している
- ユニットマスターを作成するが完了している
概要
作成時間は約30分です。
報酬マスターの作成を通じて、次の内容を扱います。
- TypeとIDを設定し、Typeに応じたマスターのIDをValidateでチェックする
- DictionaryList形式の報酬マスターデータを作成する
報酬マスターフォーマット
- group_id(int) グループID
- reward_id(int) 報酬ID
- reward_type(enum:reward_type) 報酬タイプ
- reward_count(int) 報酬数
報酬列挙
- Item
- Unit
報酬Validate
- Itemの場合はitem.yamlのIDをチェック
- Unitの場合はunit.yamlのIDをチェック
手順は次の通りです。
- Excel列挙ファイルの作成
- Excelデータファイルの作成
- YAMLの作成
- コンバート
- 動作確認
- ID不整合のエラーを確認
Excel列挙ファイルの作成
Excel列挙ファイルの作成を参考に次のExcelを用意します。
reward_type

to from value
none None 0
item Item 1
unit Unit 2
Excelデータファイルの作成
Assets/Wiener/Data/excel/Reward/Reward.xlsx
Assets
+-- Wiener
+-- Data
+-- client
+-- excel
+-- Const
+-- Item
+-- Reward
| +-- Reward.xlsx
+-- Unit
+-- EnumBase.xlsx
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)
F列のコメントは入力確認用のメモです。ヘッダー行に型と列名を記載していないため、データとしては取り込まれません。
YAMLの作成
YamlEditorを使用してYAMLを作成します。
YamlEditorを開く
Tools > Wiener > Open Yaml Editorを選択してYamlEditorを開きます。

reward_type.yamlを作成
左のツリーのenumフォルダを右クリックしてRecreate From Enumを選択します。Recreate From Enumは、前回実行したCreate From Enumの設定で実行されます。


validate_reward.yamlを作成
このYAMLはIDチェック用です。
報酬設定はRewardTypeとIdで構成されるため、Typeに応じてチェックするYAMLを指定します。
- TypeがItemの場合はitem.yamlのIdをチェック
- TypeがUnitの場合はunit.yamlのIdをチェック
validateフォルダを作成
左のツリーのyamlフォルダを右クリックしてCreate Folderを選択し、validateフォルダを作成します。

validate_reward.yamlを新規作成
左のツリーのvalidateフォルダを右クリックしてNew YAMLを選択し、validate_reward.yamlを作成します。


validate_reward.yamlを編集
headerを次のように設定します。
- base_type: MultiYamlAction
- type: ValidateKeyExistsYamlConditions
- ignores.value: 0
multi_yaml_actionには次の項目を設定します。
- 1つ目の項目
- yaml: item/item.yaml
- key: id
- conditions_param: Item
- 2つ目の項目
- yaml: unit/unit.yaml
- key: id
- conditions_param: Unit
Saveボタンを押下


conditions_paramにはEnumBase.xlsxのreward_typeのfromの値を入れます。

rewardフォルダを作成
左のツリーのyamlフォルダを右クリックしてCreate Folderを選択し、rewardフォルダを作成します。

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


reward.yamlを編集
headerの編集
header.container_typeをWienerDictionaryListに変更します。

fieldsの編集
RewardIdに対してfields.validate.key_exists_yaml_conditionsを設定します。
- yaml: validate/validate_reward.yaml
- conditions_param_key: RewardType
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 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 wm, int id, RewardType type, int count = 1)
{
Id = id;
Type = type;
Count = count;
_rewardData = type switch
{
RewardType.Item => wm.Item.TryGetValue(id, out var item) ? item : null,
RewardType.Unit => wm.Unit.TryGetValue(id, out var unit) ? unit : 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;
}
OutputReward(wm);
}
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}");
}
}
}
}
実行結果

ID不整合のエラーを確認
Excelの設定
Reward.xlsxのRewardTypeを入れ替えて、それぞれ存在しないIDを指定した状態にします。

コンバートでエラーを検知
コンバートを実行して、エラー対象のExcel、Sheet、セル、データが出力されることを確認します。
