GameObject的==的一个坑和一点GameObject的内部构造
一切都是因为==,才有了这篇博客
测试
先放一段unity的一个普通的脚本
using UnityEngine;
public class UnityEngineObjectCheck : MonoBehaviour {
void Start () {
GameObject go1 = new GameObject ("go1");
GameObject go2 = new GameObject ("go2");
DestroyImmediate (go1);
Debug.Log ("go1 == null : " + (go1 == null).ToString());
Debug.Log ("go2 == null : " + (go2 == null).ToString());
GameObject go = go1 ?? go2;
Debug.Log ("go == null : " + (go == null).ToString());
}
}
这里有个 ?? 运算符有点意思我也是查了MSDN文档
其意思就是对null的判别 ,a??b意思就是a为空则返回b,a不为null则不会对b进行表达式计算,??=运算符在此基础上多加了把b赋给a的功能
结果和分析
先预测一波结果:
1、go
被销毁了,那么第一个输出将是go1 == null : True
;
2、没有对go2
进行操作,那么第二个输出应该是go2 == null : False
;
3、通过??运算符、go1既然是null、那么go将会被赋值为go2。因此第三个输出将是go == null : False
。
然而实际运行结果:
这说明了go1并没有完全销毁,他不是null,C#的对象由GC(Garbage collector)来管理对象的生存,destroy针对的是UnityGameobject的对象,UnityGameObject继承了UnityEngine.Object类,而object类重载了==
和!=
运算符,所以GameObject的==
和!=
就相应的被重载了 。
所以上面使用==
使用unity内置的对象判null方式,如果你的底层对象被destory了那就为null没问题,而使用其他的运算符时,这个C#对象还活着,也就会出现上面的问题。
总结
综上所述加上我查的一些资料:
可以初步认为
GameObject= C#包裹对象 + UnityEngineC++底层对象
Destroy处理的是C++底层对象,销毁然后C#对象里面的指向底层对象指针指向一个null,就完成了destory这一步。
gameobj == null
的来历就是如此了,写代码的时候注意不要踩坑就行。
文章大部分来自该博客:https://blog.csdn.net/serenahaven/article/details/83381501
GameObject的==的一个坑和一点GameObject的内部构造的更多相关文章
- JavaScript中sort方法的一个坑(leetcode 179. Largest Number)
在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...
- 困扰多日的C#调用Haskell问题竟然是Windows的一个坑
最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...
- 【转载】linux命令行计算器bc的一个“坑”
[转载自]http://blog.chinaunix.net/uid-174325-id-3518953.html 结论:ibase,obase可以使用在不同的计算公式里,但是尽量把obase放iba ...
- 【转】最近用Timer踩了一个坑,分享一下避免别人继续踩
[转]最近用Timer踩了一个坑,分享一下避免别人继续踩 最近做一个小项目,项目中有一个定时服务,需要向对方定时发送数据,时间间隔是1.5s,然后就想到了用C#的Timer类,我们知道Timer 确实 ...
- 关于pyinstaller打包程序时设置icon时的一个坑
关于pyinstaller打包程序时设置icon时的一个坑 之前在用pyinstaller打包程序的时候遇到了关于设置图标的一点小问题,无论在后面加--icon 或是-i都出现报错.查了下st ...
- hive外部表删除遇到的一个坑
hive外部表删除遇到的一个坑 操作步骤 创建某个表(create external table xxx location xxx) 插入数据(insert xxx select xxx from x ...
- 踩到Framework7 Photo Browser 的一个坑
最近在做的项目用了Framework7前端框架,功能确实比较强大!但这两天遇到一个坑,希望我的这点收获能给遇到这个问题的朋友一点帮助. 在使用Photo Browser 的时候,图片下方想放一个“点赞 ...
- guava缓存批量获取的一个坑
摘要 Guava Cache是Google开源的Java工具集库Guava里的一款缓存工具,一直觉得使用起来比较简单,没想到这次居然还踩了一个坑 背景 功能需求抽象出来很简单,就是将数据库的查询sth ...
- golang连接达梦数据库的一个坑
golang连接达梦数据库的一个坑 有一次项目中用到了达梦数据库,后端语言使用的golang,达梦官方并未适配专门的golang连接方式,正一筹莫展的时候发现达梦提供了odbc的连接,这样可以使用类似 ...
随机推荐
- 从零开始的SpringBoot项目 ( 六 ) 整合 MybatisPlus 实现代码自动生成
1.添加依赖 <!-- MySQL数据库 --> <dependency> <groupId>mysql</groupId> <artifactI ...
- python练习 英文字符的鲁棒输入+数字的鲁棒输入
鲁棒 = Robust 健壮 英文字符的鲁棒输入 描述 获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误. ...
- hadoop平台环境搭建
centos01 配置静态ip vim /etc/sysconfig/network-scripts/ifcfg-eth0 见图1 修改主机名 vim /etc/sysconfig/network 见 ...
- Android,java,php开发最基本的知识,mysql sqlite数据库的增删改查代理,sql语句
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985转载请说明出处. 下面是代码: 增加:insert into 数据表(字段1,字段2,字段3) valu ...
- SpiderMonkey教程
https://technotales.wordpress.com/2009/06/07/spidermonkey-introduction/ https://developer.mozilla.or ...
- Hadoop Windows IDEA
java jdk1.8都可以了 注意jdk的路径要拷贝到一个没有空格的路径改掉JAVA_HOME系统环境变量 在etc/hadoop/hadoop_env.cmd里有设置%JAVA_HOME%了不用管 ...
- HTML语言基本单词与css基本单词
DOCTYPE 文档 html 网页 head 头部 body 主体 title 题目 p 段落 color 颜色 style 样式 backgroun ...
- 1. Error running ...: No jdk for module ... 2.
一.错误 Error running ...: No jdk for module ... Error running ...: No jdk for module ... 二.解决方法 找到File ...
- 用Nginx将web请求引导到本机两个tomcat
如何在本机启动两个tomcat请参考:https://www.cnblogs.com/xiandedanteng/p/12100461.html 而Nginx这边,将\conf\nginx.conf ...
- Linux curl携带cookie测试接口
问题: 休息在家,被告知要启动测试环境的一个定时任务,但是服务器在内网,连上vpn只能访问内网的开发环境,无法访问测试环境,于是进开发环境服务器,ping测试环境的ip,发现是通的,于是想到通过开发环 ...