2017-12-03 159 views
-1

我需要在Unity中產生一個gameobject,在那裏它會產生數字。從陣列列表中產生一個數字,顯示前面的數字

對於某些人來說,預製產品的原因是早於應該產生的數字。例如:預製件顯示「10」,但實際變量實際上是24.「10」預製件被破壞後,另一個預製件產生「24」。所以基本上,預製被「延遲」了。

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 
public class HexToBinary : MonoBehaviour 
{ 
    //Array 1 - F 
    public GameObject cvns; 
    public ArrayList HexBin = new ArrayList(); 
    public GameObject enemy; 
    public GameObject explosion; 
    // public GameObject spwnEnemy; 
    public static int rand1; 
    public static int rand2;                                                 
    // public float speed; 
    public Text result; 
    public TextMesh question; 
    public string valGroup1; 
    public string valGroup2; 
    public Text totalVar1Txt; 
    public Text totalVar2Txt; 
    //Score 

    // Use this for initialization 
    void Start() 
    { 
     HexBin.Add(1); // 0001 
     HexBin.Add(2); // 0010 
     HexBin.Add(3); 
     HexBin.Add(4); 
     HexBin.Add(5); 
     HexBin.Add(6); 
     HexBin.Add(7); 
     HexBin.Add(8); 
     HexBin.Add(9); 
     HexBin.Add("A"); 
     HexBin.Add("B"); 
     HexBin.Add("C"); 
     HexBin.Add("D"); 
     HexBin.Add("E"); 
     HexBin.Add("F"); 
     //rand1 = Random.Range(0, HexBin.Count - 1); 
     //rand2 = Random.Range(0, HexBin.Count - 1); 
     randomSpawn(); 
     //randomizeHex(); 
     // randomizeSpawn(); 
     // spawnExplosion(); 
    } 


    public void spawnExplosion(Vector3 b) 
    { 
     //x, y, z 
     Instantiate(explosion, b, Quaternion.identity); 
     // explosion.transform.localPosition = new Vector3(0, 0, 100); 
     // Debug.Log(enemy.transform.position.y); 
     Debug.Log("Explotion Spawn"); 
    } 

    //public IEnumerator enemySpawnTimer() 
    //{ 
    // yield return new WaitForSeconds(5f); 
    // //if random matches destroy enemy 
    // //wait 5 seconds 
    // //instantiate new enemy 
    // // randomSpawn(); 
    //} 


    public void randomizeHex() 
    { 
     rand1 = Random.Range(0, HexBin.Count); 
     rand2 = Random.Range(0, HexBin.Count); 
     Debug.Log(rand1 + "rand1"); 
     Debug.Log(rand2 + "rand2"); 
     //Debug.Log(rand1); 
     //  Debug.Log(rand1); 
    } 

    public void randomSpawn() 
    { 
     Instantiate(enemy, new Vector3(Random.Range(1, -2), 6, 1), Quaternion.identity); 
     randomizeHex(); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (question.text.Contains(totalVar1Txt.text) && question.text.Contains(totalVar2Txt.text)) 
     { 
      result.text = "OK"; 
     } 

     switch (HexToBinary.rand1) 
     { 
      case 1: 
       valGroup1 = "1"; 
       break; 
      case 2: 
       valGroup1 = "2"; 
       break; 
      case 3: 
       valGroup1 = "3"; 
       break; 
      case 4: 
       valGroup1 = "4"; 
       break; 
      case 5: 
       valGroup1 = "5"; 
       break; 
      case 6: 
       valGroup1 = "6"; 
       break; 
      case 7: 
       valGroup1 = "7"; 
       break; 
      case 8: 
       valGroup1 = "8"; 
       break; 
      case 9: 
       valGroup1 = "9"; 
       break; 
      case 10: 
       valGroup1 = "A"; 
       break; 
      case 11: 
       valGroup1 = "B"; 
       break; 
      case 12: 
       valGroup1 = "C"; 
       break; 
      case 13: 
       valGroup1 = "D"; 
       break; 
      case 14: 
       valGroup1 = "E"; 
       break; 
      case 15: 
       valGroup1 = "F"; 
       break; 
     } 
     switch (HexToBinary.rand2) 
     { 
      case 1: 
       valGroup2 = "1"; 
       break; 
      case 2: 
       valGroup2 = "2"; 
       break; 
      case 3: 
       valGroup2 = "3"; 
       break; 
      case 4: 
       valGroup2 = "4"; 
       break; 
      case 5: 
       valGroup2 = "5"; 
       break; 
      case 6: 
       valGroup2 = "6"; 
       break; 
      case 7: 
       valGroup2 = "7"; 
       break; 
      case 8: 
       valGroup2 = "8"; 
       break; 
      case 9: 
       valGroup2 = "9"; 
       break; 
      case 10: 
       valGroup2 = "A"; 
       break; 
      case 11: 
       valGroup2 = "B"; 
       break; 
      case 12: 
       valGroup2 = "C"; 
       break; 
      case 13: 
       valGroup2 = "D"; 
       break; 
      case 14: 
       valGroup2 = "E"; 
       break; 
      case 15: 
       valGroup2 = "F"; 
       break; 
     } 

     question.text = valGroup1 + " " + valGroup2; 
     totalVar1Txt.text = boxesTouch.totalVarGrp1.ToString(); 
     totalVar2Txt.text = boxesTouch.totalVarGrp2.ToString(); 
     //question.text = HexToBinary.HexBin[rand2].ToString() +" "+ HexToBinary.HexBin[rand1].ToString(); 
     //enemy.transform.Translate(0, speed * Time.deltaTime, 0); 
    } 
    //spawnExplosion(); 
} 
+0

使用調試器,並通過代碼步驟..很明顯,你正在做一些不正確的事情。 – MethodMan

+1

不是粗魯的,但任何問題都應該對大家有普遍的興趣。不只是請求調試您的特定代碼。 – RCYR

回答

1

你有這樣的:

switch (HexToBinary.rand1) 
    { 
     case 1: 
      valGroup1 = "1"; 
      break; 

再後來在一些註釋代碼:

HexToBinary.HexBin[rand1].ToString() 

你的問題是,數組(至少,大量o f語言,包括C#)start at index 0

指數1在這裏(你設置valGroup1通過你的switch語句中的字符串"1")實際上是2值:

HexBin.Add(1); // <-- index 0 
    HexBin.Add(2); // <-- index 1 

當然......你錯過值無論如何......這樣就可以解決你的問題了。作爲一個方面說明,根本不需要switch語句(少兩次,你可以將它封裝爲一個函數!),你可以使用ToString("X")來代替。這將真的讓事情變得更容易!

我也看到一些變量被視爲靜態,有些沒有(甚至靜態的變量被HexToBinary.varvar混合引用),沒有明確的原因。如果您需要從場景there are other ways中其他位置的其他腳本訪問這些值。