using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Text;
using System.Text.RegularExpressions;
using UnityEditor;
using System.IO;
using UnityEditor.ProjectWindowCallback;
public class AutoCreatScripts
{
//ProjectWindowUtil.StartNameEditingIfProjectWindowExists();
[MenuItem("Assets/Create/U3DEventFrame Lua Script", false, 80)]
public static void CreatNewLua()
{
ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0,
ScriptableObject.CreateInstance<CraetLuaScriptAsset>(),
GetSelectedPathOrFallBack() + "/New Lua.lua",
null,
"Assets/MyFrame/Editor/LuaClass.lua"
);
}
[MenuItem("Assets/Create/U3DEventFrame C# Script",false,70)]
public static void CreatEventCs()
{
ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0,
ScriptableObject.CreateInstance<CraetEventCSScriptAsset>(),
GetSelectedPathOrFallBack()+"/New Script.cs",
null,
"Assets/MyFrame/Editor/EventCSClass.cs" // 只需要在此文件夹下创建你需要的模板,命名与EventCSClass.cs一致就行
);
}
public static string GetSelectedPathOrFallBack()
{
string path = "Assets";
foreach (UnityEngine.Object obj in Selection.GetFiltered(typeof(UnityEngine.Object),SelectionMode.Assets))
{
path = AssetDatabase.GetAssetPath(obj);
if (!string.IsNullOrEmpty(path) && File.Exists(path))
{
path = Path.GetDirectoryName(path);
break;
}
}
return path;
}
class CraetLuaScriptAsset : EndNameEditAction
{
public override void Action(int instanceId, string pathName, string resourceFile)
{
UnityEngine.Object o = CreatScriptAssetFormTemplate(pathName, resourceFile);
ProjectWindowUtil.ShowCreatedAsset(o);
}
internal static UnityEngine.Object CreatScriptAssetFormTemplate(string pathName, string resourcesFile)
{
string fullName = Path.GetFullPath(pathName);
StreamReader streamReader = new StreamReader(resourcesFile);
string text = streamReader.ReadToEnd();
streamReader.Close();
string fileNameWithOutExtension = Path.GetFileNameWithoutExtension(pathName);
Debug.Log("text == "+text);
text = Regex.Replace(text,"LuaClass", fileNameWithOutExtension);
bool encoderShouldEmitUTF8Identifier = true;
bool throwOnInvalidBytes = false;
UTF8Encoding uTF8Encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
bool append = false;
StreamWriter streamWriter = new StreamWriter(fullName,append, uTF8Encoding);
streamWriter.Write(text);
streamWriter.Close();
AssetDatabase.ImportAsset(pathName);
return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object));
}
}
class CraetEventCSScriptAsset : EndNameEditAction
{
public override void Action(int instanceId, string pathName, string resourceFile)
{
UnityEngine.Object o = CreatScriptAssetFormTemplate(pathName, resourceFile);
ProjectWindowUtil.ShowCreatedAsset(o);
}
internal static UnityEngine.Object CreatScriptAssetFormTemplate(string pathName, string resourcesFile)
{
string fullName = Path.GetFullPath(pathName);
StreamReader streamReader = new StreamReader(resourcesFile);
string text = streamReader.ReadToEnd();
streamReader.Close();
string fileNameWithOutExtension = Path.GetFileNameWithoutExtension(pathName);
Debug.Log("text == " + text);
text = Regex.Replace(text, "EventCSClass", fileNameWithOutExtension);
bool encoderShouldEmitUTF8Identifier = true;
bool throwOnInvalidBytes = false;
UTF8Encoding uTF8Encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
bool append = false;
StreamWriter streamWriter = new StreamWriter(fullName, append, uTF8Encoding);
streamWriter.Write(text);
streamWriter.Close();
AssetDatabase.ImportAsset(pathName);
return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object));
}
}
}
网友评论