Preset Libraries它干的事就是把若干個顏色值保存起來。我們都知道顏色值用rgba來保存的。這樣拷貝起來就很麻煩了,如果說我把每個界面的顏色都做成模板,需要設置顏色的時候在模板里選擇多好畔乙?unity提供了Preset Libraries 就可以達到這個需求。 http://docs.unity3d.com/Manual/PresetLibraries.html翩概。
但是問題來了牲距,這東西不能通過腳本來自動化完成,總不能手動的一個一個設置吧钥庇。牍鞠。。我想做的就是用腳本來創(chuàng)建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();
//這里我寫了兩條臨時測試數(shù)據(jù)
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();
//把我的測試數(shù)據(jù)寫進去
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的序列化類對象結(jié)構(gòu)胁后。所以我在Color界面中Presets->Create New Library,Location中選擇本地Project嗦枢。這時候.colors文件就生成在Editor下面了攀芯,然后我把它拷貝到Template文件夾下用來做我的模板。 然后我通過這個模板文虏,再加上顏色的數(shù)據(jù)信息來生成我的.colors文件數(shù)據(jù)侣诺,圖中“界面1”就是我生成出來的殖演。 (這里可以用中文)
生成出來之后,在選擇顏色的時候就可以設置模板里的顏色啦紧武。