言語: 日本語
  • C#
  • JS
  • Boo

スクリプト言語

お好みのスクリプト言語を選択すると、サンプルコードがその言語で表示されます。

SerializeField

Namespace: UnityEngine

Description

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

これはほとんどのケースで使用する必要がありません。 Unity がスクリプトをシリアライズする際、public フィールドのみシリアライズします。 それに加えて Unity で private フィールドをシリアライズさせたい場合、 フィールドに SerializeField 属性を追加できます。 Unity は全てのスクリプト コンポーネントをシリアライズし、新規のアセンブリをリロードして、 スクリプト コンポーネントをシリアライズしたバージョンから再作成します。 このシリアライズは .NET のシリアライズ機能により実施されず Unity 内部の機能で行なわれます。 シリアライズのシステムは次の条件があります: - public で static でないフィールド(シリアライズ可能な型)をシリアライズできる
- public でなく static でないフィールドに [SerializeField] 属性をつけてをシリアライズできる
- static フィールドはシリアライズできない
- プロパティはシリアライズできない
Unity がシリアライズ可能な型である場合のみフィールドはシリアライズされます: シリアライズ可能な型: - UnityEngine.Object から派生する全てのクラス, 例えば GameObject, Component, MonoBehaviour, Texture2D, AnimationClip 等々
- 全ての基本データ型、例えば int, string, float, bool
- いくつかのビルトインの型、例えば Vector2, Vector3, Vector4, Quaternion, Matrix4x4, Color, Rect, LayerMask
- シリアライズ可能な型の配列
- シリアライズ可能な型のリスト(Unity2.6 以降)
- 列挙体 注意: リスト(または配列)にひとつの要素を二回入れた場合、 リストがシリアライズされると、新規のリストの中に二回入るのででのではなく、その要素が二つできます。 ヒント: 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 () {
}
//C# example
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 () {
	}
}