unity爲我們提供了自定義資源導入的流程,通過該流程,我們可以
- 對導入的資源進行檢查,及預處理,比如檢查貼圖是否是2的n次冪,設置貼圖參數,創建預製等
- 對unity無法識別的資源,加入導入流程
方法:派生 ScriptedImporter,並實現 OnImportAsset() 方法。
例子
using UnityEngine;
using UnityEditor;
using UnityEditor.Experimental.AssetImporters;
using System.IO;
/// <summary>
/// 識別並導入後綴是.custom的文件資源,這裏我們的測試資源是個txt文本文件,存儲了一個 Json 格式的 Vector3 數據
/// </summary>
[ScriptedImporter(1, "custom")]
public class CustomAssetType : ScriptedImporter
{
public override void OnImportAsset(AssetImportContext ctx)
{
// 創建立方體
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
// 從資源文件讀取位置
var pos = JsonUtility.FromJson<Vector3>(File.ReadAllText(ctx.assetPath));
cube.transform.position = pos;
cube.transform.localScale = Vector3.one;
// 將立方體綁定到對象上
ctx.AddObjectToAsset("obj", cube);
ctx.SetMainObject(cube);
// 添加材質
Material mtl = new Material(Shader.Find("Standard"));
mtl.color = Color.red;
ctx.AddObjectToAsset("material", mtl);
}
}