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

スクリプト言語

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

SerializeField

class in UnityEngine

フィードバック

ありがとうございます

この度はドキュメントの品質向上のためにご意見・ご要望をお寄せいただき、誠にありがとうございます。頂いた内容をドキュメントチームで確認し、必要に応じて修正を致します。

閉じる

送信に失敗しました

なんらかのエラーが発生したため送信が出来ませんでした。しばらく経ってから<a>もう一度送信</a>してください。ドキュメントの品質向上のために時間を割いて頂き誠にありがとうございます。

閉じる

キャンセル

マニュアルに切り替える

説明

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 となります。

// Javascript example

//This field gets serialized because it is public. var name = "John";

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

//This field gets serialized even though it is private //because it has the SerializeField attribute applied. @SerializeField private var hasHealthPotion:boolean = true;

function Update () { }
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 () { } }