游戏开发过程中经常用到A*寻路算法,在美术制作完场景后,需要编辑行走区域和不可行走区域。能在Unity Scene场景中直接编辑,并导出数据文件,将会方便很多。
1 数据类
先定义一个网格数据类型,定义网格长,宽数量,以及实现序列化。values 中存放是否可通行的数据,0表示障碍,不可通行。
public class MapData
{
///
/// 网格宽度
///
public int mapLen = 0;
///
/// 网格宽度
///
public int mapWidth = 0;
///
/// 网格状态数据
///
private List values = new List();
public int GetValue(int index)
{
if (index >= values.Count)
{
UnityTools.LogError("MapData GetValue index is not exsist! index->>"+ index.ToString());
return -1;
}
return values[index];
}
public int GetValue(int x ,int y)
{
int index = x * mapWidth + y;
GetValue(index);
return values[index];
}
public void AddValue(int value)
{
values.Add(value);
}
public void SetValue(int x,int y,int value)
{
int index = x * mapWidth + y;
values[index] = value;
}
public int GetValuesCount()
{
return values.Count;
}
public void ClearValues()
{
values.Clear();
}
public string Serialized()
{
string str = mapLen.ToString() + "," + mapWidth.ToString() + ",";
for (int i = 0; i < values.Count; i++)
{
str += values[i].ToString() + ",";
}
return str;
}
public MapData DeSerialized(string data)
{
values.Clear();
string[] strList = data.Split(',');
mapLen = int.Parse(strList[0]);
mapWidth = int.Parse(strList[1]);
for (int i = 2; i < strList.Length; i++)