变量如何返回为“ null”?

时间:2019-11-14 10:17:35

标签: c# unity3d

我正在查看我的代码以尝试解决问题,然后发现了引起该问题的原因,但无法解决。如下所示,我在脚本中较早的位置将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;,但这是行不通的。那就是我所有的想法。谢谢!

4 个答案:

答案 0 :(得分:3)

因为只有在Move = Move1;时才分配Move1 == null

=> Move = null;


一般注意:您完全不应该在继承自Object的Unity内置类型上使用== null

例如,使用implicit operator bool

if(!Move1)
{
   ...

原因是内部Object可能未设置为有效的引用,但仍会包含有关为什么的一些信息,该信息将返回等于的值null。这就是为什么您没有获得Unity类型常用的NullReferenceException而是例如MissingReferenceException。尽管它实际上并不是null,所以在某些情况下检查== null可能会失败。

答案 1 :(得分:2)

可能是您混用了Move = Move1;Move1 = Move;吗?

答案 2 :(得分:2)

您的代码本身,并对正在发生的事情提供一些注释。

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
}

答案 3 :(得分:1)

您在开始时记录的是“ Move”,但它没有定义为null,因此不会记录为null。由于“ Move1”为null,因此第二次调试将其设置为null,这就是为什么第二次获得null的原因。