地图单元格生成函数
参数一是图片预制体,参数二是单元格大小,根据图片的大小,设置每一块单元格的大小.平铺整个地图
因为我用于平铺的预制体是一张空图片,缩放与Cube的缩放不一样,我也不知道怎么弄.我的cellSize = 0.1
private void GenerateMap(GameObject map,float cellSize)
{
ClearMap(); //先清空
ground = new GameObject("Base"); //创建一个父节点
//MapEditorMgr mm = ground.AddComponent<MapEditorMgr>();
//mm.mapX = this.mapX;
//mm.mapY = this.mapY;
//mm.blockSize = this.blockSize
UnityEngine.Vector2 startPos = GetStartPos(map); //获得图片的左下角坐标
//加载单元格prefab,
GameObject planPrefab = AssetDatabase.LoadAssetAtPath<GameObject> ("Assets/AStartMapEdit/Res/Plane.prefab");
for (int i = 0; i < mapY; i++)
{
UnityEngine.Vector2.pos= startPos;
for (int j = 0; j < mapX; j++)
{
//创建预制体,设置一些属性
GameObject plane = PrefabUtility.InstantiatePrefab(planPrefab) as GameObject;
plane.transform.SetParent(ground.transform, false);
plane.transform.position = pos;
plane.transform.localScale = new UnityEngine.Vector2(blockSize, blockSize);
//获得每块单元格的脚本数据,并赋值
//BlockData bd = plane.AddComponent<BlockData>();
//bd.mapX = j;
//bd.mapY = i;
//bd.isGo = 0;
pos.x += cellSize;
}
startPos.y += cellSize;
}
清除
先判断父节点是否为空,直接删除父节点.
DestroyImmediate()这个系统函数可以直接清理内存
private void ClearMap()
{
if (ground != null)
DestroyImmediate(ground);
}
取得地图左下角位置
这个函数要求实例必须有"SpriteRenderer"组件.
SpriteRenderer.bounds.size 可以返回图片的大小.然后取地图一半的负数.
UnityEngine.Vector2 GetStartPos(GameObject img)
{
SpriteRenderer sr = img.GetComponent<SpriteRenderer>();
if (sr)
{
UnityEngine.Vector2 pos = sr.bounds.size;
return -pos / 2;
}
return UnityEngine.Vector2.zero;
}
根据以上函数,可以给地图设置单元格,方便控制行走,A星寻路.
如果是3D场景,用Cube平铺地图可能更合适.
本人新手.如果有错误,请指正.