Resources 类允许您查找和访问包括资产在内的对象。
在编辑器中,可以使用 Resources.FindObjectsOfTypeAll 查找资产和场景对象。
所有位于 Assets 文件夹中任何位置名为 "Resources" 的文件夹中的资产都可以通过 Resources.Load 函数访问。可能存在多个 "Resources" 文件夹,加载对象时将检查每个文件夹。
在 Unity 中,您通常不会使用路径名称来访问资产,而是通过声明一个成员变量来公开对资产的引用,然后在检查器中为其赋值。使用此技术时,Unity 可以自动计算构建播放器时使用的资产。这会将播放器的大小大幅度缩减到实际在构建的游戏中使用的资产。将资产放置在 "Resources" 文件夹中时,无法执行此操作,因此 "Resources" 文件夹中的所有资产都将包含在构建中。
使用路径名称的另一个缺点是它会导致代码可重用性降低,因为脚本将对使用的资产放置位置有特定的硬编码要求。另一方面,在检查器中公开的引用是自记录的,并且对您的脚本的用户来说是立即显而易见的。
但是,在某些情况下,通过名称获取资产比在检查器中链接到它更方便。基本上,只要在检查器中为对象分配引用不方便时。例如,您可能希望从脚本中以过程方式创建游戏对象,并例如将纹理分配给过程生成的网格。
一些加载的资产(最显着的纹理)即使在场景中没有实例存在的情况下也会占用内存。要回收不再需要的资产的内存,可以使用 Resources.UnloadUnusedAssets.
注意: 在使用之前,需要创建 Assets 中的 Resources 文件夹。在创建新项目时不会创建它。
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { void Start() { GameObject go = GameObject.CreatePrimitive(PrimitiveType.Plane); Renderer rend = go.GetComponent<Renderer>(); rend.material.mainTexture = Resources.Load("glass") as Texture; } }
FindObjectsOfTypeAll | 返回类型为 T 的所有对象的列表。 |
InstanceIDIsValid | 如果给定的实例 ID 对应于内存中的有效对象,则返回 true。该对象可能已被删除或尚未加载到内存中。 |
InstanceIDsToValidArray | 将实例 ID 数组转换为布尔值数组,指示 instanceIDs 中的给定实例 ID 是否对应于内存中的有效对象。该对象可能已被删除或尚未加载到内存中。 |
InstanceIDToObject | 将实例 ID 转换为对象引用。 |
InstanceIDToObjectList | 将实例 ID 数组转换为对象引用列表。 |
Load | 加载存储在 Resources 文件夹中路径处的请求类型的资产。 |
LoadAll | 加载 Resources 文件夹中路径处的文件夹或文件中的所有资产。 |
LoadAsync | 异步加载存储在 Resources 文件夹中路径处的资产。 |
UnloadAsset | 从内存中卸载 assetToUnload。 |
UnloadUnusedAssets | 卸载未使用的资产。 |