Unity根据Navmesh动态生成小地图

  1. 通过API:UnityEngine.AI.NavMeshTriangulation获取Navmesh信息
  2. 根据获取的Navmesh创建对应Mesh
  3. 创建Camera渲染创建的Mesh
  4. 设置Camera的RenderTexture获取相机渲染信息,生成对应的Texture
  5. 将生成之后的Texture赋给对应的UI
// Use this for initialization
	void Start ()
	{
		UITexture texture = GetComponent ();
		CreateNavmesh ();
		texture.mainTexture = CreateTexture ();
	}

	Texture2D CreateTexture ()
	{
		Texture2D t2d = new Texture2D (200, 200, TextureFormat.RGB24, false);

		Rect rct = new Rect (0, 0, 200, 200);
		RenderTexture renderTexture = new RenderTexture ((int)rct.width, (int)rct.height, 24);
		renderTexture.useMipMap = false;
		var oldActive = RenderTexture.active;
		RenderTexture.active = renderTexture;  

		GameObject goCamera = new GameObject ("NavMeshCamera");
		Camera m_camera = goCamera.AddComponent ();
		Quaternion quaternion = m_camera.transform.rotation;
		m_camera.orthographic = true;
		m_camera.clearFlags = CameraClearFlags.SolidColor;
		m_camera.backgroundColor = Color.clear;
		m_camera.aspect = 1;

		var oldTexture = m_camera.targetTexture;
		m_camera.targetTexture = renderTexture;  
		m_camera.Render ();  
		m_camera.targetTexture = oldTexture;

		t2d.ReadPixels (rct, 0, 0);
		t2d.Apply ();

		GameObject.DestroyObject (goCamera);
		return t2d;
	}

	void CreateNavmesh ()
	{
		UnityEngine.AI.NavMeshTriangulation nms = UnityEngine.AI.NavMesh.CalculateTriangulation ();

		Mesh mesh = new Mesh ();
		mesh.vertices = nms.vertices;
		mesh.triangles = nms.indices;

		GameObject temp = new GameObject ("temp");
		MeshFilter mf = temp.AddComponent ();
		mf.mesh = mesh;
		MeshRenderer mr = temp.AddComponent ();
	}
	
	// Update is called once per frame
	void Update ()
	{
		
	}

// 测试代码

你可能感兴趣的:(Unity)