Unity精华☀️GetInstanceID 和 GetHashCode 的区别

简介: 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()));


相关文章
|
Rust 算法 Go
【密码学】一文读懂FNV Hash
FNV哈希全名为Fowler-Noll-Vo算法,是以三位发明人Glenn Fowler,Landon Curt Noll,Phong Vo的名字来命名的,最早在1991年提出。它可以快速hash大量的数据并保持较小的冲突概率,适合hash一些相近的字符串比如IP地址、URL、文件名等等。目前FNV算法有三个版本,分别是: FNV-0(已废弃)、FNV-1以及FNV-1a。这三个算法的结构非常相似,因此呢,在这里就一块说了。
5468 0
【密码学】一文读懂FNV Hash
|
存储 算法 API
Unity打包AB包
在 Unity 中,AssetBundle(AB 包)用于存储和管理游戏资源,支持动态加载。开发者需为资源标记 AssetBundle 名称,Unity 会自动处理依赖关系并进行序列化。资源被打包成二进制格式,并可选择压缩算法(如 LZMA 或 LZ4)。通过 BuildPipeline API 可控制打包过程,包括设置目标平台(如 WebGL、PC)。示例代码展示了如何使用 BuildPipeline.BuildAssetBundles 方法打包 AB 包并输出到 StreamingAssets 文件夹中。
|
11月前
|
人工智能 Cloud Native IDE
超详细!JetBrains Rider 2025.1 安装到能用,激活 + 安装步骤—附安装包
JetBrains Rider 2025.1 是全能型跨平台全栈 IDE,深度集成 AI 编码助手,支持 .NET 9、Unity 2025、Blazor 等最新技术,覆盖 C#、Python、Go 等 20+ 语言,赋能游戏、云原生与微服务开发,实现 AI 辅助生成、调试、测试与文档一体化。
2428 2
|
C# 图形学
【unity小技巧】Unity音乐和音效管理器
【unity小技巧】Unity音乐和音效管理器
1569 2
|
机器学习/深度学习 人工智能
Diffusion-DPO:一种基于直接偏好优化的扩散模型对齐新方法
本文介绍了一种名为 Diffusion-DPO 的创新方法,该方法基于直接偏好优化(DPO)原理,简化了扩散模型与人类偏好的对齐过程。相比传统的基于人类反馈的强化学习(RLHF)方法,Diffusion-DPO 避免了显式奖励模型的训练,通过数学近似简化实现流程,并在处理开放词汇表场景时展现出更强的能力。实验结果表明,该方法在 Stable Diffusion 1.5 和 SDXL-1.0 等主流模型上显著提升了生成图像的质量和可控性,为未来扩散模型的发展提供了新的思路。
1634 14
Diffusion-DPO:一种基于直接偏好优化的扩散模型对齐新方法
|
数据可视化 图形学 开发者
【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例(上)
【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例
6476 61
|
图形学
unity判断鼠标在不在UI上
在 Unity 中,判断鼠标是否在 UI 上主要依赖事件系统和射线检测机制。Unity 的事件系统负责处理输入事件,GraphicRaycaster 组件用于检测射线与 UI 元素的相交情况。通过 `EventSystem.current.IsPointerOverGameObject()` 方法可轻松判断鼠标是否在 UI 上。对于移动端,使用 `EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)` 来判断触摸是否在 UI 上。代码实现简单且高效。
|
缓存
正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 12836(unattended-upgr)持有
正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 12836(unattended-upgr)持有
9028 0
正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 12836(unattended-upgr)持有
|
人工智能 数据可视化 程序员
【推荐100个unity插件之7】使用BehaviorDesigner插件制作BOSS的AI行为树
【推荐100个unity插件之7】使用BehaviorDesigner插件制作BOSS的AI行为树
2518 0
Unity精华☀️一、从旋转到万向锁之:Unity的旋转
Unity精华☀️一、从旋转到万向锁之:Unity的旋转