版本: Unity 6 (6000.0)
语言English
  • C#

LazyLoadReference<T0>

UnityEngine 中的结构体

/

实现于:UnityEngine.CoreModule

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每一项更改建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

对包含在资产文件中的 UnityEngine.Object 的可序列化延迟引用。

允许一个资产引用另一个资产,但延迟加载引用的资产,直到它被使用,而不是在引用对象被反序列化时加载它。

典型用例:
- 对于需要引用资产的导入器设置,但从磁盘读取设置无法加载引用的资产,因为它们可能尚未导入且尚不可访问。
- 通过仅加载编辑模式下初始设置或显示所需的资产来减少打开场景所需的时间。

备注

  • 与直接引用相比,延迟引用会产生轻微的性能开销。
  • 在独立播放器中,所有资产在播放器加载时或资产包加载时加载。
using UnityEditor.AssetImporters;
using UnityEngine;

[ScriptedImporter(1, "foo")] public class FooImporter : ScriptedImporter { public LazyLoadReference<Material> m_DefaultMaterial;

public override void OnImportAsset(AssetImportContext ctx) { // At this point, 'm_DefaultMaterial' may refer to a material that has yet to be loaded into memory

Material mat; if (!m_DefaultMaterial.isSet) // 'isSet' Does not load the referenced material even if not in memory. { mat = new Material(Shader.Find("Transparent/Diffuse")); ctx.AddObjectToAsset("mat", mat); } else { mat = m_DefaultMaterial.asset; // Will load referenced material if it is not already in memory. }

var obj = GameObject.CreatePrimitive(PrimitiveType.Cube); obj.transform.GetComponent<MeshRenderer>().material = mat;

ctx.AddObjectToAsset("main", obj); ctx.SetMainObject(obj); } }

属性

asset对引用的资产的访问器。
instanceID返回对引用的资产的实例 ID。
isBroken检查引用是否已损坏的便捷属性:指的是不可用或不可加载的对象。
isSet确定是否正在目标化资产,无论该资产是否可用于加载。

构造函数

LazyLoadReference_1构造一个新的 LazyLoadReference。

运算符

LazyLoadReference<T>从资产引用到 LazyLoadReference 的隐式转换。
LazyLoadReference<T>从实例 ID 到 LazyLoadReference 的隐式转换。