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 的区别的主要内容,如果未能解决你的问题,请参考以下文章

Unity精华☀️UI和物体可见性的判断方法

Unity精华☀️UI和物体可见性的判断方法

Unity精华☀️UI和物体可见性的判断方法

Unity精华☀️四元数(Quaternion)解决万向锁

Unity精华☀️ 哥哥,「设计模式」能解决游戏回放呀,你尝一口!

Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途