Unity精华☀️GetInstanceID 和 GetHashCode 的区别
Posted 橙子SKODE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity精华☀️GetInstanceID 和 GetHashCode 的区别相关的知识,希望对你有一定的参考价值。
哈喽大家好,你的橙哥突然出现~
本系列博客地址:传送门
一、两个代码的含义
下面讲解这两个API分别是功能。
//返回xx该实例的哈希代码
xx.GetHashCode
//返回xxx对象的实例id
xxx.GetInstanceID
1、GetHashCode
GetHashCode为获得该实例的哈希代码。
当该实例为一个物体时,得到的结果和 GetInstanceID 相同。
2、GetInstanceID
在场景中的每一个实例化出来的对象(实体GameObject、组件等),都有一个唯一固定且各不不同的instanceID。
GetInstanceID便可以得到此ID。
- 无论是重新打开编辑器,还是EXE文件,这个instanceID都不会发生变化;
- 不管运行多少次,实体的instanceID或者是实体挂载的组件的instanceID都是唯一且固定的。
- 同一个Prefab,不管是Inspector挂上去的还是用Resource.Load()动态加载的,这个ID都是一样的。只有当Instantiate成对象之后,每个对象间的ID才会有区别。
2.、不同的Prefab,ID是不一样的
二、两个代码的区别
GetHashCode:
- 不仅可以获取物体、脚本等实例化出来物体的ID,还能获取声明变量的哈希值。
GetInstanceID:
- 只可获取实例化出来对象的ID,声明的变量是没有该值的
三、API的应用场景
1、比较不同
var foundobjects = GameObject.FindGameObjectsWithTag("TagName");
foreach (GameObject o in foundobjects)
{
if (o.GetInstanceID() == gameObject.GetInstanceID())
continue;
}
2、找到模型、图片等资源在Assets中的位置
Sprite sprite = GetComponent<Image>().sprite;
print(AssetDatabase.GetAssetPath(sprite.GetInstanceID()));
好啦,这就是我们本节知识,
我们下节再见!
如果你有 技术的问题 或 项目开发
都可以加我的vx(skode250)
和我聊一聊你的故事🧡
以上是关于Unity精华☀️GetInstanceID 和 GetHashCode 的区别的主要内容,如果未能解决你的问题,请参考以下文章