2014-06-15 61 views
0

我有一個function它將隨機選擇從1到5的數字,然後在該函數內有一個if語句,該語句將從函數輸出的數字分配給變量叫做randID(爲了在我的遊戲中隨機選擇一個區域)。如何從其他類訪問浮點輸出變量

在另一個課程中,我想查看zoneID是否等於randID(我之前隨機選擇的那個),如果是,我想打印一條消息。

我會在一個班級裏做到這一點,但是我在使用這個班級的遊戲中有多個對象,我需要主遊戲操作員類來決定選擇哪個區域。

想象一下總部的遊戲;這基本上是我想弄明白的。現在大部分系統已經到位。 :)

我提前感謝您提供任何幫助或指導。

PS:我使用C#和Unity3D創建此項目。

編輯:代碼。

public static void DecideID() { 
    if (gameLeft >= 1f && timeZone_Zone.zoneAlive == false) { 
     float random = Random.Range(0f, 5f); 
     print (random); 
     if(random > 1f && random < 2f) { 
      id = 1; 
      print (id); 
     } 
     else if(random > 2f && random < 3f) { 
      id = 2; 
      print (id); 
     } 
     else if(random > 3f && random < 4f) { 
      id = 3; 
      print (id); 
     } 
     else if(random > 4f && random < 5f) { 
      id = 4; 
      print (id); 
     } 
     else if(random >= 5f) { 
      id = 5; 
      print (id); 
    } 
} 

print (id)語句僅用於測試目的。

然後,我想要做這樣的事情:

if (zoneID = randID) { 
    GetComponent<MeshRenderer>().enabled = true; 
} 

回答

1

你想要的是訪問另一個腳本組件的變量。使randID公開,然後您可以在另一個腳本中訪問它。

TypeWithRand randtype; 

... 

void Start() 
{ 
    randtype = objWithRand.GetComponent<TypeWithRand>(); 
} 

... 

if (randtype.randID == zoneID) 
{ 
    ... 
} 

您將有包含該randID方法的類型來代替TypeWithRand

做到這一點的另一種方法是有一個包含randID的類的實例。然後,你可以檢查像值:

RandClass randClass; 

... 

if (randClass.randID == zoneID) 
{ 
    //do stuff 
} 

這意味着,你叫DecideIDRandClass構造函數(下面我有固定的方式)。您也可以將該功能保留爲無效,但在您的功能中將randID的值設置爲與設置id類似。然後,你會從類

randClass.DecideID(); 

if (randClass.randID == zoneID) 
{ 
    //do stuff 
} 

此外,在幾個方面你DecideID功能不正確的情況下調用該函數。首先,Random.Range()可以使用整數,而不需要多個if語句。

id = Random.Range(0, 5); 

您也可以返回id的值,並且隨後參考,所以randID的任務看起來像

randID = DecideID(); 

所以,你的實際功能將類似於:

public int DecideID() { 
    id = 0; 
    if (gameLeft >= 1f && timeZone_Zone.zoneAlive == false) { 
     id = Random.Range(0, 5); 
    } 
    return id; 
} 

public void DecideID() { 
    if (gameLeft >= 1f && timeZone_Zone.zoneAlive == false) { 
     randID = Random.Range(0, 5); 
    } 
} 
+0

我從腳本中複製了一小段摘錄。我將如何實現這一點?另一個c#文件是否算作GameObject? –

+0

@JackMiller gameobject是場景中的對象,您將腳本附加到...您將替換的類型將是附加到其他gameobject的腳本的類型 –

+0

因此,如果我想獲取浮動值'id'然後在我的區域課程中使用它,我該怎麼做? 類似於 'Handler = GameObject.Find(「GameHandler」); Handler.GetComponent (id); –