我从HexConverter - Unify Community Wiki 获取了以下代码
string hex = color.r.ToString("X2") + color.g.ToString("X2") + color.b.ToString("X2");
这给了我一个例外:
FormatException: The specified format 'X2' is invalid
然后我尝试使用"D"
,但即使这样也引发了错误。唯一有效的是"F
格式化浮点数。
转到声明在程序集浏览器中显示 mscorlib.dll/System/Single.ToString (string) - 到目前为止听起来不错。
谷歌搜索monodevelop 字符串格式 hex或类似的搜索字符串并没有显示任何关于 MonoDevelop 限制的有趣内容。
那么在我得到一个简单的十六进制值转换之前,有什么需要准备、初始化的吗?
[更新] 颜色是 Unity 中的一个结构:
public struct Color
{
public float r;
public float g;
public float b;
// ...
接受 dtb 的回答,我终于得到了它的使用:
int r = (int)(color.r * 256);
int g = (int)(color.g * 256);
int b = (int)(color.b * 256);
string hex = string.Format ("{0:X2}{1:X2}{2:X2}", r, g, b);
所以我错过了Color
将其组件定义为float
而不是int
dtb 提到的整数类型的事实。
[Update-2] 更优雅的解决方案:
Color32 color32 = color;
string hex = color32.r.ToString ("X2") + color32.g.ToString ("X2") + color32.b.ToString ("X2");