首页 >Unity3D频道 >【Unity3D拓展编辑器】 > Unity3D研究院编辑器之脚本生成Preset Libraries(十四)
2015
10-29

Unity3D研究院编辑器之脚本生成Preset Libraries(十四)

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”就是我生成出来的。 (这里可以用中文)

Snip20151029_5生成出来之后,在选择颜色的时候就可以设置模板里的颜色啦。

Snip20151029_6

 

 

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院编辑器之脚本生成Preset Libraries(十四)》有 9 条评论

  1. 罗翔说:

    请问 .Colors 是怎么创建的呢

  2. 学会了,谢松哥~
    听说你是个胖子?

  3. 付磊说:

    好高深,以后试试,MOMO你用的是win10吧 以前不都是Mac开发么

留下一个回复

你的email不会被公开。 必填项已用 * 标注。