2017-06-20 124 views
-1

我有一個腳本可以產生隨機數,我還有許多其他腳本必須從第一個腳本接收該隨機數。如何將相同的數字傳遞給多個函數

這就是我試過的,但它不起作用。總是給出0作爲結果。

int xNum; 

int generateNum() 
{ 
    return Random.Range(10, 100); 
} 

void Start() 
{ 
    xNum = generateNum(); 
} 


public int Getnumber() 
{ 
    return xNum; 
} 

然後我調用另一個腳本Getnumber()方法,但正如我所說,它總是返回0。任何建議我做錯了嗎?

PS隨機數有如果你想只有一次產生這個隨機數或「按需」是在所有其他腳本

+2

也許你正在創建該類的多個實例提供代碼,並調用'GetNumber'在這樣的情況:'Start'不還沒有。 –

+0

嘗試使用Awake而不是Start – Woltus

+0

@TimSchmelter不,我的所有實例都有啓動功能 – viva

回答

3

一樣,那麼我會建議你做這樣的事情:

int? _generatedRandom; 
public int GeneratedRandom 
{ 
    get { 
     if (!_generatedRandom.HasValue) 
      GenerateRandom(); 

     return _generatedRandom.Value; 
    } 
} 

void GenerateRandom() 
{ 
    _generatedRandom = Random.Next(10, 100); 
} 

然後將其他的腳本,你可以只要致電:

int randomNumber = MeRandomNumberClass.GeneratedRandom; 
+0

@ m.rogalski是的,我想要一個生成的數字,然後分享它拋出所有其他的scirpts。 但爲什麼我的腳本不起作用? – viva

+0

@viva我只能假設你的腳本不起作用,因爲你在整個應用程序開始時產生了隨機數。可能是因爲Unity的Random類使用了一些奇怪的算法來使用遊戲時間「計算」新的隨機數,然後用「0」爲返回值播種。 –

1

你生成一個號碼,然後外面通過它的代碼是完全正常的。

誤差必須在如何/從那裏你打電話GetNumber(),或者如果你的類不是從MonoBehaviour繼承(這意味着Start永遠不會執行,其默認值爲0,從而xNum住宿)。

請提供您班級的所有代碼,包括班級申報,以及撥打GetNumber()的腳本代碼。

+0

1.我的所有課程都是從monobehavior繼承而來 – viva

0

至於有些人要求整個代碼,我該怎麼從另一個腳本

public Number player; 

int num; 

private void Start() 
{ 
    num = player.GetComponent<Number>().Getnumber(); 

    Debug.Log("Number is: " + num); 
} 
+0

有您的答案。在對該對象調用Start之前調用GetNumber方法。試着把你的發生器放在數字腳本的喚醒方法上。 –

+0

@ m.rogalski OMG你天才,它幫助。謝謝sooooo了。 – viva

+0

還有一件事,xNum必須是靜態的,因爲在其他方面它仍然給0 – viva

相關問題