Unity Editor 编辑器扩展一 编辑器特殊文件夹及内置资源读取

15 篇文章 7 订阅

目录

编辑器特殊文件夹及内置资源读取

使用Unity引擎时 ,为了更快速任性开发,编辑器扩展是必不可少的,子曰:“工欲善其事,必先利其器“说的正是这个道理,做好编辑器开发,在整个项目中就会达到事半功倍的效果,废话不多说,在此纪录下学习过程。

编辑器相关文件夹

1,Editor
此文件夹可以放在Assets根目录下,也可以放在自文件夹里, 编辑器开发脚本要放到这个文件夹内,此文件夹内的脚本只在Unity编辑器内起作用,项目发布时不会被打包。
2,Editor Default Resources
此文件夹必须放在Assets根目录下,注意单词中间有空格,此文件夹用来存储编辑器所需资源,图片和文本,此文件夹里的内容也是不会被打包的,文件的访问方法是:EditorGUIUtility.Load (“文件名”) 。
3,Gizmos
此文件夹也是编辑器绘制Gizmos用的,相当于Resouce文件夹,只不过它是编辑器开发用的,这里不做赘述,以后的文章在说它。
这个系列只写和编辑器开发相关的东西,至于其他特殊文件夹就不在这里说了,最后挂一张测试工程的图片:
这里写图片描述

读取内置资源包

我们也可以用反射拿到编辑器内置的资源,这样我们就可以制作和Unity编译器毫无违和感的扩展了,为了确认里面的内容我们可以看到它打印出来的名称,先截一张图:
这里写图片描述
在通过EditorGUILayout.ObjectField()方法在Inspector面板创建一个texture将它们显示出来,是这样:

这里写图片描述
最后贴上代码

代码 Test1_1.cs

using UnityEngine;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class Test1_1 : MonoBehaviour
{
    [SerializeField] 
    public static List<string> texName = new List<string> ();
    [SerializeField] 
    public List<Texture> texure=new List<Texture>();
    public List<string> name = new List<string> ();
    void OnEnable ()
    {
        #if UNITY_EDITOR
        name=texName;
        for (int i = 0; i < texName.Count; i++) {
            texure.Add(EditorGUIUtility.Load (texName[i]) as Texture);
        }
        #endif
    }


    [InitializeOnLoadMethod]
    static void GetBultinAssetNames ()
    {
        var flags = BindingFlags.Static | BindingFlags.NonPublic;
        var info = typeof(EditorGUIUtility).GetMethod ("GetEditorAssetBundle", flags);
        var bundle = info.Invoke (null, new object[0]) as AssetBundle;
        foreach (var n in bundle.GetAllAssetNames()) {
            if (n.IndexOf(".png")>=0) {
                texName.Add (n);
            }
            Debug.Log (n);
        }
    }

}

代码Editor1_1.cs 这个要放到Editor文件夹内

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(Test1_1))] 
public class Editor1_1 : Editor 
{
    public override void OnInspectorGUI() 
    {
        Test1_1 test = (Test1_1) target;
        string a;
        for (int i = 0; i < test.texure.Count; i++) {
            if (test.texure [i]) {
                a  = test.texure [i].name;
            } else
                a = "";
            test.texure[i]=EditorGUILayout.ObjectField(i+":"+a,test.texure[i],typeof(Texture),true) as Texture;
        }
    }
}

相关资源:http://download.csdn.net/detail/warrenmondeville/9694654
本文链接:http://blog.csdn.net/warrenmondeville/article/details/53247181

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值