[Unity] 腳本模板(二)、Script Create Dialog



Overview

1. 下載官方的 Script Create Dialog 套件
2. 修正 Complile Errors
3. 利用精靈建立 Script
4. 學習模板建立腳本的方法


1. 下載官方的 Script Create Dialog 套件

搜尋 Script Create Dialog
可以找到官方提供的這款免費套件

[Unity] Create Script Dialog

2. 修正 Complile Errors

匯入完套件後可能會遇到以下錯誤訊息:
`UnityEditorInternal.InternalEditorUtility’ does not contain a definition for `AddScriptComponentUnchecked’

[Unity] Create Script Dialog

找到錯誤行,修正為以下程式碼:

    private void Create()
    {
        CreateScript();

        if (CanAddComponent())
        {
            // Need to use reflection to access this now (it is internal)
            MethodInfo addScriptMethod = typeof(InternalEditorUtility).GetMethod(
                "AddScriptComponentUncheckedUndoable",
                BindingFlags.Static | BindingFlags.NonPublic);
            addScriptMethod.Invoke(null, new Object[] {m_GameObjectToAddTo,
            AssetDatabase.LoadAssetAtPath(TargetPath(), typeof (MonoScript)) as MonoScript});
        }

        Close();
        GUIUtility.ExitGUI();
    }
3. 利用精靈建立 Script

順利的話,你現在已經可以點 Assets => Create => Script…
叫出 Create Script Dialog 來快速建立 Script了

[Unity] Create Script Dialog

這個精靈幾乎可以達成你想得到的大部分功能
包含檔名設定、儲存位置、繼承類別、預設函式等…
除了 MonoBehaviour 之外,還支援
ScriptableObject、CustomEditor、EditorWindow
可以說是十分完整!

[Unity] Create Script Dialog

4. 學習模板建立腳本的方法

讓我們來看看這個套件是如何設計腳本模板的
先看看 MonoBehaviour 的模板吧!

BASECLASS=MonoBehaviour
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class $ClassName : MonoBehaviour {
	
	$Functions
}

第一行 BASECLASS=MonoBehaviour
主要是給 EditorWindow 辨識用的
可以在 NewScriptWindow.cs 下的 GetBaseClass 找到

private string GetBaseClass(string templateContent)
{
    string firstLine = templateContent.Substring(0, templateContent.IndexOf("\n"));
    if (firstLine.Contains("BASECLASS"))
    {
        string baseClass = firstLine.Substring(10).Trim();
        if (baseClass != string.Empty)
            return baseClass;
    }
    return null;
}

另外兩個關鍵字 $ClassName 和 $Functions
則可以在 NewScriptGenerator.cs 下的 ToString() 中找到
其實就是字串取代,但是加了正規表示式的檢查

m_Text = m_ScriptPrescription.m_Template;
m_Writer = new StringWriter ();
m_Writer.NewLine = "\n";
			
// Make sure all line endings are Unix (Mac OS X) format
m_Text = Regex.Replace (m_Text, @"\r\n?", delegate(Match m) { return "\n"; });
			
// Class Name
m_Text = m_Text.Replace ("$ClassName", ClassName);
m_Text = m_Text.Replace ("$NicifiedClassName", ObjectNames.NicifyVariableName (ClassName));



歡迎您留言與分享!(Welcome for comments or sharing!)

Related Post:

Tagged on: ,