【发布时间】:2021-07-19 07:13:07
【问题描述】:
我的脚本有问题,如果有人可以提供帮助,我将不胜感激。
问题来了:
ArgumentOutOfRangeException:索引和长度必须引用字符串中的位置。 参数名称:长度 System.String.Substring (System.Int32 startIndex, System.Int32 长度) (在 :0)
脚本是:
public class ColorTypeConverter
{
public string ToRGBHex(Color c)
{
return string.Format("{0:X2}{1:X2}{2:X2}", ToByte(c.r), ToByte(c.g), ToByte(c.b));
}
private static byte ToByte(float f)
{
f = Mathf.Clamp01(f);
return (byte)(f * 255);
}
private int HexToDec (string hex)
{
int dec = System.Convert.ToInt32(hex, 16);
return dec;
}
private float HexToFloatNormalized(string hex) {
return HexToDec(hex) / 255f;
}
public Color GetColorFromString(string hexString) {
float red = HexToFloatNormalized(hexString.Substring(0, 2));
float green = HexToFloatNormalized(hexString.Substring(2, 2));
float blue = HexToFloatNormalized(hexString.Substring(4, 2));
return new Color(red, green, blue);
}
}
UI 管理器脚本:
string s = PlayerPrefs.GetString("savecolorground");
ColorTypeConverter col = new ColorTypeConverter();
if(s != "")
ground.GetComponent<SpriteRenderer>().color = col.GetColorFromString(s);
else
ground.GetComponent<SpriteRenderer>().color = col.GetColorFromString("FFFFFF");
播放器脚本:
ColorTypeConverter colCon = new ColorTypeConverter();
string color = PlayerPrefs.GetString("savecolor");
if(color != "")
GetComponent<SpriteRenderer>().color = colCon.GetColorFromString(color);
else
GetComponent<SpriteRenderer>().color = colCon.GetColorFromString("2AFCFF");
GetComponent<TrailRenderer>().startColor = new Color(
GetComponent<SpriteRenderer>().color.r,
GetComponent<SpriteRenderer>().color.g,
GetComponent<SpriteRenderer>().color.b,
255);
【问题讨论】:
-
那么,
hexstring的值是多少?它至少有 6 个字符长吗? -
那个编辑没有回答这个问题。当您调用
GetColorFromString()时,请确保hexstring的长度至少为6 个字符。显然目前不是,因为这就是错误消息告诉您的内容。 -
请使用正确的标签!请注意,
unityscript是或更好的是曾经是一种 JavaScript 风格,类似于早期 Unity 版本中使用的自定义语言,并且现在已经不推荐使用了!如果您不使用该语言,请不要使用该标签。同样,仅仅因为您使用某个 IDE (visual-studio) 并不意味着这个问题与该 IDE 有关