在地图内创建障碍物

时间:2013-11-23 17:42:21

标签: c# map unity3d

我已经创建了这样的地图:

enter image description here

现在我想在这些网格中划出障碍,我该怎么做?

现在我只能在鼠标按下时画出障碍物,但是一旦我运行游戏,我就无法生成有障碍的地图。

请帮帮我。

这是我在unity3d(c#)中制作网格的代码:

public GameObject TilePrefab;
public List<List<Tile>> map = new List<List<Tile>>();
public int mapSize = 20; 

void GenerateMap() 
    {
        map = new List<List<Tile>>();

        for (int i = 0; i < mapSize; i++) 
        {
         List <Tile> row = new List<Tile>();

            for (int j = 0; j < mapSize; j++)
            {
                Tile tile = ((GameObject)Instantiate(TilePrefab, new Vector3(i - Mathf.Floor(mapSize / 2), 0, -j + Mathf.Floor(mapSize / 2)), Quaternion.Euler(new Vector3()))).GetComponent<Tile>();
          tile.gridPosition = new Vector2(i, j);
          row.Add(tile);
         }

            map.Add(row);
       }
    }

这是我的代码,一旦我点击鼠标按钮(OnMouseDown)就画出障碍:

public bool obstacles = false;
void OnMouseDown()
    {
        obstacles = obstacles ? false : true;

        if (obstacles)
        {
            transform.renderer.material.color = new Color(.5f, .5f, 0.0f);
        }

        else
        {
            transform.renderer.material.color = Color.white;
        }
    }

非常感谢!感谢您的回答

1 个答案:

答案 0 :(得分:0)

这里有一些考虑:

为什么在这种情况下使用List作为存储坐标的一种非常好的方法(快速)是(对于s =边长):

  • int [s * s]&lt; - 如果你想在GPU上编辑地图那么一个很好
  • INT [S] [S]
  • int [s,s]&lt; - 一个非常适合CPU操作

阵列很快

要在启动时生成特定的磁贴,您可以使用不同的选项,这是伪代码:

GameObject[,] tiles = new GameObject[s,s];
public GameObject[] arrayOfTilesTypes; // Simply populate this in inspector with blocking and non blocking gameObjects

for(int i = 0; i<s;  i++) {
    for(int j = 0; j<s;  j++) {
        int objtype = Random.Range(0,arrayOfTilesType.Length);
        tiles[i,j] = Instanciate(arrayOfTilesTypes[objtype],new Vector3(i,0,j),Quaternion.Identity) as GameObject;
    }
}

但是还有很多其他方法可以做到这一点。 编辑: 提供更直接的解决方案