自定义资源导入器的抽象基类。
脚本化导入器是与特定文件扩展名关联的脚本。它们由 Unity 的资源管道调用,以将关联文件的内容转换为资源。
使用 ScriptedImporterAttribute 类将自定义导入器注册到资源管道。
ScriptedImporter 的 C# 字段被序列化,就像 MonoBehaviour 上的字段一样。有关详细信息,请参阅 脚本序列化。您可以在 Inspector 中查看这些属性,并使用它们来控制每个资源的导入器行为。要以编程方式访问资源属性的值,请使用 AssetImporter.GetAtPath 并将返回值类型转换为派生自 ScriptedImporter 的正确类。更改值后,通过调用 EditorUtility.SetDirty,然后调用 AssetImporter.SaveAndReimport 来触发新的导入。
using UnityEngine; using UnityEditor.AssetImporters; using System.IO;
[ScriptedImporter(1, "cube")] public class CubeImporter : ScriptedImporter { public float m_Scale = 1;
public override void OnImportAsset(AssetImportContext ctx) { var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); var position = JsonUtility.FromJson<Vector3>(File.ReadAllText(ctx.assetPath));
cube.transform.position = position; cube.transform.localScale = new Vector3(m_Scale, m_Scale, m_Scale);
// 'cube' is a GameObject and will be automatically converted into a Prefab // (Only the 'Main Asset' is eligible to become a Prefab.) ctx.AddObjectToAsset("main obj", cube); ctx.SetMainObject(cube);
var material = new Material(Shader.Find("Standard")); material.color = Color.red;
// Assets must be assigned a unique identifier string consistent across imports ctx.AddObjectToAsset("my Material", material);
// Assets that are not passed into the context as import outputs must be destroyed var tempMesh = new Mesh(); DestroyImmediate(tempMesh); } }
OnImportAsset | 此方法必须由派生类覆盖,并由资源管道调用以导入文件。 |
SupportsRemappedAssetType | 如果您的 ScriptedImporter 支持重新映射特定资源类型,请覆盖此方法。 |
GatherDependenciesFromSourceFile | 您可以实现的静态回调,用于设置对其他资源的工件依赖项,并优化资源的导入顺序。 |
OnValidate | 当导入器加载或 Inspector 中的值更改时,将调用此函数。 |
Reset | 重置为默认值。 |
assetBundleName | 获取或设置 AssetBundle 名称。 |
assetBundleVariant | 获取或设置 AssetBundle 变体。 |
assetPath | 此导入器的资源路径名称。(只读) |
importSettingsMissing | 当导入的资源未提供元文件时,该值为 true。 |
userData | 获取或设置任何用户数据。 |
hideFlags | 对象是否应隐藏、与场景一起保存或用户可修改? |
name | 对象的名称。 |
AddRemap | 将导入的资源(例如 FBX 文件)中的子资源映射到相同类型的外部资源。 |
GetExternalObjectMap | 获取 AssetImporter 使用的外部对象映射的副本。 |
RemoveRemap | 从外部对象映射中删除一项。 |
SaveAndReimport | 如果资源导入器已更改,则保存资源导入器设置。 |
SetAssetBundleNameAndVariant | 设置 AssetBundle 名称和变体。 |
GetInstanceID | 获取对象的实例 ID。 |
ToString | 返回对象的名称。 |
GetAtPath | 检索路径中资源的资源导入器。 |
GetImportLog | 检索在路径中资源导入期间生成的日志。 |
Destroy | 删除游戏对象、组件或资源。 |
DestroyImmediate | 立即销毁对象 obj。强烈建议您改用 Destroy。 |
DontDestroyOnLoad | 加载新场景时不要销毁目标对象。 |
FindAnyObjectByType | 检索类型为 type 的任何已加载活动对象。 |
FindFirstObjectByType | 检索类型为 type 的第一个已加载活动对象。 |
FindObjectsByType | 检索类型为 type 的所有已加载对象的列表。 |
Instantiate | 克隆对象 original 并返回克隆。 |
InstantiateAsync | 捕获原始对象(必须与某个游戏对象相关)的快照,并返回 AsyncInstantiateOperation。 |
bool | 对象是否存在? |
operator != | 比较两个对象是否引用不同的对象。 |
operator == | 比较两个对象引用以查看它们是否引用同一对象。 |