我不是程序员,但不知何故想要做点什么,几乎就像一个爱好。 截至目前,我已经列出了不同的游戏对象(模型),我需要从该列表中选择正确的一个。一切正常,但我希望看到一个人如何能够改变选择的部分。
首先是我的瓷砖,其中包含信息:
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类中选择瓷砖?那么这样做的其他选择是什么?或者在这段代码中真正应该改变的东西。 (不是真的想在这里做任何事,只是每周试几次)
答案 0 :(得分:1)
我确保AllTiles是一对一的,并与Tiles.Type对齐。
public GameObject GetTileType(Tiles.Type type)
{
return AllTiles [(int)type];
}
编辑:这也会使函数调用不再需要,从而提高性能。