C# 按Unity中的字符串名称访问数组索引
我有一个C# 按Unity中的字符串名称访问数组索引,c#,unity3d,C#,Unity3d,我有一个public Image[]可以从Unity Editor获取场景中存在的许多图像UI 现在我想从场景中按名称停用其中一个或多个 但我无法通过图像的字符串名访问此数组项。只有通过图像[0] 我以前在论坛上尝试过字典类和其他解决方案,但我找不到办法 我该怎么做 阵列的: Dictionary<string, Image> image = new Dictionary<string, Image>(); void activateImage(string image
public Image[]
可以从Unity Editor获取场景中存在的许多图像UI
现在我想从场景中按名称停用其中一个或多个
但我无法通过图像的字符串名访问此数组项。只有通过图像[0]
我以前在论坛上尝试过字典
类和其他解决方案,但我找不到办法
我该怎么做 阵列的:
Dictionary<string, Image> image = new Dictionary<string, Image>();
void activateImage(string imageName, bool enable)
{
if (image.ContainsKey(imageName))
{
image[imageName].enabled = enable;//Good for performace
// OR
//image[imageName].gameObject.SetActive(enable);
}
}
使用for循环在图像数组上循环,然后比较名称。如果它们匹配,请停用它们
public Image[] image;
void activateImage(string imageName, bool enable)
{
for (int i = 0; i < image.Length; i++)
{
if (image[i].name == imageName)
{
image[i].enabled = enable;//Good for performace
// OR
//image[i].gameObject.SetActive(enable);
}
}
}
停用
activateImage("nextImage", false);
对于字典:
Dictionary<string, Image> image = new Dictionary<string, Image>();
void activateImage(string imageName, bool enable)
{
if (image.ContainsKey(imageName))
{
image[imageName].enabled = enable;//Good for performace
// OR
//image[imageName].gameObject.SetActive(enable);
}
}
或
嗯,使用字典
听起来确实是前进的方向。你在哪里被困的?创建词典,还是使用词典?你能使用LINQ吗?如果是这样,只需var dictionary=Images.ToDictionary(image=>image.Name)
或类似的方法应该有效…@LumbusterTick谢谢,你是对的。只是我避免使用linq,因为它不是Unity中唯一的解决方案。我在普通的Windows窗体应用程序中大量使用linq,但在Unity中不使用,除非确实需要。原因是性能和内存分配。
public Image myImage;
image.Add(myImage.name, myImage);
image.Add("myImageName", myImage);