| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEditor.ProjectWindowCallback; |
| | | using UnityEngine; |
| | | using UnityEditor; |
| | | using System; |
| | | using System.IO; |
| | | using System.Text; |
| | | using System.Text.RegularExpressions; |
| | | |
| | | public class CreateUIClassFile |
| | | { |
| | | |
| | | static string templatePath = "Assets/Editor/ScriptTemplate/UIMonobehaviorScriptTemplate.txt"; |
| | | |
| | | [MenuItem("Assets/Create/Custom C# Script/UIBehaviour", false, 4)] |
| | | public static void CreateUIClass() |
| | | { |
| | | var newConfigPath = GetSelectedPathOrFallback() + "/NewUIBehaviour.cs"; |
| | | AssetDatabase.DeleteAsset(newConfigPath); |
| | | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<UIClassTemplate>(), newConfigPath, null, templatePath); |
| | | } |
| | | |
| | | 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 UIClassTemplate : EndNameEditAction |
| | | { |
| | | |
| | | public override void Action(int instanceId, string pathName, string resourceFile) |
| | | { |
| | | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile); |
| | | ProjectWindowUtil.ShowCreatedAsset(o); |
| | | } |
| | | |
| | | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile) |
| | | { |
| | | string fullPath = Path.GetFullPath(pathName); |
| | | |
| | | StreamReader streamReader = new StreamReader(resourceFile); |
| | | string text = streamReader.ReadToEnd(); |
| | | streamReader.Close(); |
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); |
| | | text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension); |
| | | text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString()); |
| | | |
| | | bool encoderShouldEmitUTF8Identifier = true; |
| | | bool throwOnInvalidBytes = false; |
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes); |
| | | bool append = false; |
| | | StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding); |
| | | streamWriter.Write(text); |
| | | streamWriter.Close(); |
| | | AssetDatabase.ImportAsset(pathName); |
| | | return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object)); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | public class CreateUIWindowClassFile |
| | | { |
| | | |
| | | static string templatePath = "Assets/Editor/ScriptTemplate/WindowTemplate.txt"; |
| | | |
| | | [MenuItem("Assets/Create/Custom C# Script/Window", false, 5)] |
| | | public static void CreateUIClass() |
| | | { |
| | | var newConfigPath = GetSelectedPathOrFallback() + "/NewWindow.cs"; |
| | | AssetDatabase.DeleteAsset(newConfigPath); |
| | | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<UIWindowTemplate>(), newConfigPath, null, templatePath); |
| | | } |
| | | |
| | | 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 UIWindowTemplate : EndNameEditAction |
| | | { |
| | | |
| | | public override void Action(int instanceId, string pathName, string resourceFile) |
| | | { |
| | | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile); |
| | | ProjectWindowUtil.ShowCreatedAsset(o); |
| | | } |
| | | |
| | | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile) |
| | | { |
| | | string fullPath = Path.GetFullPath(pathName); |
| | | |
| | | StreamReader streamReader = new StreamReader(resourceFile); |
| | | string text = streamReader.ReadToEnd(); |
| | | streamReader.Close(); |
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); |
| | | text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension); |
| | | text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString()); |
| | | |
| | | bool encoderShouldEmitUTF8Identifier = true; |
| | | bool throwOnInvalidBytes = false; |
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes); |
| | | bool append = false; |
| | | StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding); |
| | | streamWriter.Write(text); |
| | | streamWriter.Close(); |
| | | AssetDatabase.ImportAsset(pathName); |
| | | return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object)); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | public class CreateDTCClassFile |
| | | { |
| | | |
| | | static string templatePath = "Assets/Editor/ScriptTemplate/DataToCotrollerTemplate.txt"; |
| | | |
| | | [MenuItem("Assets/Create/Custom C# Script/DTC", false, 6)] |
| | | public static void CreateUIClass() |
| | | { |
| | | var newConfigPath = GetSelectedPathOrFallback() + "/NewDTC.cs"; |
| | | AssetDatabase.DeleteAsset(newConfigPath); |
| | | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<DTCTemplate>(), newConfigPath, null, templatePath); |
| | | } |
| | | |
| | | 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 DTCTemplate : EndNameEditAction |
| | | { |
| | | |
| | | public override void Action(int instanceId, string pathName, string resourceFile) |
| | | { |
| | | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile); |
| | | AddPackageRigster(pathName); |
| | | ProjectWindowUtil.ShowCreatedAsset(o); |
| | | } |
| | | |
| | | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile) |
| | | { |
| | | string fullPath = Path.GetFullPath(pathName); |
| | | |
| | | StreamReader streamReader = new StreamReader(resourceFile); |
| | | string text = streamReader.ReadToEnd(); |
| | | streamReader.Close(); |
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); |
| | | text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension); |
| | | text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString()); |
| | | text = Regex.Replace(text, "#ServerPackage#", fileNameWithoutExtension.Replace("DTC", "")); |
| | | |
| | | bool encoderShouldEmitUTF8Identifier = true; |
| | | bool throwOnInvalidBytes = false; |
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes); |
| | | bool append = false; |
| | | StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding); |
| | | streamWriter.Write(text); |
| | | streamWriter.Close(); |
| | | AssetDatabase.ImportAsset(pathName); |
| | | return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object)); |
| | | } |
| | | |
| | | internal static void AddPackageRigster(string _pathName) |
| | | { |
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(_pathName); |
| | | string packageName = fileNameWithoutExtension.Replace("DTC", "H"); |
| | | string add = string.Format("Register(typeof({0}), typeof({1}));", packageName, fileNameWithoutExtension); |
| | | |
| | | string path = Application.dataPath + "/Scripts/Core/GameEngine/DataToCtl/PackageRegedit.cs"; |
| | | var text = File.ReadAllText(path); |
| | | |
| | | if (!text.Contains(add)) |
| | | { |
| | | text = text.Replace("登记相应的数据体及对应的数据转逻辑类\r\n", "登记相应的数据体及对应的数据转逻辑类\r\n" + "\t\t" + add + "\r\n"); |
| | | } |
| | | |
| | | bool encoderShouldEmitUTF8Identifier = true; |
| | | bool throwOnInvalidBytes = false; |
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes); |
| | | bool append = false; |
| | | StreamWriter streamWriter = new StreamWriter(path, append, encoding); |
| | | streamWriter.Write(text); |
| | | streamWriter.Close(); |
| | | AssetDatabase.ImportAsset(path); |
| | | |
| | | } |
| | | |
| | | static string templatePath = "Assets/Editor/ScriptTemplate/ShaderPattern.txt"; |
| | | |
| | | [MenuItem("Assets/Create/Shader/VF Shader", false, 4)] |
| | | public static void CreateUIClass() |
| | | { |
| | | var newConfigPath = GetSelectedPathOrFallback() + "/VF Shader.Shader"; |
| | | AssetDatabase.DeleteAsset(newConfigPath); |
| | | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<VFShaderTemplate>(), newConfigPath, null, templatePath); |
| | | } |
| | | |
| | | 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 VFShaderTemplate : EndNameEditAction |
| | | { |
| | | |
| | | public override void Action(int instanceId, string pathName, string resourceFile) |
| | | { |
| | | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile); |
| | | ProjectWindowUtil.ShowCreatedAsset(o); |
| | | } |
| | | |
| | | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile) |
| | | { |
| | | string fullPath = Path.GetFullPath(pathName); |
| | | |
| | | StreamReader streamReader = new StreamReader(resourceFile); |
| | | string text = streamReader.ReadToEnd(); |
| | | streamReader.Close(); |
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); |
| | | var names = fileNameWithoutExtension.Split('_'); |
| | | |
| | | text = Regex.Replace(text, "#NAME*#", names.Length > 0 ? names[0] : string.Empty); |
| | | text = Regex.Replace(text, "#Character#", names.Length > 1 ? names[1] : string.Empty); |
| | | |
| | | bool encoderShouldEmitUTF8Identifier = true; |
| | | bool throwOnInvalidBytes = false; |
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes); |
| | | bool append = false; |
| | | StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding); |
| | | streamWriter.Write(text); |
| | | streamWriter.Close(); |
| | | AssetDatabase.ImportAsset(pathName); |
| | | return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object)); |
| | | } |
| | | |
| | | } |
| | | using System.Collections;
|
| | | using System.Collections.Generic;
|
| | | using UnityEditor.ProjectWindowCallback;
|
| | | using UnityEngine;
|
| | | using UnityEditor;
|
| | | using System;
|
| | | using System.IO;
|
| | | using System.Text;
|
| | | using System.Text.RegularExpressions;
|
| | |
|
| | | public class CreateUIClassFile
|
| | | {
|
| | |
|
| | | static string templatePath = "Assets/Editor/ScriptTemplate/UIMonobehaviorScriptTemplate.txt";
|
| | |
|
| | | [MenuItem("Assets/Create/Custom C# Script/UIBehaviour", false, 4)]
|
| | | public static void CreateUIClass()
|
| | | {
|
| | | var newConfigPath = GetSelectedPathOrFallback() + "/NewUIBehaviour.cs";
|
| | | AssetDatabase.DeleteAsset(newConfigPath);
|
| | | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<UIClassTemplate>(), newConfigPath, null, templatePath);
|
| | | }
|
| | |
|
| | | 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 UIClassTemplate : EndNameEditAction
|
| | | {
|
| | |
|
| | | public override void Action(int instanceId, string pathName, string resourceFile)
|
| | | {
|
| | | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile);
|
| | | ProjectWindowUtil.ShowCreatedAsset(o);
|
| | | }
|
| | |
|
| | | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile)
|
| | | {
|
| | | string fullPath = Path.GetFullPath(pathName);
|
| | |
|
| | | StreamReader streamReader = new StreamReader(resourceFile);
|
| | | string text = streamReader.ReadToEnd();
|
| | | streamReader.Close();
|
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName);
|
| | | text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension);
|
| | | text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString());
|
| | |
|
| | | bool encoderShouldEmitUTF8Identifier = true;
|
| | | bool throwOnInvalidBytes = false;
|
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
|
| | | bool append = false;
|
| | | StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding);
|
| | | streamWriter.Write(text);
|
| | | streamWriter.Close();
|
| | | AssetDatabase.ImportAsset(pathName);
|
| | | return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object));
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | |
|
| | | public class CreateUIWindowClassFile
|
| | | {
|
| | |
|
| | | static string templatePath = "Assets/Editor/ScriptTemplate/WindowTemplate.txt";
|
| | |
|
| | | [MenuItem("Assets/Create/Custom C# Script/Window", false, 5)]
|
| | | public static void CreateUIClass()
|
| | | {
|
| | | var newConfigPath = GetSelectedPathOrFallback() + "/NewWindow.cs";
|
| | | AssetDatabase.DeleteAsset(newConfigPath);
|
| | | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<UIWindowTemplate>(), newConfigPath, null, templatePath);
|
| | | }
|
| | |
|
| | | 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 UIWindowTemplate : EndNameEditAction
|
| | | {
|
| | |
|
| | | public override void Action(int instanceId, string pathName, string resourceFile)
|
| | | {
|
| | | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile);
|
| | | ProjectWindowUtil.ShowCreatedAsset(o);
|
| | | }
|
| | |
|
| | | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile)
|
| | | {
|
| | | string fullPath = Path.GetFullPath(pathName);
|
| | |
|
| | | StreamReader streamReader = new StreamReader(resourceFile);
|
| | | string text = streamReader.ReadToEnd();
|
| | | streamReader.Close();
|
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName);
|
| | | text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension);
|
| | | text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString());
|
| | |
|
| | | bool encoderShouldEmitUTF8Identifier = true;
|
| | | bool throwOnInvalidBytes = false;
|
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
|
| | | bool append = false;
|
| | | StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding);
|
| | | streamWriter.Write(text);
|
| | | streamWriter.Close();
|
| | | AssetDatabase.ImportAsset(pathName);
|
| | | return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object));
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | |
|
| | | public class CreateDTCClassFile
|
| | | {
|
| | |
|
| | | static string templatePath = "Assets/Editor/ScriptTemplate/DataToCotrollerTemplate.txt";
|
| | |
|
| | | [MenuItem("Assets/Create/Custom C# Script/DTC", false, 6)]
|
| | | public static void CreateUIClass()
|
| | | {
|
| | | var newConfigPath = GetSelectedPathOrFallback() + "/NewDTC.cs";
|
| | | AssetDatabase.DeleteAsset(newConfigPath);
|
| | | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<DTCTemplate>(), newConfigPath, null, templatePath);
|
| | | }
|
| | |
|
| | | 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 DTCTemplate : EndNameEditAction
|
| | | {
|
| | |
|
| | | public override void Action(int instanceId, string pathName, string resourceFile)
|
| | | {
|
| | | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile);
|
| | | AddPackageRigster(pathName);
|
| | | ProjectWindowUtil.ShowCreatedAsset(o);
|
| | | }
|
| | |
|
| | | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile)
|
| | | {
|
| | | string fullPath = Path.GetFullPath(pathName);
|
| | |
|
| | | StreamReader streamReader = new StreamReader(resourceFile);
|
| | | string text = streamReader.ReadToEnd();
|
| | | streamReader.Close();
|
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName);
|
| | | text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension);
|
| | | text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString());
|
| | | text = Regex.Replace(text, "#ServerPackage#", fileNameWithoutExtension.Replace("DTC", ""));
|
| | |
|
| | | bool encoderShouldEmitUTF8Identifier = true;
|
| | | bool throwOnInvalidBytes = false;
|
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
|
| | | bool append = false;
|
| | | StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding);
|
| | | streamWriter.Write(text);
|
| | | streamWriter.Close();
|
| | | AssetDatabase.ImportAsset(pathName);
|
| | | return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object));
|
| | | }
|
| | |
|
| | | internal static void AddPackageRigster(string _pathName)
|
| | | {
|
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(_pathName);
|
| | | string packageName = fileNameWithoutExtension.Replace("DTC", "H");
|
| | | string add = string.Format("Register(typeof({0}), typeof({1}));", packageName, fileNameWithoutExtension);
|
| | |
|
| | | string path = Application.dataPath + "/Scripts/Core/GameEngine/DataToCtl/PackageRegedit.cs";
|
| | | var text = File.ReadAllText(path);
|
| | |
|
| | | if (!text.Contains(add))
|
| | | {
|
| | | text = text.Replace("登记相应的数据体及对应的数据转逻辑类\r\n", "登记相应的数据体及对应的数据转逻辑类\r\n" + "\t\t" + add + "\r\n");
|
| | | }
|
| | |
|
| | | bool encoderShouldEmitUTF8Identifier = true;
|
| | | bool throwOnInvalidBytes = false;
|
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
|
| | | bool append = false;
|
| | | StreamWriter streamWriter = new StreamWriter(path, append, encoding);
|
| | | streamWriter.Write(text);
|
| | | streamWriter.Close();
|
| | | AssetDatabase.ImportAsset(path);
|
| | |
|
| | | }
|
| | |
|
| | | static string templatePath = "Assets/Editor/ScriptTemplate/ShaderPattern.txt";
|
| | |
|
| | | [MenuItem("Assets/Create/Shader/VF Shader", false, 4)]
|
| | | public static void CreateUIClass()
|
| | | {
|
| | | var newConfigPath = GetSelectedPathOrFallback() + "/VF Shader.Shader";
|
| | | AssetDatabase.DeleteAsset(newConfigPath);
|
| | | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<VFShaderTemplate>(), newConfigPath, null, templatePath);
|
| | | }
|
| | |
|
| | | 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 VFShaderTemplate : EndNameEditAction
|
| | | {
|
| | |
|
| | | public override void Action(int instanceId, string pathName, string resourceFile)
|
| | | {
|
| | | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile);
|
| | | ProjectWindowUtil.ShowCreatedAsset(o);
|
| | | }
|
| | |
|
| | | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile)
|
| | | {
|
| | | string fullPath = Path.GetFullPath(pathName);
|
| | |
|
| | | StreamReader streamReader = new StreamReader(resourceFile);
|
| | | string text = streamReader.ReadToEnd();
|
| | | streamReader.Close();
|
| | | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName);
|
| | | var names = fileNameWithoutExtension.Split('_');
|
| | |
|
| | | text = Regex.Replace(text, "#NAME*#", names.Length > 0 ? names[0] : string.Empty);
|
| | | text = Regex.Replace(text, "#Character#", names.Length > 1 ? names[1] : string.Empty);
|
| | |
|
| | | bool encoderShouldEmitUTF8Identifier = true;
|
| | | bool throwOnInvalidBytes = false;
|
| | | UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
|
| | | bool append = false;
|
| | | StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding);
|
| | | streamWriter.Write(text);
|
| | | streamWriter.Close();
|
| | | AssetDatabase.ImportAsset(pathName);
|
| | | return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object));
|
| | | }
|
| | |
|
| | | }
|