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スタートアップが完了している
  • アイテムマスターを作成するが完了している
  • ユニットマスターを作成するが完了している
  • 報酬マスターを作成するが完了している

概要

このサンプルでは、次の内容を扱います。

  • 報酬対象になる装備マスターを作成する
  • 報酬タイプに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(装備)

手順は次の通りです。

  1. Excel列挙ファイルの作成
  2. Excelデータファイルの作成
  3. YAMLの作成
  4. コンバート
  5. 動作確認

Excel列挙ファイルの作成

Excel列挙ファイルの作成を参考に、EnumBase.xlsx にレアリティ、装備部位、報酬タイプの定義を追加します。
Assets/Wiener/Data/excel/EnumBase.xlsx

rarity_type

Image from alias

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

equipment_part

Image from alias

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

Image from alias

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

Image from alias

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

装備用のデータを追加します。

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)
1000000003	2000000001	Equipment	1	Equipment: Bronze Sword

F列のコメントは入力確認用のメモです。ヘッダー行に型と列名を記載していないため、データとしては取り込まれません。

YAMLの作成

YamlEditorを使用してYAMLを作成します。

YamlEditorを開く

Tools > Wiener > Open Yaml Editorを選択してYamlEditorを開きます。

Image from alias

Enum YAMLを作成

左のツリーのenumフォルダを右クリックしてRecreate From Enumを選択し、次のYAMLを追加します。

  • rarity_type.yaml
  • equipment_part.yaml
  • reward_type.yaml

Image from alias

equipmentフォルダを作成

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

equipment.yamlを作成

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

equipmentフォルダ作成メニューequipmentフォルダ作成後

WienerDictionaryに変更

container_typeをWienerDictionaryに変更して、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 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}");
            }
        }
    }
}

実行結果

Image from alias

最終更新:: 2026/06/13 2:32
Contributors: artisan-sawasaka
Prev
報酬マスターを作成する
Next
ローカライズを体験する