Unity实验室之根据模板自动生成文件

作者: koo叔 分类: Unity3D 发布时间: 2018-03-26 23:03 编辑

前言

在写代码时,会有一些需要重复写的内容,如统一的头注释,统一的框架下的风格一致的代码等,一种解决方案是把这些都放到一个模板文件夹下,每次用时就Copy一下,但这样有几个问题,一是Copy起来比较麻烦,二是需要记住哪个模板生成哪种格式,增加记忆负担。如果能在新建文件时,自己加上或根据类型判断生成需要的模板,那就太好了。下面就来说一下如何做到。

修改Unity模板目录下的文件

Mac下的路径是/Applications/Unity/Unity.app/Contents/Resources/ScriptTemplates
打开后会发现已经有几个定义好的模板文件了:
image
有C#脚本模板,Javascript脚本模板,SurfaceShader模板,
Unlit Shader模板,Image Effect Shader模板,等,
打开其中C#模板来看一下内容:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class #SCRIPTNAME# : MonoBehaviour {

    // Use this for initialization
    void Start () {
        #NOTRIM#
    }
    
    // Update is called once per frame
    void Update () {
        #NOTRIM#
    }
}

SCRIPTNAME,#NOTRIM#,#NOTRIM#,就是在建C#时动态替换的变量,还有里面的Start()和Update()方法,这就是为什么在新建C#项目时,会自动生成Start()和Update()的原因,如果不想生成这两个方法,或是每次都想加上Awake()方法就可以修改这个模板。之后在Unity新建,就会每次带上Awake()方法。<br/>

所以可以用这个方法,定制自己的模板。

利用Editor脚本

上面的方法虽然能达到一些自动化的目的,但有几个缺点:

  • 不够灵活,如果在团队里想共享修改后的模板,需要给每个项目成员的Unity里都Copy一份,如果有新人进来,还需要记着这个事情,修改和维护都不方便
  • 提供的模板有限,只能根据语言判断,不能根据所在文件夹定制想要的文件模板内容。
    还好,Unity提供了一个创建资源时的监听方法,当创建资源,还未保存时可以做一些操作,之后再保存,可以利用这一点来实现我们的目的。如下是一个每次创建文件后生成头部注释的脚本。
    public class ProcessScript : UnityEditor.AssetModificationProcessor {
        private static string COMMENT = "//        __ \\/_\n//       (' \\`\\\n//    _\\, \\ \\\\/ \n//     /`\\/\\ \\\\\n//          \\ \\\\    \n//           \\ \\\\/\\/_\n//           /\\ \\\\'\\\n//         __\\ `\\\\\\\n//          /|`   `\\\\\n//                 \\\\\n//                  \\\\\n//                   \\\\     ,\n//                    `---'    \n//         .............................................  \n//                  GEKKO <=> NEVER BUG \n";
        public static void OnWillCreateAsset(string path){
            path = path.Replace (".meta", "");
            //Debug.Log ("path:==>"+path);
            var index = path.LastIndexOf (".");
            var file = path.Substring (index);
            if(file != ".cs" && file != ".js" && file != ".boo")
                return;
            //var fileExtension = file;
            index = Application.dataPath.LastIndexOf ("Assets");
            path = Application.dataPath.Substring (0, index) + path;
            //Debug.Log ("path:==>"+path);
            file = System.IO.File.ReadAllText (path);
            if(!file.Contains (COMMENT)) {
                file = file.Insert (0, COMMENT);
            }
            System.IO.File.WriteAllText (path, file);
            AssetDatabase.Refresh ();
        }
    }

将这个脚本,放到Editor下每次新建C#文件,就会在头部加上注释,利用这个功能,Unity能实现所有Unity模板提供的功能,也可以实现一些定制化的功能。可以根据需求,灵活开发。而且这个文件放在了工程目录里,可以加入版本管理,团队成员自动拉取代码获得。解决了上面模板方法的不足。

结论

利用Unity 强大的Editor脚本,可以把一些模板代码或统一格式,自动生成出来,既节省了时间,又规范了项目格式。是非常好用的一个工具。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

你的email不会被公开。必填项已用*标注

更多阅读
标签云