mirror of
https://github.com/AnnulusGames/Alchemy.git
synced 2025-01-22 16:28:25 -05:00
2.2 KiB
2.2 KiB
シリアル化拡張
Dictionaryなどの通常のUnityがシリアル化できない型を編集したい場合、[AlchemySerialize]
属性を使用してシリアル化を行うことができます。
シリアル化拡張を使用したい場合、Unity.Serializationパッケージが必要になります。また、リフレクションを用いたUnity.Serializationのシリアル化はUnity2022.1以前のAOT環境で動作しない可能性があります。詳細はパッケージのマニュアルを確認してください。
以下はAlchemyのシリアル化拡張を用いて様々な型をシリアル化し、Inspectorで編集可能にするサンプルです。
using System;
using System.Collections.Generic;
using UnityEngine;
using Alchemy.Serialization; // Alchemy.Serialization名前空間をusingに追加
// [AlchemySerialize]属性を付加することでAlchemyのシリアル化拡張が有効化されます。
// 任意の基底クラスを持つ型に使用できますが、SourceGeneratorがコード生成を行うため対象型はpartialである必要があります。
[AlchemySerialize]
public partial class AlchemySerializationExample : MonoBehaviour
{
// 対象のフィールドに[AlchemySerializeField]属性と[NonSerialized]属性を付加します。
[AlchemySerializeField, NonSerialized]
public HashSet<GameObject> hashSet = new();
[AlchemySerializeField, NonSerialized]
public Dictionary<string, GameObject> dictionary = new();
[AlchemySerializeField, NonSerialized]
public (int, int) tuple;
[AlchemySerializeField, NonSerialized]
public Vector3? nullable = null;
}
現在Inspectorで編集可能な型は以下の通りです。
- プリミティブ型
- UnityEngine.Object
- AnimationCurve
- Gradient
- 配列
- List<>
- HashSet<>
- Dictionary<,>
- ValueTuple<>
- Nullable<>
- 以上の型のフィールドで構成されるclass/struct
シリアル化の技術的な詳細についてはAlchemyのシリアル化プロセスを参照してください。