• 警惕!Unity3D中UnityEngine.Object的一个小陷阱


    先看看如下C#的脚本代码:

    猜猜控制台打出来的是什么?

    In the bool parameter function, value info is:  True

    肯定出乎很多人的意料吧?大笑

    transform的类型跟bool类型一点关系都没有,怎么会调用TestFunction(bool value)呢?我碰到这个问题的时候,第一反应是编译器出问题了,后来同事的机器上一样有同样的运行结果。于是我继续写了如下代码:

    这次的运行结果符合预期了,调用的是void TestFunction(System.Object value):

    In the Object parameter function, value info is:  MyClass

    那么问题还是出现在Unity3D的类,也就是Transform上,那就挨个看它的父类,最上面就是UnityEngine.Object。接着看了下UnityEngine.Object的metaData文件,才恍然大悟:

    unity3d的Object类重载了类型隐式转换运算符bool(其他类型转换一样可以被重载,不仅仅是bool),所以TestFunction(transform) 实际上调用的是这个函数,这个重载函数的作用是判断当前Object是否非空,这也符合输出的信息(也就是true)。好吧,不小心踏入了这个陷阱,而且编辑器在编辑阶段也不会有任何警告。那如果想正常调用应该如何做呢?只用这样:

    TestFunction(transform as object); 

    因为System.object并没有重载类型转换运算符bool,输出如下(我把这个脚本挂在MainCamera下了):

    In the Object parameter function, value info is:  Main Camera (UnityEngine.Transform)

    事情暂且告一段落,不过个人感觉确实是一个陷阱骂人,诸位觉得如何呢?

  • 相关阅读:
    Javascript图片轮播
    Javascript返回顶部
    Android Studio 中 Svn的使用
    js简介
    使用Androd Studio开发Andriod程序查看Sha1的方法
    VueJs学习路线
    Eclipse 项目导入 Studio Debug运行卡死在进入界面
    Node软件的安装
    TextView加边框,自定义,上下左右四条线 颜色,想用哪个用哪个
    安装Eclipse(android)新建项目时遇到的问题
  • 原文地址:https://www.cnblogs.com/suway/p/7384412.html
Copyright © 2020-2023  润新知