Unity - Coding - Warnings
UNT0023 Coalescing assignment on Unity objects
合併賦值運算子 ??=
是 C# 8.0 引入的運算子,其功能是:如果左側運算元為 null,則將右側運算元的值賦給左側運算元。
然而,在 Unity 中直接對 Unity 物件 (如 GameObject、Component 等) 使用這個運算子可能會導致問題,因為:
Unity 物件的特殊生命週期:Unity 物件即使被銷毀,在 C# 層面的變數可能不會自動設為 null,而是成為"偽 null"物件。
自訂的 null 檢查行為:Unity 覆寫了
==
運算子,使得對已銷毀的 Unity 物件進行 null 檢查時會返回 true,但 `?? 運算子使用的是底層的 null 檢查機制。
使用明確的 null 檢查
private Rigidbody rb;
void Start()
{
if (rb == null)
{
rb = GetComponent<Rigidbody>();
}
}