2012-10-31 16 views
0

我想按名稱列出所有可用的遊戲對象在我的場景中,實際上它幾乎完成,但出現問題,' s爲什麼我需要你的幫助傢伙!如何從foreach中分配值到GUI.Label或Box

這裏是在C#剪斷代碼:

using UnityEngine; 
using System.Collections; 

public class testLIST : MonoBehaviour { 

    public string objects; 

    void Start() { 
     object[] obj = GameObject.FindSceneObjectsOfType(typeof (GameObject)); 

     foreach (object o in obj) 
     { 

     GameObject g = (GameObject) o; 
     objects = g.name; 
      print(g.name); 
     } 

    } 

    void OnGUI() { 
     int i =0; 
     GUIStyle style = new GUIStyle(); 
     i = i+1; 
     Rect sizeBox = new Rect(Screen.width/2-1, Screen.height/2-150, 300, 100); 
     GUI.Box(sizeBox,"Available Objects : \n" + i +". " +objects.ToString(),style); 
    } 

當剪斷代碼運行,GUI.Box只是代表了現場,而不是所有的人的最後一個對象。 我在做什麼錯?

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

是的,一旦foreach循環完成運行,您的「對象」變量將始終具有最後一次迭代的值。這是完全正常的,在問題中沒有暗示你期望的其他行爲。如果你想看到「所有遊戲對象」,那麼需要一個列表,而不是一個標籤。 –

+0

你能給一些正確的文章閱讀嗎? – Termin

回答

1

這應該連接字符串中的所有對象名稱。

List<String> li = new List<string>(); 
foreach (object o in obj) 
    { 

    GameObject g = (GameObject) o; 
    li.Add(g.name); 
     print(g.name); 
    } 
Objects = String.Join(", ",li.ToArray()); 
+0

您的建議會產生幾個錯誤:Assets/testLIST.cs(21,8):錯誤CS1061:類型System.Text.StringBuilder不包含'Add'的定義,也沒有'System'類型的擴展方法'Add'。 Text.StringBuilder'可以找到(你是否缺少使用指令或程序集引用?) Assets/testLIST.cs(24,18):錯誤CS1502:最好的重載方法匹配'string.Join(string,string [ ]''有一些無效的參數 – Termin

+0

Assets/testLIST.cs(24,18):error CS1503:參數'#2'不能將'System.Text.StringBuilder'表達式轉換爲類型'string []'Assets/testLIST.cs( 24,1):錯誤CS0103:當前上下文中不存在名稱'Objects' – Termin

+0

對不起,應該打開VS.請參閱編輯。 – Brad

0

呼叫OnGUI()foreach你會得到所有對象。到目前爲止,您並沒有調用OnGUI()函數,因此函數在foreach之後編譯。所以你從foreach獲得最後一個對象。

+0

我也試過用這種方式調用gui,但是它顯示了一個海量數據,一個字符串中有很多名字,那麼有沒有辦法讓它們成爲一個列表? – Termin