Unity3d中UnityEngine.Object
UnityEngine.Object继承自system.Object,是Unity所涉及所有物体的基类。
Static Functions 静态函数 下面的都是静态函数
| Destroy | Removes a gameobject, component or asset. 删除一个游戏对象、组件或资源 |
| DestroyImmediate | Destroys the object obj immediately. You are strongly recommended to use Destroy instead. 立即销毁物体obj,强烈建议使用Destroy代替。 |
| DontDestroyOnLoad | Makes the object target not be destroyed automatically when loading a new scene. 加载新场景的时候使目标对象不被自动销毁。 |
| FindObjectOfType | Returns the first active loaded object of Type type. 返回Type类型第一个激活的加载的对象。 |
| FindObjectsOfType | Returns a list of all active loaded objects of Type type. 返回Type类型的所有激活的加载的物体列表。 |
| Instantiate | Clones the object original and returns the clone. 克隆原始物体并返回克隆物体。 |
先看一下Object重载的运算符:
| bool | Does the object exist? |
|---|---|
| operator != | Compares if two objects refer to a different object. |
| operator == | Compares if two objects refer to the same. |
下面几个注意点是我在最近使用发现的。
(1)Object类重载了类型隐式转换运算符“bool”。这个如果不注意,在某些情况下可能会造成意料外的调用。
例
class Test:MonoBehaviour
{
void Start()
{
Fun(transform);//此函数目的是为了调用 void Fun(system.Object objFlag)
}
void Fun(bool value)
{
Debug.Log(“call the bool param fun,the value is:”+value.ToString();)
}
void Fun(system.Object objFlag)
{
Debug.Log(“call the param system.Object fun,the value is:”+value.ToString();)
}
}
打印的日志是:call the bool param fun,the value is: true
可以看出,与我们的目的不一致。通过追溯Transform父类,其顶层基类是UnityEngine.Object。这就找到原因了,在这样的情况下这两个Fun函数存在调用歧义。transform先被判断是否存在的引用,然后调用了void Fun(bool value)
建议:同一个类尽量不要使用同名函数,如有要使用同名函数时要特别注意这两种情况。
(2)Object类重载了类型隐式转换运算符“==”。这个在与null比较时要特别注意,既使是有效的引用结果有可能是true的。
例:
GameObject go = new GameObject();
Debug.Log (go == null); // false Object obj = new Object();
Debug.Log (obj == null); // true
看一下官方的说明(英文不好翻译不来):
Instatiating a GameObject adds it to the scene so it’s completely initialized (!destroyed). Instantiating a simple UnityEngine.Object has no such semantics, so the it stays in the ‘destroyed’ state which compares true to null.
Unity3d中UnityEngine.Object的更多相关文章
- 警惕!Unity3D中UnityEngine.Object的一个小陷阱
先看看如下C#的脚本代码: 猜猜控制台打出来的是什么? In the bool parameter function, value info is: True 肯定出乎很多人的意料吧? transf ...
- Unity3D中可中途释放的单例
Unity3D中可中途释放的单例 使用静态类,静态变量的坏处是从程序加载后就一直占用内存,想要释放比较麻烦,可是之前使用的单例,没有提供释放的方法,那是不是也同静态的一样直到程序结束菜释放?那单例的好 ...
- Unity3D 中 脚本(MonoBehaviour) 生命周期WaitForEndOfFrame需要注意的地方
首先看看MonoBehaviour的生命周期 先上个图(来源 http://blog.csdn.net/qitian67/article/details/18516503): 1.Awake 和 St ...
- Unity3D游戏开发之游戏读/存档功能在Unity3D中的实现
喜欢我的博客请记住我的名字:秦元培,我的博客地址是:http://qinyuanpei.com 转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanp ...
- 【转】Unity3D中Layers和LayerMask解析
http://blog.csdn.net/yupu56/article/details/50441151 Unity中是用int32来表示32个Layer层.int32表示二进制一共有32位(0-31 ...
- 【吐血推荐】简要分析unity3d中剪不断理还乱的yield
在学习unity3d的时候很容易看到下面这个例子: void Start () { StartCoroutine(Destroy()); } IEnumerator Destroy(){ yield ...
- Unity3D中事件函数的运行顺序
Unity3D中脚本的生命周期是依照预先定义好的事件函数的运行流程来演化的,详细流程例如以下: Editor模式下Reset: 当脚本第一次被挂到GameObject上或用户点击Resetbutton ...
- Unity3D中关于场景销毁时事件调用顺序的一点记录
先说一下我遇到的问题,我弄了一个对象池管理多个对象,对象池绑定在一个GameObject上,每个对象在OnBecameInvisible时会进行回收(即移出屏幕就回收),但是当场景切换或停止运行程序时 ...
- Unity3D中的Coroutine详解
Unity中的coroutine是通过yield expression;来实现的.官方脚本中到处会看到这样的代码. 疑问: yield是什么? Coroutine是什么? unity的coroutin ...
随机推荐
- Java Management Extensions (JMX) Flume
Lesson: Overview of the JMX Technology (The Java™ Tutorials > Java Management Extensions (JMX)) h ...
- hibernate面试点
1.谈谈你对hibernate的认识和理解 01.全自动的ORM框架 02.子项目 03.面向对象的思想来解决操作数据库 01.hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JD ...
- code[VS] 1297 硬币
题目描写叙述 Description 我们知道即使是同一种面值的硬币,它们的重量也有可能不一样,由于它受到很多因素的影响,包含制造工艺和流程上的.可是不论什么一种面值的硬币的重量总是处于某个特定范围之 ...
- js replace()实现全部替换
var r= "1\n2\n3\n"; //将字母\n替换成分号 alert(r.replace("\n",";")); 结果:1;2\n3 ...
- 「翻译」Unity中的AssetBundle详解(一)
AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...
- kaminari分页插件样式
修改国际化文件,zh-cn views: pagination: first: "首页" last: "尾页" previous: "上一页" ...
- HDU 5687 Problem C
Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- css3某些特性
在下列情况下,建议使用opacity属性而不是rgba()函数 1.实现多种颜色(元素)的半透明效果.使用opacity属性,不仅背景颜色,就连文本颜色.边框颜色都会变透明. 2.在不知道颜色的情况下 ...
- 第一次通过AVD Manager创建了一个虚拟设备,但是在Android Studio运行程序时却无设备可选
第一次通过AVD Manager创建了一个虚拟设备,但是在Android Studio运行程序时却无设备可选 原因是adb.exe未运行起来 至于adb.exe未正常运行起来的原因多半是5037端口被 ...
- 【2017省中集训DAY1T1】 小X的质数
[题目链接] 点击打开链接 [算法] 如果一个数是小X喜欢的数,那么有两种可能: 1.这个数是质数 2.这个数除以它的最小质因子是一个质数 所以我们可以用线性筛+前缀和的方式预处理,询问的时候O(1) ...