FormerlySerializedAs

FormerlySerializedAs 是 Unity 中的一個屬性(attribute),用於處理欄位的重新命名。當重新命名一個序列化的欄位時,Unity 通常會失去對舊名的參考,導致序列化出現問題。
使用 FormerlySerializedAs 可以告诉 Unity 欄位之前的名稱,從而正確地反序列化。

以下為修改範例:
在 BaseEntity 類別中有一個 HP 欄位以及一個 ItemData 欄位,並且已經在 Inspector 上更改過它們的值

1
2
3
4
5
6
7
8
9
10
11
public class BaseEntity : MonoBehaviour
{
public int HP = 0;
public Item ItemData;
}


public class Item : MonoBehaviour
{
// ...
}
  • HP 與 ItemData 欄位,已經在 `Inspector` 上更改過它們的值

此時,想要更改欄位的名稱,如果直接重新命名這些欄位的話,在 Inspector 會丟失這些值,

  • 直接重新命名這些欄位的話,在 `Inspector` 會丟失這些值

使用 FormerlySerializedAs 告訴 Unity 欄位之前叫什麼。當編譯後,Unity 會幫我們將值對應到對應到新的欄位上。

1
2
3
4
5
6
7
8
public class BaseEntity : MonoBehaviour
{
[FormerlySerializedAs("HP")]
public int Hp = 0;

[FormerlySerializedAs("ItemData")]
public Item Item;
}

確認更新之後沒問題,可將 FormerlySerializedAs 刪除,但記得要在大家都更新完之後再做刪除的動作。

Reference:

評論