Version: 5.3 (switch to 5.4b)
言語English
  • C#
  • JS

スクリプト言語

好きな言語を選択してください。選択した言語でスクリプトコードが表示されます。

SerializeField

class in UnityEngine

マニュアルに切り替える

説明

Unity が private フィールドを強制的にシリアライズします。

これはほとんどのケースで使用する必要がありません。 Unity がスクリプトをシリアライズする際、public フィールドのみシリアライズします。 それに加えて Unity で private フィールドをシリアライズさせたい場合、 フィールドに SerializeField 属性を追加できます。

Unity はすべてのスクリプトコンポーネントをシリアライズし、新規のアセンブリをリロードして、 スクリプトコンポーネントをシリアライズしたバージョンから再作成します。 このシリアライズは .NET のシリアライズ機能により実施されず Unity 内部の機能で行なわれます。

シリアライズのシステムは次の条件があります:

- CAN serialize public nonstatic fields (of serializable types)
- CAN serialize nonpublic nonstatic fields marked with the [SerializeField] attribute.
- CANNOT serialize static fields.
- CANNOT serialize properties.


Unity がシリアライズ可能な型である場合のみフィールドはシリアライズされます:

シリアライズ可能な型:

- All classes inheriting from UnityEngine.Object, for example GameObject, Component, MonoBehaviour, Texture2D, AnimationClip.
- All basic data types like int, string, float, bool.
- Some built-in types like Vector2, Vector3, Vector4, Quaternion, Matrix4x4, Color, Rect, LayerMask.
- Arrays of a serializable type
- List of a serializable type)
- Enums
- 構造体

注意: リスト(または配列)にひとつの要素を二回入れた場合、 リストがシリアライズされると、新規のリストの中に二回入るのででのではなく、その要素が二つできます。

ヒント: Unity は Dictionary をシリアライズしませんが、しかしキーのための List<> および値のための List<> を格納し、Awake() 時にシリアライズされてない Dictionary で 結びつけることができます。これでも Dictionary を修正したものを保存する解決策とはならないものの、 多くの場合には便利な方法です。

UnityScript のユーザー向け: C# のフィールドは UnityScript ではスクリプト変数であり、 [SerializeField] は @SerializeField と記載する必要があります。クラス上の [Serializable] は UnityScript では @script Serializable となります。

using UnityEngine;

public class SomePerson : MonoBehaviour { //This field gets serialized because it is public. public string name = "John";

//This field does not get serialized because it is private. private int age = 40;

//This field gets serialized even though it is private //because it has the SerializeField attribute applied. [SerializeField] private bool hasHealthPotion = true;

void Update () { } }