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();
}
场景导出阻挡点
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();
}
相关文章推荐
- Unity外部加载文本数据——避免修改部分数据重新导出包
- 【unity】将场景导出XML或JSON或二进制并且解析还原场景(补充)
- 关于Unity中场景的导入与导出(专题九)
- GitHub上发现的一个导出Unity3D场景数据的工具
- mysql运行拼接的字符串和导出数据
- Unity场景切换时传递数据
- matlab中“”字符串数据导出到excel
- Unity编辑器重写Inspector面板,面板中编辑的数据不触发场景发生变化的问题。
- Unity编辑器重写Inspector面板,面板中编辑的数据不触发场景发生变化的问题。
- 关于李三影【Unity 游戏开发教程】装备系统 - 01. JSON数据创建与使用要做笔记的地方
- 关于unity导出的exe文件运行场景文件丢失问题解决
- 非常规数据恢复的几种场景(跳过坏块导出数据)
- Unity关于用LoadLevelAdditiveAsync导致新场景的Navmesh数据不正确Loading条的实践
- Unity5.x 烘焙场景导出方法(更换lightmap曝光丢失问题)
- oracle数据库clob字段转换成字符串,方便数据转换和数据导出
- 【unity】将场景导出XML或JSON或二进制并且解析还原场景
- (转)Unity 导出XML配置文件,动态加载场景
- Unity导出场景地形网格到.obj文件
- Unity游戏开发——Unity场景导出XML并且进行加载
- php压缩gzcompress和解压gzuncompress字符串的方法,适用于大数据的内容场景