Unity Editor 編輯器擴展 十三 自定義創建資源

目錄

初級資源創建

Editor文件夾下創建腳本:

using UnityEngine;
using UnityEditor;

public class CreateTest
{
    [MenuItem ("Assets/Create ExampleAssets")]
    static void CreateExampleAssets ()
    {
        var material = new Material (Shader.Find ("Standard"));

        ProjectWindowUtil.CreateAsset (material, "New Material.mat");
    }
}

點擊Assets--Create ExampleAssets 就會發現一個材質球被創建

中級資源創建

Editor文件夾下創建腳本:

using UnityEngine;
using UnityEditor;

public class CreateMaterial
{
    [MenuItem ("Assets/Create Material")]
    static void CreateExampleAssets ()
    {
        var material = new Material (Shader.Find ("Standard"));
        var instanceID = material.GetInstanceID ();

        var icon = AssetPreview.GetMiniThumbnail (material);

        var endNameEditAction =
            ScriptableObject.CreateInstance<DoCreateMaterialAsset> ();

        ProjectWindowUtil.StartNameEditingIfProjectWindowExists (instanceID,
            endNameEditAction, "New Material.mat", icon, "");
    }
}

點擊Assets--Create Material 創建一個特定的材質球

更自由的自定義資源創建

Editor文件夾下創建腳本:

using UnityEngine;
using UnityEditor;
using UnityEditor.ProjectWindowCallback;

public class DoCreateMaterialAsset : EndNameEditAction
{
    public override void Action (int instanceId, string pathName, string resourceFile)
    {
        var mat = (Material)EditorUtility.InstanceIDToObject (instanceId);

        mat.color = Color.red;

        AssetDatabase.CreateAsset (mat, pathName);
        AssetDatabase.ImportAsset (pathName);
        ProjectWindowUtil.ShowCreatedAsset (mat);
    }
}

Editor文件夾下創建腳本:

using System.IO;
using System.Text;
using UnityEditor;
using UnityEditor.ProjectWindowCallback;
using System;

public class DoCreateScriptAsset : EndNameEditAction
{
    public override void Action (int instanceId, string pathName, string resourceFile)
    {
        var text = File.ReadAllText (resourceFile);

        var className = Path.GetFileNameWithoutExtension (pathName);

        //清除空格
        className = className.Replace (" ", "");


        text ="//Programer: "+"porgramerName"+"\n//code date:"+DateTime.Now.Date.ToShortDateString()+"\n"
        +text.Replace ("#SCRIPTNAME#", className);

        text += "\n//自己添加Something!"+"\n";

        //utf8
        var encoding = new UTF8Encoding (true, false);

        File.WriteAllText (pathName, text, encoding);

        AssetDatabase.ImportAsset (pathName);
        var asset = AssetDatabase.LoadAssetAtPath<MonoScript> (pathName);
        ProjectWindowUtil.ShowCreatedAsset (asset);
    }
}

Editor文件夾下創建腳本:

using UnityEditor;
using UnityEngine;
using System.IO;

public class CreateAssets : EditorWindow
{

    [MenuItem("Window/CreatAssets")]
    static void Open ()
    {
        GetWindow<CreateAssets> ();
    }

    public string scriptName,materialName;
    void OnGUI()
    {
        var options = new []{GUILayout.Width (100), GUILayout.Height (20)};

        GUILayout.Label ("CreateScripts");
        EditorGUILayout.Space ();
        EditorGUILayout.BeginHorizontal ();
        EditorGUILayout.LabelField ("ScriptName",options);
        scriptName= EditorGUILayout.TextArea (scriptName);
        EditorGUILayout.EndHorizontal ();


        if (GUILayout.Button ("Create")) {

            CreateScript (scriptName);
        }

        GUILayout.Label ("CreateMaterial");
        EditorGUILayout .Space ();
        EditorGUILayout.BeginHorizontal ();
        EditorGUILayout.LabelField ("materialName",options);
        materialName=   EditorGUILayout.TextArea (materialName);
        EditorGUILayout.EndHorizontal ();


        if (GUILayout.Button ("Create")) {
            CreateMaterial (materialName);
        }

    }
//  新建自定義腳本
    static void CreateScript (string scriptName)
    {
        var resourceFile = Path.Combine (EditorApplication.applicationContentsPath,
            "Resources/ScriptTemplates/81-C# Script-NewBehaviourScript.cs.txt");

        Debug.Log (resourceFile);
        Texture2D csIcon =
            EditorGUIUtility.IconContent ("cs Script Icon").image as Texture2D;

        var endNameEditAction =
            ScriptableObject.CreateInstance<DoCreateScriptAsset> ();

        ProjectWindowUtil.StartNameEditingIfProjectWindowExists (0, endNameEditAction,
            scriptName+".cs", csIcon, resourceFile);
    }

    //新建Material
    static void CreateMaterial (string materialName)
    {
        var material = new Material (Shader.Find ("Standard"));
        var instanceID = material.GetInstanceID ();
        var icon = AssetPreview.GetMiniThumbnail (material);

        var endNameEditAction =
            ScriptableObject.CreateInstance<DoCreateMaterialAsset> ();

        ProjectWindowUtil.StartNameEditingIfProjectWindowExists (instanceID,
            endNameEditAction, materialName+".mat", icon, "");
    }

}

Window–Create Assets打開如下窗口

這裏寫圖片描述

這個是自定義生成的腳本

這裏寫圖片描述

關於自定義腳本中間的內容,需要更改它的生成模版,在Unity安裝文件內,這裏就不囉嗦了,大家可參照這篇文章:http://blog.csdn.net/warrenmondeville/article/details/53577085

本文鏈接:http://blog.csdn.net/WarrenMondeville/article/details/53807926

發佈了31 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章