簡體   English   中英

變量如何返回為“null”?

[英]How is a variable returning as “null”?

我正在查看我的代碼以嘗試解決問題,然后我發現了導致它的原因,但我無法修復它。 如下所示,我在腳本的前面將 Move1 設置為 null,並且除了我向您展示的兩個地方之外,該變量在腳本中的其他任何地方都沒有改變。

    private GameObject Move1 = null;

問題是當我第一次執行Debug.Log(Move)時,它不會返回為“null”。 但是,當我第二次調用Debug.Log(Move)時,它確實以 null 的形式返回,我不確定為什么。

 private void addVar(GameObject Move, GameObject Cyl)
{
    Debug.Log(Move);
    if (Move1 == null)
    {
        Move = Move1;
        Cyl = Cyl1;
        Moves.Add(Move);
        Movecyls.Add(Cyl);
        Debug.Log(Move);
    }

我已經嘗試過private GameObject Move1; 但這不起作用。 這就是我所有的想法。 謝謝!

因為您正在分配Move = Move1; 僅當Move1 == null

=> Move = null;


一般注意:您根本不應該在繼承自Object的 Unity 內置類型上使用== null

而是使用隱式運算符bool ,例如

if(!Move1)
{
   ...

原因是內部Object可能未設置為有效引用,但仍會保留一些有關為什么它返回等於null的值的信息。 這就是為什么你沒有得到 Unity 類型通常的NullReferenceException而是例如MissingReferenceException的原因。 它不是真正的null雖然所以檢查== null在某些情況下可能會失敗。

可能是你混淆了Move = Move1; Move1 = Move; ?

您的代碼原樣,並附有對正在發生的事情的一些評論。

private void addVar(GameObject Move, GameObject Cyl)
{
    // The function parameter is whatever sent to this function
    // It may or may not be null
    Debug.Log(Move);
    if (Move1 == null)
    {
        // The following will always result in null
        // Because of the above if condition
        Move = Move1;
        Cyl = Cyl1;
        Moves.Add(Move);
        Movecyls.Add(Cyl);
        // Debug value will now be null
        Debug.Log(Move);
    }

// Other operations
}

您在開始時記錄“移動”,但它沒有定義為 null,因此它不會記錄為 null。 第二次調試您將其設置為 null,因為“Move1”是 null,這就是您第二次獲得 null 的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM