Advertisement
Guest User

Untitled

a guest
Aug 30th, 2017
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.06 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEngine.AI;
  3. using System.Collections.Generic;
  4. using Voxeland5;
  5.  
  6. // Tagging component for use with the LocalNavMeshBuilder
  7. // Supports mesh-filter and terrain - can be extended to physics and/or primitives
  8. [DefaultExecutionOrder(-200)]
  9. public class NavMeshSourceTag : MonoBehaviour
  10. {
  11.     // Global containers for all active mesh/terrain tags
  12.     public static List<MeshFilter> m_Meshes = new List<MeshFilter>();
  13.     public static List<Terrain> m_Terrains = new List<Terrain>();
  14.     public static List<Chunk> v_Chunks = new List<Chunk>();
  15.  
  16.     void OnEnable()
  17.     {
  18.         var v = GetComponent<Chunk>();
  19.         if (v != null)
  20.         {
  21.             v_Chunks.Add(v);
  22.         }
  23.         var m = GetComponent<MeshFilter>();
  24.         if (m != null)
  25.         {
  26.             m_Meshes.Add(m);
  27.         }
  28.        
  29.         var t = GetComponent<Terrain>();
  30.         if (t != null)
  31.         {
  32.             m_Terrains.Add(t);
  33.         }
  34.     }
  35.    
  36.     void OnDisable()
  37.     {
  38.         var m = GetComponent<MeshFilter>();
  39.         if (m != null)
  40.         {
  41.             m_Meshes.Remove(m);
  42.         }
  43.        
  44.         var t = GetComponent<Terrain>();
  45.         if (t != null)
  46.         {
  47.             m_Terrains.Remove(t);
  48.         }
  49.     }
  50.    
  51.     // Collect all the navmesh build sources for enabled objects tagged by this component
  52.     public static void Collect(ref List<NavMeshBuildSource> sources)
  53.     {
  54.         sources.Clear();
  55.        
  56.         for (var i = 0; i < m_Meshes.Count; ++i)
  57.         {
  58.             var mf = m_Meshes[i];
  59.             if (mf == null) continue;
  60.            
  61.             var m = mf.sharedMesh;
  62.             if (m == null) continue;
  63.            
  64.             var s = new NavMeshBuildSource();
  65.             s.shape = NavMeshBuildSourceShape.Mesh;
  66.             s.sourceObject = m;
  67.             s.transform = mf.transform.localToWorldMatrix;
  68.             s.area = 0;
  69.             sources.Add(s);
  70.         }
  71.        
  72.         for (var i = 0; i < m_Terrains.Count; ++i)
  73.         {
  74.             var t = m_Terrains[i];
  75.             if (t == null) continue;
  76.            
  77.             var s = new NavMeshBuildSource();
  78.             s.shape = NavMeshBuildSourceShape.Terrain;
  79.             s.sourceObject = t.terrainData;
  80.             // Terrain system only supports translation - so we pass translation only to back-end
  81.             s.transform = Matrix4x4.TRS(t.transform.position, Quaternion.identity, Vector3.one);
  82.             s.area = 0;
  83.             sources.Add(s);
  84.         }
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement