WienerWiener
  • はじめに
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • マスターデータコンバート
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • はじめに
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • マスターデータコンバート
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • サンプル

    • サンプル
    • 220万セルサンプルデータをコンバートする
    • アイテムマスターを作成する
    • ホットリロードを体験する
    • ユニットマスターを作成する
    • 報酬マスターを作成する
    • 装備マスターを作成する
    • ローカライズを体験する
    • 既存のYAMLにキーを追加する

報酬マスターを作成する

サンプル開始前の準備

  • 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をチェック

手順は次の通りです。

  1. Excel列挙ファイルの作成
  2. Excelデータファイルの作成
  3. YAMLの作成
  4. コンバート
  5. 動作確認
  6. ID不整合のエラーを確認

Excel列挙ファイルの作成

Excel列挙ファイルの作成を参考に次のExcelを用意します。

reward_type

Image from alias

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

Image from alias

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を開きます。

Image from alias

reward_type.yamlを作成

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

enumフォルダのメニューreward_type.yaml作成後

validate_reward.yamlを作成

このYAMLはIDチェック用です。
報酬設定はRewardTypeとIdで構成されるため、Typeに応じてチェックするYAMLを指定します。

  • TypeがItemの場合はitem.yamlのIdをチェック
  • TypeがUnitの場合はunit.yamlのIdをチェック

validateフォルダを作成

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

Image from alias

validate_reward.yamlを新規作成

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

validateフォルダのメニュー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ボタンを押下

Image from alias

Image from alias

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

Image from alias

rewardフォルダを作成

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

Image from alias

reward.yamlを作成

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

rewardフォルダのメニューreward.yaml作成後

reward.yamlを編集

headerの編集

header.container_typeをWienerDictionaryListに変更します。

Image from alias

fieldsの編集

RewardIdに対してfields.validate.key_exists_yaml_conditionsを設定します。

  • yaml: validate/validate_reward.yaml
  • conditions_param_key: RewardType

Saveボタンを押下します。

Image from alias

コンバート

コンバータを開く

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

Image from alias

コンバート実行

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

Image from alias

動作確認

以下の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}");
            }
        }
    }
}

実行結果

Image from alias

ID不整合のエラーを確認

Excelの設定

Reward.xlsxのRewardTypeを入れ替えて、それぞれ存在しないIDを指定した状態にします。

Image from alias

コンバートでエラーを検知

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

Image from alias

最終更新:: 2026/06/13 2:32
Contributors: artisan-sawasaka
Prev
ユニットマスターを作成する
Next
装備マスターを作成する