做一个简单的记录。
参考文章如下:
https://www.cnblogs.com/jqg-aliang/p/4834488.html
https://www.jianshu.com/p/f165d90a491f
http://blog.csdn.net/u011536487/article/details/41800805
达到的效果是:读文本拿到字符串,将字符串转换成16进制数,找到需要的prefab为其设置颜色。
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
using System.IO;
public class ChangeLineColor : MonoBehaviour {
private static GameObject targetObj;
[MenuItem("ChangeLineColor/ChangeLineColor")]
public static void ChangeColor() {
targetObj = Selection.activeGameObject;
int index = 0;
List<string> colorList = ReadFileList(Application.dataPath, "line_color.txt");
//for (int i = 0; i < colorList.Count; i++)
//{
// print(" colorList " + colorList[i]);
//}
foreach (Transform child in targetObj.transform)
{
foreach (Transform child2 in child.transform)
{
child2.GetComponent<Image>().color = HexToColor(colorList[index]);
}
index++;
// print("index " + index + " colorList.Count " + colorList.Count);
if (index >= colorList.Count)
index = 0;
}
}
/// <summary>
/// hex转换到color
/// </summary>
/// <param name="hex"></param>
/// <returns></returns>
public static Color HexToColor(string hex)
{
byte br = byte.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
byte bg = byte.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
byte bb = byte.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
byte cc = byte.Parse(hex.Substring(6, 2), System.Globalization.NumberStyles.HexNumber);
float r = br / 255f;
float g = bg / 255f;
float b = bb / 255f;
float a = cc / 255f;
return new Color(r, g, b, a);
}
public static List<string> ReadFileList(string file_path, string file_name)
{
StreamReader sr;
if (File.Exists(file_path + "//" + file_name))
{
sr = File.OpenText(file_path + "//" + file_name);
}
else
{
Debug.LogWarning("Not find files!");
return null;
}
List<string> list = new List<string>();
string str;
while ((str = sr.ReadLine()) != null)
list.Add(str);//加上str的临时变量是为了避免sr.ReadLine()在一次循环内执行两次
sr.Close();
sr.Dispose();
return list;
}
}