功能说明
在unity中,创建或者导入脚本时候,为了便于管理,需要添加头部信息。下面是一个示例代码,会在创建或者导入脚本时候添加头部信息。
using System;
using System.IO;
using UnityEditor;
using UnityEngine;
public class ScriptPostprocessor : AssetModificationProcessor
{
private static string strHeader = "//============================================\r\n"
+ "// 脚本名:ScriptName\r\n"
+ "// 作者:AuthorName\r\n"
+ "// 创建时间:CreateTime\r\n"
+ "// 描述: \r\n"
+ "//==============================================\r\n";
//创建的新文件
static void OnWillCreateAsset(string assetPath)
{
// 1. 过滤非 .cs 文件
if (!assetPath.EndsWith(".cs")) return;
// 2. 排除插件和包中的脚本
if (assetPath.Contains("Packages/") || assetPath.Contains("Plugins/")) return;
string fullPath = Path.Combine(Directory.GetCurrentDirectory(), assetPath);
// 3. 确保文件存在
EditorApplication.delayCall += () =>
{
if (File.Exists(fullPath))
{
string originalContent = File.ReadAllText(fullPath);
// 检查是否已包含头部信息
if (originalContent.Contains("//============================================")) return;
// 替换作者名和创建时间
string header = strHeader
.Replace("ScriptName", Path.GetFileNameWithoutExtension(fullPath))
.Replace("AuthorName", "yejindeus")
.Replace("CreateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
string finalContent = header + originalContent;
File.WriteAllText(fullPath, finalContent);
AssetDatabase.Refresh();
}
};
//导入的文件
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
{
// 这里只处理导入的新文件
foreach (string assetPath in importedAssets)
{
// 1. 过滤非 .cs 文件
if (!assetPath.EndsWith(".cs")) continue;
// 2. 排除插件和包中的脚本
if (assetPath.Contains("Packages/") || assetPath.Contains("Plugins/")) continue;
string fullPath = Path.Combine(Directory.GetCurrentDirectory(), assetPath);
// 3. 确保文件存在
EditorApplication.delayCall += () =>
{
if (File.Exists(fullPath))
{
try
{
string originalContent = File.ReadAllText(fullPath);
// 4. 检查是否已包含头部信息
if (originalContent.Contains("//============================================")) return;
// 5. 生成头部内容
string header = strHeader
.Replace("ScriptName", Path.GetFileNameWithoutExtension(fullPath))
.Replace("AuthorName", "yejindeus")
.Replace("CreateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// 6. 拼接头部信息和原始内容
string finalContent = header + originalContent;
// 7. 写回文件
File.WriteAllText(fullPath, finalContent);
// 刷新资源
AssetDatabase.Refresh();
}
catch (Exception ex)
{
Debug.LogError($"处理导入的脚本文件 {assetPath} 时发生错误: {ex.Message}");
}
}
};
}
}
}
}