unity開發之知識記錄篇(color和string型別的相互轉換)

丶小冷發表於2020-09-28

在unity裡,color型別有自定義區別與C#的型別,所以C#中的轉換方法,在unity中的使用受限制。
本文撰寫的理由是,我在做序列化的時候,序列化不支援這個color型別,報Max allowed object depth reached while trying to export from type UnityEngine.Color的錯誤。所以要把color型別轉換為可序列化的型別。

1,C#的名稱空間:System.Drawing

C#中的colorl型別來自這個名稱空間,並且提供了一系列欄位/屬性/方法。
這裡介紹下兩個轉換方法可供使用的:
①,轉換為int型別,FromArgb(Int32)/ToArgb(),明顯看出,第一個是基於一個 32 位 ARGB 值建立 Color 結構,第二個是對應的獲取此 Color 結構的 32 位 ARGB 值。
②,轉換為string型別,FromName(String)/ToString(),第一個name應該是在系統內已經定義過的顏色,這一對組合是不是有用筆者並不知曉,感興趣的可以嘗試下。

2,unity的Color型別:位於UnityEngine下

由於無法使用C#本身的API操作這個型別,unity提供了一個color的類ColorUtility用於對color型別進行操作。
這個類只提供了三個方法,足夠我們進行使用:
ToHtmlStringRGB(Color color);
ToHtmlStringRGBA(Color color);
TryParseHtmlString(string htmlString, out Color color);

前兩個是轉換為string型別,不一樣的是是否有A。最後一個則是反向的,使用out進行輸出,所以它返回的是一個bool型別的值,可以供我們判斷是否轉換成功~~

這是我的程式碼的一部分:

   ColorUtility.TryParseHtmlString(itmeTemps[i].ColorStr, out Color prizeColor);
    prize.GetComponent<Image>().color = prizeColor;
item.ColorStr = ColorUtility.ToHtmlStringRGBA(Color.red);

相關文章