Unity编辑器开发分享

[转]脚本生成Preset Libraries

2017-11-26  本文已影响5人  小小小小小丶敏

Preset Libraries它干的事就是把若干个颜色值保存起来。我们都知道颜色值用rgba来保存的。这样拷贝起来就很麻烦了,如果说我把每个界面的颜色都做成模板,需要设置颜色的时候在模板里选择多好?unity提供了Preset Libraries 就可以达到这个需求。 http://docs.unity3d.com/Manual/PresetLibraries.html

但是问题来了,这东西不能通过脚本来自动化完成,总不能手动的一个一个设置吧。。。我想做的就是用脚本来创建Preset Libraries,找了半天也没找到官方提供的API。那么没办法只能自己来了。直接上代码。

using UnityEngine;
using UnityEditor;
using System;
using System.Collections.Generic;
 
 
public class Test  {
 
 
    public class ColorData
    {
        public string name;
        public Color color;
    }
    
 
    [MenuItem("Tool/Creat Color")]
    static void Build () 
    {
 
        //复制一份新的模板到newColorPath目录下
        string templateColorPath="Assets/Template/color.colors";
        string newColorPath="Assets/Editor/界面1.colors";
        AssetDatabase.DeleteAsset(newColorPath);
        AssetDatabase.CopyAsset(templateColorPath,newColorPath);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
 
 
    
        //这里我写了两条临时测试数据
        List<ColorData>colorList = new List<ColorData>(){
            new ColorData(){name ="按钮样式1颜色",color = Color.green},
            new ColorData(){name ="按钮样式2颜色", color =new Color(0.1f,0.1f,0.1f,0.1f)}
 
        };
 
        UnityEngine.Object newColor = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(newColorPath);
        SerializedObject serializedObject = new SerializedObject(newColor);
        SerializedProperty property = serializedObject.FindProperty("m_Presets");
        property.ClearArray();
 
        //把我的测试数据写进去
        for(int i =0; i< colorList.Count; i++){
            property.InsertArrayElementAtIndex(i);
            SerializedProperty colorsProperty = property.GetArrayElementAtIndex(i);
            colorsProperty.FindPropertyRelative("m_Name").stringValue = colorList[i].name;
            colorsProperty.FindPropertyRelative("m_Color").colorValue = colorList[i].color;
        }
        //保存
        serializedObject.ApplyModifiedProperties();
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
 
}

因为我并不知道它的.colors的序列化类对象结构。所以我在Color界面中Presets->Create New Library,Location中选择本地Project。这时候.colors文件就生成在Editor下面了,然后我把它拷贝到Template文件夹下用来做我的模板。 然后我通过这个模板,再加上颜色的数据信息来生成我的.colors文件数据,图中“界面1”就是我生成出来的。 (这里可以用中文)

Unity3D研究院编辑器之脚本生成Preset Libraries(十四) - 雨松MOMO程序研究院 - 1 生成出来之后,在选择颜色的时候就可以设置模板里的颜色啦。

Unity3D研究院编辑器之脚本生成Preset Libraries(十四) - 雨松MOMO程序研究院 - 2
上一篇 下一篇

猜你喜欢

热点阅读