代码之家  ›  专栏  ›  技术社区  ›  Ginxxx

基于多维数组值实例化预置(c unity)

  •  1
  • Ginxxx  · 技术社区  · 8 年前

    大家好,我只是想问一下是否可以根据 Multidimensional Array 例如,我有这个数据。

    10 20 11号

    00 21 10号

    00 00 00点

    00 00 00点

    00 00 00点

    00 00 00点

    这是我的密码

    string road1 = "";
        for (int y = 0; y < bsb.ArrBigRoad.GetLength(0); y++)
        {
            for (int x = 0; x < bsb.ArrBigRoad.GetLength(1); x++)
            {
                road1 += string.Format("{0:D2}", bsb.ArrBigRoad[y, x] / 100);
                road1 += ".";
            }
            road1 += "\n";
        }
    Debug.Log(road1);
    

    现在我正在用 Label 这样地

    [SerializeField] public UILabel info_scores_bigroad;
    
    info_scores_bigroad.text = road1;
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Lotan    8 年前

    我建议你用两种不同的方法:

    1.创建一个switch/enum,使用您可以实例化的可能预置,例如:

    //Possible Prefabs, link them on editor
    public GameObject car;
    public GameObject road;
    public GameObject truck;
    
    //Used to instantiate the new object
    public GameObject newObject;
    
    switch(road1){
        case 'car':
            newObject = Instantiate(car);
            break;
        case 'road':
            newObject = Instantiate(road);
            break;
        case 'truck':
            newObject = Instantiate(truck);
            break;
        default:
            print("error: prefab not exists");
            break;
    }
    

    2.使用资源文件夹

    //Used to instantiate the new object
    public GameObject newObject;
    
    newObject = (GameObject)Instantiate(Resources.Load(road1));
    

    请记住,对于case 2,您需要创建一个名为resources的文件夹,并在该文件夹上找到预置项。

        2
  •  1
  •   Ginxxx    8 年前

    谢谢洛坦,我做的事情是这样的

    设置芯线

    public void Set( int score )
    {
        int who = score / 1000;
    
        if (who == 1)
        {
            NGUITools.SetActive(obj_player, true );
            NGUITools.SetActive(obj_banker, false);
        }
        else if( who == 2)
        {
            NGUITools.SetActive(obj_player, false);
            NGUITools.SetActive(obj_banker, true);
        }
        else
        {
            NGUITools.SetActive(obj_player, false);
            NGUITools.SetActive(obj_banker, false);
    
            NGUITools.SetActive(lbl_tie_no.gameObject, false);
            NGUITools.SetActive(spr_playerPair.gameObject, false);
            NGUITools.SetActive(spr_bankerPair.gameObject, false);
            return;
        }
    }
    

    然后在我的二维阵列上像这样排列

    游戏.cs

    public IEnumerator ShowScoreBoard_BigRoad(int[,]  arrBigRoad)
    {
        NGUITools.DestroyChildren(pos_bigroad);
    
        for (int y = 0; y < arrBigRoad.GetLength(0); y++)
        {
            for (int x = 0; x < arrBigRoad.GetLength(1); x++)
            {
                int score = arrBigRoad[y, x];
    
                GameObject o = Instantiate(prefab_bigroad) as GameObject;
                o.transform.SetParent(pos_bigroad);
                o.transform.localScale = Vector3.one;
    
                o.transform.localPosition = new Vector3(x * SX_, y* SY_, 0);
                NGUITools.SetActive(o, true);
    
                // 1011, 2000, 3000, 
    
                bsbBigRoad s = o.GetComponent<bsbBigRoad>();
                s.Set(score);
            }
        }
    
        yield break;
    }
    

    不过还是谢谢你。:)