Unity 启动时自动运行编辑器脚本-InitializeOnLoad

应用场景: 有些时候我们希望一些编辑器脚本可以在打开Unity编辑器时就自动运行,而不是被手动执行;

InitializeOnLoad特性用于解决这个问题,只需要给一个类加上该特性以及给这个类声明一个static构造函数;这个静态构造函数将会在这个类所有静态函数和实例被使用前调用,InitializeOnLoad会保证该函数在打开unity编辑器时就开始执行,而不是在运行时才启动;

using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
class MyClass
{
    static MyClass ()
    {
        //update是一个委托类型的变量
        EditorApplication.update += Update;
    }

    static void Update ()
    {
        Debug.Log("Updating");
    }
}

示例:如果有一些资源,比如ScriptableObject对象,希望打开编辑器时自动创建,而不是由开发者手动创建,就需要用到这个功能;

InitializeOnLoadMethod():用于一个静态方法前,类似[MenuItem]

Unity中创建一个编辑器扩展来自动处理图片文件命名,你需要编写一个Custom Asset Importers脚本。下面是一个简单的步骤概述: 1. **创建一个新脚本**: - 新建一个C#脚本,例如`ImageFileNamingEditorExtension.cs`。 2. **继承Unity的AssetImporter预设类**: -脚本继承自`UnityEditor.AssetImporters.ScriptableImportHandler`或更具体的`UnityEditor.ImageProcessing.ImageImporterPlus`,取决于你是否需要图像处理功能。 ```csharp using UnityEditor; using UnityEngine; [ScriptableImportHandler(("_import", "Texture2D"), IsHierarchical = false)] public class ImageFileNamingEditorExtension : ScriptableImportHandler { //... 实现内容... } ``` 3. **处理导入操作**: - 在`OnImportAsset`方法中,获取待导入的图片路径,然后根据需求生成新的文件名。 4. **修改文件名**: - 使用`AssetDatabase.MoveAsset`方法,指定新的文件名,并将旧路径作为源参数。 5. **添加前缀和序列号**: - 可能需要遍历目标目录寻找已有文件,确定当前最高序号,加上前缀如"img_"。 ```csharp int sequenceNumber = 0; string newName = $"{prefix}_{sequenceNumber++}.png"; // 假设前缀是"img" if (System.IO.File.Exists(targetPath)) { string[] existingFiles = System.IO.Directory.GetFiles(Application.dataPath, $"{prefix}*.png"); int.TryParse(System.IO.Path.GetFileNameWithoutExtension(existingFiles.Last()), out sequenceNumber); } newName = Path.Combine(Application.dataPath, newName); AssetDatabase.MoveAsset(importedAsset.fullPath, new AssetPath(newName)); ``` 6. **注册脚本**: - 在`InitializeOnLoad`函数中,通过`UnityEditor.AssetPostprocessor.RegisterProcessor`注册你的脚本到特定类型的导入流程。 7. **测试和调试**: -Unity编辑器中导入图片,看看是否按照预期生成了文件名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值