2015-12-26 82 views
0

嗨我有一個腳本附加到主相機,並在此腳本中我想選擇一個0到5之間的數字。根據我得到的號碼,我想要一個腳本運行。讓我的腳本附加到主相機。所以首先我的Unity腳本不會工作?

using UnityEngine; 
    using System.Collections; 
    public class RandomFunction : MonoBehaviour { 
    int n; 
    void Awake() 
    { 
     GetComponent<RandomFunction>().enabled = true; 
    } 
    void Start() 
    { 
     n=Random.Range(0,5); 
     if(n==0) 
     { 
      GetComponent<BlueGoUp>().enabled = true; 
     } 
     else if(n==1) 
     { 
      GetComponent<RedGoUp>().enabled = true; 
     } 
     else if(n==2) 
     { 
      GetComponent<GreenGoUp>().enabled = true; 
     } 
     else if(n==3) 
     { 
      GetComponent<OrangeGoUp>().enabled = true; 
     } 
     else if(n==4) 
     { 
      GetComponent<YellowGoUp>().enabled = true; 
     } 
     else if(n==5) 
      { 
      GetComponent<PurpleGoUp>().enabled = true; 
     } 
    } 

} 
+0

你應該考慮使用'switch'語句而不是'if' -'else'。另外,這些腳本是否默認啓用爲「true」?因爲我非常肯定你不必打開對象上運行的腳本。 – AustinWBryan

+0

那裏所有禁用啓動() – user5717696

+0

因此,當你在'開始()'禁用他們沒有任何反應?沒有'null'異常? – AustinWBryan

回答

0
  1. 刪除Awake()方法,因爲它真的沒有必要在這裏激活RandomFunction腳本。主動在檢查員。
  2. 我不確定使用這樣的組件是否正確。我總是用gameObject.GetComponent
  3. if(n==5)永遠不會是真的,因爲Random.Range(0,5)返回0,1,2,3 or 4。 從文檔:

    範圍(INT分鐘,INT最大值),返回分鐘包容]和MAX [獨家](只讀)之間的隨機整數。

  4. 使用switch case語句而不是If else

你的最終代碼應該是這樣的:

using UnityEngine; 
using System.Collections; 
public class RandomFunction : MonoBehaviour { 
int n; 

void Start() 
{ 
    n=Random.Range(0,6); 

    switch (n) 
    { 
     case 0: 
      gameobject.GetComponent<BlueGoUp>().enabled = true; 
      break; 
     case 1: 
      gameObject.GetComponent<RedGoUp>().enabled = true; 
      break; 
     case 2: 
      gameObject.GetComponent<GreenGoUp>().enabled = true; 
      break; 
     case 3: 
      gameObject.GetComponent<OrangeGoUp>().enabled = true; 
      break; 
     case 4: 
      gameObject.GetComponent<YellowGoUp>().enabled = true; 
      break; 
     case 5: 
      gameObject.GetComponent<PurpleGoUp>().enabled = true; 
      break; 
     default: 
      break; 
    } 
} 
} 
0

我不斷收到此錯誤

的NullReferenceException:未將對象引用設置到對象RandomFunction.Start(實例)(22日資產/資源/腳本/ RandomFunction.cs)一切,你不需要做你的喚醒功能做什麼,因爲:

  1. 正在使用的MonoBehaviour對象的一個連接到遊戲對象。如果您沒有明白我的意思,那麼假設您將RandomFunction附加到CameraObj。現在,RandomFunctionthis腳本中的指針)的實例與CameraObj.GetComponent<RandomFunction>()相同或相同,因爲您無法向GameObject添加多個相同的組件。
  2. Awake()方法將不會執行直到對象爲實際上啓用。因此,您不需要在腳本中重新啓用該對象,因爲如果它正在執行,該對象已經啓用。

刪除Awake方法,它也應該刪除NullReferenceException。如果還不行,請確保同一對象(具有RandomFunction分量)也有組件BlueGoUpRedGoUpYellowGoUpGreenGoUpOrangeGoUpPurpleGoUp

哦,你的if (n==5)條件永遠不會是真的,因爲5永遠不會被Random.Range()返回。 max參數對於Random.Range()函數中的整數始終是唯一的,因此返回值始終爲min <= value < max

0

最有可能,我希望所有黨團腳本沒有連接到相機。因此以另一種方式查找腳本。嘗試通過它來取代你的代碼,

using UnityEngine; 
using System.Collections; 
public class RandomFunction : MonoBehaviour { 
    int n; 
    void Awake() 
    { 
     GetComponent<RandomFunction>().enabled = true; 
    } 
    void Start() 
    { 
     n=Random.Range(0,6); 
     switch(n){ 
     case 0: 
      FindObjectOfType<BlueGoUp>().enabled = true; 
      break; 
     case 1: 
      FindObjectOfType<RedGoUp>().enabled = true; 
      break; 
     case 2: 
      FindObjectOfType<GreenGoUp>().enabled = true; 
      break; 
     case 3: 
      FindObjectOfType<OrangeGoUp>().enabled = true; 
      break; 
     case 4: 
      FindObjectOfType<YellowGoUp>().enabled = true; 
      break; 
     case 5: 
      FindObjectOfType<PurpleGoUp>().enabled = true; 
      break; 
     } 
    } 

} 

如果這個代碼將不能工作,那麼有沒有比你的腳本沒有放到任何gameObjects其他方式。