2016-09-21 241 views
1

我有一個public Image[]可以從Unity編輯器獲取場景中存在的許多Image UI在Unity中按字符串名稱訪問數組索引

現在我想從它的名字中去除它們中的一個或多個。

但我不能用的Images字符串名稱訪問此數組項。只有我可以通過整型數字索引訪問諸如Images[0]

我之前在論壇上Dictionary類和其他解決方案嘗試,但我無法找到一種方式。

我該怎麼做?

+1

那麼,使用'字典<字符串,圖像>'聽起來像前進的方向。你從哪裏陷入困境?創建字典,還是使用它?你能夠使用LINQ嗎?如果是這樣,只是'var dictionary = Images.ToDictionary(image => image.Name);'或類似應該工作... –

回答

3

對於陣列

使用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", true); 

停用

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); 
    } 
} 

要添加圖片到詞典:

public Image myImage; 
image.Add(myImage.name, myImage); 

image.Add("myImageName", myImage); 
+1

謝謝。問題完全解決 –

+1

linq不會傷害btw,但良好的答案upvoted – LumbusterTick

+0

@LumbusterTick謝謝你,你是對的。這只是當我不使用Unity的** only **解決方案時,我避免使用linq。我在正常的Windows窗體應用程序中使用linq a-lot,但除非真的需要,否則不能在Unity中使用。原因是性能和內存分配。 – Programmer