找回密码
 立即注册
查看: 297|回复: 0

[简易教程] Unity自定义创建Lua脚本

[复制链接]
发表于 2022-2-12 08:11 | 显示全部楼层 |阅读模式
public class CreateLuaScript : EndNameEditAction
{
    /// <summary>
    /// 编辑器模式下,新建文件重命名后调用
    /// </summary>
    /// <param name="instanceId">新建文件的ID</param>
    /// <param name="pathName"></param>
    /// <param name="resourceFile"></param>
    public override void Action(int instanceId, string pathName, string resourceFile)
    {
        UnityEngine.Object obj = CreateScriptFormTemplate(pathName, resourceFile);

        // 高亮选中该资源
        ProjectWindowUtil.ShowCreatedAsset(obj);
    }

    /// <summary>
    ///
    /// </summary>
    /// <param name="fullPathOfCreatingFile">新创建的文件所在路径(含新文件名及扩展名)</param>
    /// <param name="templateFile">模板文件所在路径(含文件名及扩展名)</param>
    /// <returns></returns>
    private UnityEngine.Object CreateScriptFormTemplate(string fullPathOfCreatingFile, string templateFile)
    {
        //读取模板文件内容
        StreamReader streamReader = new StreamReader(templateFile);
        string text = streamReader.ReadToEnd();
        streamReader.Close();

        //只获取文件名不包括扩展名
        string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fullPathOfCreatingFile);

        // 替换lua脚本中的表名
        text = text.Replace("#LuaClass#", fileNameWithoutExtension);

        //将替换好的内容写入新文件
        StreamWriter streamWriter = new StreamWriter(fullPathOfCreatingFile);
        streamWriter.Write(text);
        streamWriter.Close();

        //导入创建的新文件  
        AssetDatabase.ImportAsset(fullPathOfCreatingFile);

        //返回指定路径下的Object对象
        return AssetDatabase.LoadAssetAtPath(fullPathOfCreatingFile, typeof(UnityEngine.Object));
    }
}

public class CustomAssetEditor
{
    static string systemFileName = "/NewLuaScript.lua";
    static string tempFileName = "Assets/Editor/felixwee/templates/lua_template.lua";

    //第二个参数为true时,Lua Scipr不显示,第三个参数为优先级,表示上下排列的顺序,小的在上
    [MenuItem("Assets/Create/Lua Script",false,1)]
    public static void CreateLuaScript()
    {
        //获取选中的,且符合条件的所有对象
        UnityEngine.Object[] arr = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.TopLevel);
        //获取第一个文件的文件夹路径
        string folder = AssetDatabase.GetAssetPath(arr[0]);

        //选中文件夹,并进行重命名      
        //id,回调处理,新建文件url,图标,源始文件url   
        ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<CreateLuaScript>(), folder + systemFileName, null, tempFileName);
    }
}
Unity编辑器扩展之创建lua模板文件 | 易学教程 (e-learn.cn)
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-6 14:02 , Processed in 0.096409 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表