zoukankan      html  css  js  c++  java
  • 《转》Unity3D研究院编辑器之创建Lua脚本模板

    Unity里能创建 c#脚本模板,但是如果我想创建Lua脚本模板怎么办呢?拓展一下编辑器吧。

    设置一下Lua脚本的模板地址 :  Assets/Editor/Lua/Template/lua.lua

    using UnityEngine;
    using UnityEditor;
    using System;
    using System.IO;
    using System.Text;
    using UnityEditor.ProjectWindowCallback;
    using System.Text.RegularExpressions;
     
    public class Test
    {
        [MenuItem("Assets/Create/Lua Script", false, 80)]
        public static void CreatNewLua()
        {
            ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0,
            ScriptableObject.CreateInstance<MyDoCreateScriptAsset>(),
            GetSelectedPathOrFallback() + "/New Lua.lua",
            null,
           "Assets/Editor/Lua/Template/lua.lua");
        }
     
     
     
        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 MyDoCreateScriptAsset : 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, "#NAME#", fileNameWithoutExtension);
            //string text2 = Regex.Replace(fileNameWithoutExtension, " ", string.Empty);
            //text = Regex.Replace(text, "#SCRIPTNAME#", text2);
            //if (char.IsUpper(text2, 0))
            //{
            //    text2 = char.ToLower(text2[0]) + text2.Substring(1);
            //    text = Regex.Replace(text, "#SCRIPTNAME_LOWER#", text2);
            //}
            //else
            //{
            //    text2 = "my" + char.ToUpper(text2[0]) + text2.Substring(1);
            //    text = Regex.Replace(text, "#SCRIPTNAME_LOWER#", text2);
            //}
            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));
        }
     
    }

    因为是模板就可以添加一些预制代码在上面, 当填写完类名后可以来替换操作,  例如unity自带的 创建C#文件, 外面写了类名里面也跟这变。Creat -> Lua Script

    然后可以输入Lua脚本的类名

    然后就根据自己创建Lua的文件名 正则替换模板里的东西了。

  • 相关阅读:
    php 实现四种排序两种查找
    GIT常用命令
    2016-the brave never die
    Apache 的ab压力测试工具
    SQL语句优化实践
    C#设计模式:访问者模式(Vistor Pattern)
    泛型反射性能优化
    C#GC垃圾回收和析构函数和IDisposable的使用
    C#配合大数据开发,nest.dll的使用
    C#导出大量数据到excel,怎么提升性能
  • 原文地址:https://www.cnblogs.com/zhaolaosan/p/5937813.html
Copyright © 2011-2022 走看看