先看看如下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)

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

最新文章

  1. JavaScript数组模拟栈和队列
  2. 近期C#项目中总结
  3. JavaEE PO VO BO DTO POJO DAO 整理总结
  4. AlwaysOn可用组基础知识
  5. windows远程桌面端口修改
  6. Asp.net MVC Bundle 的使用与扩展
  7. NDK(15)在ndk代码中注册和注销native函数
  8. phpstorm运行在浏览器中执行php文件报502错误
  9. 下拉框点链接js
  10. 常见的SQL字符串函数
  11. Duanxx的STM32学习:STM32下载方式选择
  12. nginx 报错502Bad Gateway
  13. 分布式作业 Elastic Job 如何动态调整?
  14. rosetta对称性文件(rosetta symmetry file)的产生及应用
  15. mysql数据库几种引擎
  16. 【Spring Boot&& Spring Cloud系列】单点登录SSO之OAuth2官方开发文档翻译
  17. ffmpeg的API函数用法 :sws_scale函数的用法-具体应用
  18. jQuery.extend()中的布尔值的作用
  19. Python学习笔记(四十一)— 内置模块(10)urllib
  20. 简单安装与配置mysql数据库(绿色版)

热门文章

  1. 微信小程序navigator跳转失效
  2. [堆+贪心]牛客练习赛40-B
  3. CSS动画@-webkit-keyframes
  4. lvs+keepalived详解
  5. Linux命令详解----ln
  6. 关于14道魔鬼js考题的整理
  7. 【android】实现手指滑动来切换activity(转)
  8. [离散化]人潮最多的時段( Interval Partitioning Problem )
  9. PAT L1-048 矩阵A乘以B
  10. Linux系统的性能测试