我已经创建了这样的地图:
现在我想在这些网格中划出障碍,我该怎么做?
现在我只能在鼠标按下时画出障碍物,但是一旦我运行游戏,我就无法生成有障碍的地图。
请帮帮我。
这是我在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;
}
}
非常感谢!感谢您的回答
答案 0 :(得分:0)
这里有一些考虑:
为什么在这种情况下使用List作为存储坐标的一种非常好的方法(快速)是(对于s =边长):
阵列很快
要在启动时生成特定的磁贴,您可以使用不同的选项,这是伪代码:
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;
}
}
但是还有很多其他方法可以做到这一点。 编辑: 提供更直接的解决方案