美文网首页
??AddComponent失败

??AddComponent失败

作者: 泱千澈 | 来源:发表于2019-06-08 12:59 被阅读0次

Q:为什么通过??运算符给物体添加组件添加不上?

public class PlayerMoveTest : MonoBehaviour
{
    CharacterController controller;
     private void Awake()
        {
        controller = transform.GetComponent<CharacterController>() ?? gameObject.AddComponent<CharacterController>();
    }
}    

public class PlayerMoveTest : MonoBehaviour
{
    CharacterController controller;
     private void Awake()
        {
        controller = transform.GetComponent<CharacterController>();
        if (controller == null)
            {
                    controller = gameObject.AddComponent<CharacterController>();
            }
    }
}        

如上面的代码,第一段是不行的,controller 显示为null,而第二段是可以添加上组件的,请问这是为什么?
对于??运算符,难道不是??前面的为null,就会执行??后面的表达式吗?

再写段代码测试下:

     var c1 = (object)base.transform.GetComponent<CharacterController>();
     if(c1 == null)
         Debug.Log(1);
     var c2 = (Object)base.transform.GetComponent<CharacterController>();
     if(c2 ==(Object)null)
         Debug.Log(2);
     if(c2 == null)
         Debug.Log(3);  

输出结果是2和3。

断点调试下这几个值:
原因是UnityEngine.Object类型重载了==运算符,所以"null"和null认为是相等的,而用System.object类型比较的时候认为是不相等的。
A2:看了一下,发现此"null"非彼null:
其实在contor = transform.GetComponent();执行这句的时候已经赋值了,只不过赋的值是"null",看一下打印的就知道两个null有什么区别了。
可以看出2段代码是不一样的,第一个比较的是UnityEngine.Object类型,第二个比较的是System.object类型。

相关文章

网友评论

      本文标题:??AddComponent失败

      本文链接:https://www.haomeiwen.com/subject/rslixctx.html