您的位置:首页 > 移动开发 > Unity3D

Unity场景导出01字符串A星数据

2016-10-29 10:08 471 查看
利用Unity生成NavMesh寻路信息,生成可碰撞区域,再用摄像轮询去碰撞检测。

场景导出阻挡点
public static string GetCurSceneRoadList(Vector2 leftBottom, Vector2 rightTop)
{
GameObject tempObject = GameObject.Find("Driver");
if(tempObject == null)
tempObject = new GameObject();
tempObject.ResetLocalPosition();
NavMeshTriangulation nmt = NavMesh.CaculateTriangulation();
Mesh mesh = new Mesh();
mesh.Clear();
mesh.vertices = nmt.vertices;
mseh.triangles = nmt.indices;

MeshFilter filter = tempObject.GetComponent<MeshFilter>();
if(filter == null)
filter = tempObject.AddComponent<MeshFilter>();
if(filter != null)
filter.sharedMesh = mesh;

MeshRenderer meshRender = tempObject.GetComponent<MeshRenderer>()
if(meshRender == null)
meshRender = tempObject.AddComponent<MeshRenderer>();
Shader shader = Shader.Find("Diffuse");
meshRender.SharedMaterial = new Material(shader);

MeshCollider meshCollider = tempObject.GetComponent<MeshCollider>();
if(meshCollider == null)
meshCollider = tempObject.AddComponent<MeshCollider>();
meshCollider.sharedMesh = mesh;

StringBuilder sb = new StringBuilder();
int xLoopNum = (int)((rightTop.x - leftBottom.x)/SCENE_ONE_GRID_SIZE);
int yLoopNum = (int)((rightTop.y - leftBottom.y)/SCENE_ONE_GRID_SIZE);

for(int j = 0; j < yLoopNum; ++y)
{
for(int i = 0; i < xLoopNum; ++i)
{
float xPos = leftBottom.x + i * SCENE_ONE_GRID_SIZE + SCENE_ONE_GRID_SIZE/2;
float yPos = leftBottom.y + j * SCENE_ONE_GRID_SIZE + SCENE_ONE_GRID_SIZE/2;
Vector3 = originalPos = new Vector3(xPos, 15, yPos);

Ray ray = new Ray(originalPos, Vector3.down);
RaycastHit hit;
if(meshCollider.Raycast(ray, out hit, 50.0f))
{
//可走
sb.Append("0");
}
else
{
//不可走
sb.Append("1");
}

if(i != xLoopNum -1)
{
sb.Append(",");
}
}

if( j != yLoopNum)
sb.Append("_");
}
return sb.toString();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息