Unity学习笔记--自定义文件的处理:Scripted Importers的简单使用

前言

我们知道,当我们把一些Unity支持的一些特定后缀名资源导入到UnityProject中时,点击这个资源,查看Inspector窗口,我们可以修改这个资源的一些属性。

比如我导入了一张图片,在Project窗口点击这个图片,再点击Inspector窗口,就可以看到这些属性。
在这里插入图片描述
但是需要注的是:Unity只会对特定的资源做一些处理。
在这里插入图片描述
那如果是Unity没有进行处理的资源呢,比如后缀名为 .abc.lua。这个时候我们还是想针对于某一个自定义资源做处理该怎么办呢?
这个时候就需要我们的Scripted Importers了。

Scripted Importers基本介绍

让我们来看看Unity官方给我们的介绍。
在这里插入图片描述
简单来说就是Unity不支持的文件,我们可以使用Scripted Importers来解决。

应用实例

假设我们现在有一个后缀名为 .cppp的文件(绝对不是仿照 .cpp!),然后我们想导入到Unity中,对这个资源做一些配置,但是Unity并没有支持 .cppp文件,那么我们就不能直接修改它的值了。这个时候就需要用到Scripted Importers了。

第一步

首先我们在Assets文件夹下新建一个Scripts文件夹,然后再Scripts文件夹下新建一个Editor文件夹。在Editor下面新建一个C# 脚本,类一定要继承ScriptedImporter!!!

using UnityEngine;
using UnityEditor.AssetImporters;
using System.IO;

//如果导入是.cppp文件
[ScriptedImporter(1, ".cppp")]
public class CpppScriptImporter : ScriptedImporter
{
    
    
    //AssetImportContext其实就是上下文,具体可以看官方文档
    public override void OnImportAsset(AssetImportContext ctx)
    {
    
    
        Debug.Log(".cppp OnImportAsset");
        string cpppTxt = File.ReadAllText(ctx.assetPath);//获取导入资源的路径,并且通过File读取所有的Text
        var assetText = new TextAsset(cpppTxt);//生成一个TextAsset对象
        var material = new Material(Shader.Find("Standard"));//生成一个Material对象(不要问我.cppp为什么有材质,因为这是测试用的!)
        material.color = Color.red;//定义材质的颜色
        ctx.AddObjectToAsset("assetText", assetText);//加入到Asset中(可以显示在Inspector窗口中)
        ctx.AddObjectToAsset("material", material);//同理

        ctx.SetMainObject(assetText);//设置主对象,下方会解释这个方法
    }
}

第二步

新建一个文件,修改后缀名为 .cppp,然后导入到Unity中。

效果

我们发现这个文件可以在Inspector窗口查看了,并且在Console窗口打印了。(你可以把上述代码先注释,看看有没有什么不一样)
在这里插入图片描述
在这里插入图片描述

关于ctx.SetMainObject()

多说无用,直接上不同代码,再看不同效果就很显然了。
基于上述代码。
如果是

ctx.SetMainObject(assetText);

效果是这样的
在这里插入图片描述
如果改成

ctx.SetMainObject(material);

就变成这样了
在这里插入图片描述
我相信你现在应该明白这个方法的意思了。

更多使用方法

更多的使用方法可以参考Unity的官方文档。
官方文档

项目地址

项目地址

猜你喜欢

转载自blog.csdn.net/qq_52855744/article/details/124864896