4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity】【基礎】SerializeFieldは何者だ?

Last updated at Posted at 2019-10-30

やりたいこと

[SerializeField]とは何者だ。

[~~]の意味

  • C#の機能で属性と呼ぶ。
  • Javaでいうアノテーションで各フィールドごとに意味を持たせる。
  • 自作の属性も作ることができる。
  • Unity固有の属性も数十と用意されておりSerializeFieldもその一つ。
  • Unity固有の属性一覧については参考サイト1. を参照

SerializeFieldの意味

  • エディタのインスペクタビューに項目追加され、値の設定が可能になる。
  • ホットリロードが可能になる。

    (ゲーム実行中にスクリプトを修正しても、フィールドの値が失われない。)
  • シリアライズによりハードディスク等外部からの復元を保証する?

    (保証するのか、シリアライズ化の対象であることをマーク(明示)しているだけか

    どちらであるかは調べていない。)

具体的な使用例

テストコード

SerialA.cs
public class SerialA : MonoBehaviour
{
    [SerializeField]  SerialB serialB;
    void Start()
    {
        serialB.Value1 = 400;
    }
}
SerialB.cs
public class SerialB : MonoBehaviour
{
    [SerializeField] int Value1; ・・・(※1)
}

パターン1 : エディタ上から編集したいが、スクリプト上では隠蔽したい。 

SerialB.cs
   [SerializeField] private int Value1;

エディタ上から値の初期化を行うときに有効。
カプセル化も維持される。

パターン2 : エディタ上から編集しない、スクリプト上では隠蔽したい。

SerialB.cs
   private int Value1;

値の初期化をスクリプトで行う場合などに有効。
エディタで誤って値を設定させない場合に有効。

パターン3 : エディタ上から編集する、スクリプト上でも公開する。

SerialB.cs
   [SerializeField] public int Value1{get; set;}
  // または, 
   public int Value1{get; set;}

おそらくあり得ないパターン。スクリプト上で初期化するならインスペクタビューへの公開は不要であるし、逆もまた然り。
まぁ趣味として速さ優先で書く分にはいいかと。
インスペクタビューへの公開のみを目的とするなら下の書き方のが簡潔。

参考サイト

1. UnityのAttribute(属性)についてまとめてメモる。
2. スクリプトのシリアル化

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?