• unity之定制脚本模板


    1、unity的脚本模板

           新版本unity中的C#脚本有三类,第一类是我们平时开发用的C# Script;第二类是Testing,用来做单元测试;第三类是Playables,用作TimeLine中管理时间线上每一帧的动画、声音等。我们点击创建脚本时,会自动生成unity内置的一套模板:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class NewBehaviourScript : MonoBehaviour {
    
        // Use this for initialization
        void Start () {
            
        }
        
        // Update is called once per frame
        void Update () {
            
        }
    }
    如果我们开发时使用的框架有明显的一套基础模板, 那为项目框架定制一套模板会很有意义,这样可以为我们省去编写重复代码的时间。这里介绍两种方法。
     

    2、修改默认脚本模板

        打开unity安装目录,比如D:unity2018EditorDataResourcesScriptTemplates,unity内置的模板脚本都在这里,那么可以直接修改这里的cs文件,比如我们将81-C# Script-NewBehaviourScript.cs.txt文件修改为如下,那下次创建C# Script时模板就会变成这样:
    ////////////////////////////////////////////////////////////////////
    //                          _ooOoo_                               //
    //                         o8888888o                              //
    //                         88" . "88                              //
    //                         (| ^_^ |)                              //
    //                         O  =  /O                              //
    //                      ____/`---'\____                           //
    //                    .'  \|     |//  `.                         //
    //                   /  \|||  :  |||//                          //
    //                  /  _||||| -:- |||||-                         //
    //                  |   | \  -  /// |   |                       //
    //                  | \_|  ''---/''  |   |                       //
    //                    .-\__  `-`  ___/-. /                       //
    //                ___`. .'  /--.--  `. . ___                     //
    //              ."" '<  `.___\_<|>_/___.'  >'"".                  //
    //            | | :  `- \`.;` _ /`;.`/ - ` : | |                 //
    //               `-.   \_ __ /__ _/   .-` /  /                 //
    //      ========`-.____`-.___\_____/___.-`____.-'========         //
    //                           `=---='                              //
    //      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
    //            佛祖保佑       永不宕机     永无BUG                 //
    ////////////////////////////////////////////////////////////////////
    
    
    
    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#
        }
    }
     

    3、拓展脚本模板

          上面讲的第一种方法直接修改了unity的默认配置,这并不适应于所有项目,这里第二种方法会更有效,可以针对不同的项目和框架创建合适的脚本模板。
           首先,先创建一个文本文件MyTemplateScript.cs.txt作为脚本模板,并将其放入unity project的Editor文件夹下,模板代码为:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class MyNewBehaviourScript : MonoBase {
    
        //添加事件监听
        protected override void AddMsgListener()
        {
    
        }
        
        //处理消息
        protected override void HandleMsg(MsgBase msg)
        {
            switch (msg.id)
            {
                default:
                    break;
            }
        }
    
    }
        我们使用时,需要在Project视图中右击->Create->C# FrameScript 创建脚本模板,因此首先要创建路径为Assets/Create/C# FrameScript的MenuItem,点击创建脚本后,需要修改脚本名字,因此需要在拓展编辑器脚本中继承EndNameEditAction来监听回调,最终实现输入脚本名字后自动创建相应的脚本模板。

    代码如下,将这个脚本放入Editor文件夹中:

    using UnityEditor;
    using UnityEngine;
    using System;
    using System.IO;
    using UnityEditor.ProjectWindowCallback;
    using System.Text;
    using System.Text.RegularExpressions;
    
    public class CreateTemplateScript {
    
        //脚本模板路径
        private const string TemplateScriptPath = "Assets/Editor/MyTemplateScript.cs.txt";
    
        //菜单项
        [MenuItem("Assets/Create/C# FrameScript", false, 1)]
        static void CreateScript()
        {
            string path = "Assets";
            foreach (UnityEngine.Object item in Selection.GetFiltered(typeof(UnityEngine.Object),SelectionMode.Assets))
            {
                path = AssetDatabase.GetAssetPath(item);
                if (!string.IsNullOrEmpty(path) && File.Exists(path))
                {
                    path = Path.GetDirectoryName(path);
                    break;
                }
            }
            ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<CreateScriptAsset>(),
            path + "/MyNewBehaviourScript.cs",
            null, TemplateScriptPath);
    
        }
        
    }
    
    
    class CreateScriptAsset : EndNameEditAction
    {
        public override void Action(int instanceId, string newScriptPath, string templatePath)
        {
            UnityEngine.Object obj= CreateTemplateScriptAsset(newScriptPath, templatePath);
            ProjectWindowUtil.ShowCreatedAsset(obj);
        }
    
        public static UnityEngine.Object CreateTemplateScriptAsset(string newScriptPath, string templatePath)
        {
            string fullPath = Path.GetFullPath(newScriptPath);
            StreamReader streamReader = new StreamReader(templatePath);
            string text = streamReader.ReadToEnd();
            streamReader.Close();
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(newScriptPath);
            //替换模板的文件名
            text = Regex.Replace(text, "MyTemplateScript", fileNameWithoutExtension);
            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(newScriptPath);
            return AssetDatabase.LoadAssetAtPath(newScriptPath, typeof(UnityEngine.Object));
        }
    
    }
    然后,在project中,点击创建C# FrameScript,输入脚本名字,对应的脚本就已经创建好了

    4、总结

         上面介绍了两种方案,第一种适合玩玩,第二种方法显然逼格高一些,为不同的项目和框架定制一套脚本模板,可以让我们少写一些重复代码。按照上面介绍的方法,我们同样可以修改和拓展Testing、Playables的脚本模板,甚至shader,我们也可以定制模板。

  • 相关阅读:
    什么是DMI,SMBIOS,符合SMBIOS规范的计算机的系统信息获取方法
    Android init.rc执行顺序
    JVM-类的四种载入方式
    Intellij-创建Maven项目速度慢
    Intellij-工程目录下隐藏不想显示的文件和文件夹
    JVM-类加载机制(Java类的生命周期)
    Git-远程仓库的使用
    JavaSE-反射-获取类或者对象的四种方法
    工厂模式(Factory Pattern)
    Redis-配置认证密码
  • 原文地址:https://www.cnblogs.com/IAMTOM/p/10156148.html
Copyright © 2020-2023  润新知