从列表中获取模型

时间:2017-10-10 23:45:34

标签: c# unity3d

我不是程序员,但不知何故想要做点什么,几乎就像一个爱好。 截至目前,我已经列出了不同的游戏对象(模型),我需要从该列表中选择正确的一个。一切正常,但我希望看到一个人如何能够改变选择的部分。

首先是我的瓷砖,其中包含信息:

using System;
using UnityEngine;

[Serializable]
public class Tiles {

public string Name;
public Type TileType;
public Vector3 Cordinates;
public GameObject Tile;

public Tiles()
{
    Name = "Unset";
    TileType = Type.Unset;
    Cordinates = new Vector3(0, 0, 0);
    Tile = null;
}

public Tiles(string name, Type type, Vector3 cord, GameObject tile)
{
    Name = name;
    TileType = type;
    Cordinates = cord;
    Tile = tile;
}

public enum Type
{
    Unset,
    Sand,
    Obstacle,
    ObstaclePass
}

}

而我所谓的地图,它也只是为了容易。在这张地图中有GetTileType() - 它返回我正在绘制的游戏对象。

using System.Collections.Generic;
using UnityEngine;

public class Map : MonoBehaviour {

public Vector2 MapSize = new Vector2(5,5);
public List<Tiles> MapTile = new List<Tiles>();
//AllTiles holds all the gameobject i'm choosing from
public List<GameObject> AllTiles = new List<GameObject>();


public void GenerateMap()
{
    for (int x = 0; x < MapSize.x; x++)
    {
        for (int z = 0; z < MapSize.y; z++)
        {
            //just so i could test if it draws different gameobject
            if (x == 2 && z == 2)
            {
                MapTile.Add(new Tiles("Obstacle", Tiles.Type.Obstacle, new Vector3(x, 0, z), GetTileType(Tiles.Type.Obstacle)));
            }
            else
            {
                MapTile.Add(new Tiles("Unset", Tiles.Type.Unset, new Vector3(x, 0, z), GetTileType(Tiles.Type.Unset)));
            }
        }
    }
}

//This is my question
public GameObject GetTileType(Tiles.Type type)
{
    switch (type)
    {
        case Tiles.Type.Unset:
            return AllTiles[0];
        case Tiles.Type.Obstacle:
            return AllTiles[1];
        case Tiles.Type.ObstaclePass:
            return AllTiles[2];
        default:
            break;
    }
    return AllTiles[0];
}

public void DrawMap()
{
    for (int i = 0; i < MapTile.Count; i++)
    {
        Instantiate(MapTile[i].Tile, MapTile[i].Cordinates, Quaternion.Euler(90, 0, 0), transform);
    }
}

private void Start()
{
    GenerateMap();
    DrawMap();
}
}

我真的可以用开关或者如果声明来制作它。 Switch对我来说看起来更好,所以我坚持使用它,但不知怎的,我认为应该有更好更清洁的方式。或者我应该在Tiles类中选择瓷砖?那么这样做的其他选择是什么?或者在这段代码中真正应该改变的东西。 (不是真的想在这里做任何事,只是每周试几次)

1 个答案:

答案 0 :(得分:1)

我确保AllTiles是一对一的,并与Tiles.Type对齐。

public GameObject GetTileType(Tiles.Type type)
{
    return AllTiles [(int)type];
}

编辑:这也会使函数调用不再需要,从而提高性能。