我们开发中常用的查找物体的方法有:GameObject.Find()、transform.Find()、FindGameObjectWithTag()、FindGameObjectsWithTag()、FindObjectOfType()、FindObjectsOfType()、transform.GetChild()、Resources.FindObjectsOfTypeAll。这几种方法各有优缺点,本文会详细进行解释以便于我们在开发应用中需要根据具体情况进行选择...
尽量少用GameObject.Find方法和Object.FindObjectOfType方法来查找游戏对象,可以提前把要查找的游戏对象存储在变量、列表、字典等容器中,方便查找。也可以用GameObject.FindGameObjectWithTag方法来查找游戏对象。 在UI显示字符串的时候,如果一些内容是固定的,我们可以把它拆分开来,这样可以减少使用+号来拼接的次数,减少内存...
禁用状态 + 非根物体 -- GameObject.Find() + Transform.Find() 禁用状态 + 根物体 -- SceneManager.GetActiveScene().GetRootGameObjects() + Transform.Find() 禁用+ 加载场景时不被破坏 -- Resources.FindObjectsOfTypeAll(type) / Object.FindObjectsOfType(true) + Transform.Find() -- 通用方法 其他...
CPU 性能建议以下内容涵盖更深入的性能做法,特别适合在 Unity 和 C# 开发中采用。缓存引用建议在初始化时缓存对所有相关组件和 GameObject 的引用,因为重复函数调用(如 GetComponent<>() 和Camera.main)相对于存储指针的内存成本更昂贵。。 Camera.main 仅在后台使用 FindGameObjectsWithTag(),但而它会以很高的开销...
FindObjectsOfTypeAll (type : Type) : Object[] FindObjectsOfType (type : Type): Object[] GetRuntimeMemorySize (o : Object) : int GetMonoHeapSize GetMonoUsedSize Profiler.BeginSample/EndSample- 对您自己的代码进行性能分析 UnloadUnusedAssets () : AsyncOperation ...
GameObject.Find() 优点: 使用简单方便 不会因为重名而报错,同时查找的是自上而下的第一个物体 缺点 不能查找被隐藏的物体,否则出现“空引用异常”,这是很多新人在查找出现空引用bug的原因。 全局查找(遍历查找),查找效率低,很消耗性能。 代码演示:
该函数通常用于获取指定类型的单个组件实例。如果你想要一次获取多个匹配的组件实例,可以使GameObject.FindObjectsOfType(Type type) 函数。 总而言之,GameObject.FindObjectOfType(Type type) 是一种根据给定类型查找游戏对象的便捷方法,可以用于获取场景中的特定类型的对象引用。
unusedObjects = new List<GameObject>(FindObjectsOfType<GameObject>()); // 获取场景中所有的游戏对象 unusedTextures = new List<Texture2D>(Resources.FindObjectsOfTypeAll<Texture2D>()); // 获取所有的纹理资源 foreach (GameObject obj in unusedObjects) ...
通过Resources.FindObjectsOfTypeAll获取当前所有的对象,通过Profiler.GetRuntimeMemorySize计算每个Object的内存大小,通过Object.name可以获取对象的名字。了解了这些信息可以实现一个简洁的内存Profile工具,对比起Unity提供的Profile工具,自己实现工具可以比较方便的做一些数据落地以及自动采样的过程。