From e5a548fce916a226f65a597c73ccf44f5889ee89 Mon Sep 17 00:00:00 2001 From: gunqqer Date: Tue, 13 Dec 2022 21:58:58 -0500 Subject: [PATCH 1/2] Add primative support for areas Work in progress --- Assets/Examples/Scripts/NavMeshSourceTag.cs | 141 +++++++++++--------- 1 file changed, 77 insertions(+), 64 deletions(-) diff --git a/Assets/Examples/Scripts/NavMeshSourceTag.cs b/Assets/Examples/Scripts/NavMeshSourceTag.cs index 375ff635..ce944c8c 100644 --- a/Assets/Examples/Scripts/NavMeshSourceTag.cs +++ b/Assets/Examples/Scripts/NavMeshSourceTag.cs @@ -1,79 +1,92 @@ +using System; +using System.Collections; +using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; -using System.Collections.Generic; -// Tagging component for use with the LocalNavMeshBuilder -// Supports mesh-filter and terrain - can be extended to physics and/or primitives -[DefaultExecutionOrder(-200)] -public class NavMeshSourceTag : MonoBehaviour +public class NavMeshSourceTagWithAreas : MonoBehaviour { - // Global containers for all active mesh/terrain tags - public static List m_Meshes = new List(); - public static List m_Terrains = new List(); + public static List> m_Meshes = + new List>(); + public static List> m_Terrains = + new List>(); + + [SerializeField] + public int areaNum = -1; - void OnEnable() - { - var m = GetComponent(); - if (m != null) - { - m_Meshes.Add(m); - } + void OnEnable() + { + if(areaNum == -1) {return;} + addToList(); + } + + public void addToList() + { + var m = GetComponent(); + if (m != null) + { + m_Meshes.Add(new Tuple(m, areaNum)); + } - var t = GetComponent(); - if (t != null) - { - m_Terrains.Add(t); - } - } + var t = GetComponent(); + if (t != null) + { + m_Terrains.Add( + new Tuple(t, areaNum)); + } + } - void OnDisable() - { - var m = GetComponent(); - if (m != null) - { - m_Meshes.Remove(m); - } + void OnDisable() + { + var m = GetComponent(); + if (m != null) + { + m_Meshes.Remove(new Tuple( + m, areaNum)); + } - var t = GetComponent(); - if (t != null) - { - m_Terrains.Remove(t); - } - } + var t = GetComponent(); + if (t != null) + { + m_Terrains.Remove( + new Tuple(t, areaNum)); + } + } - // Collect all the navmesh build sources for enabled objects tagged by this component - public static void Collect(ref List sources) - { - sources.Clear(); + public static void Collect(ref List sources) + { + sources.Clear(); - for (var i = 0; i < m_Meshes.Count; ++i) - { - var mf = m_Meshes[i]; - if (mf == null) continue; + for (var i = 0; i < m_Meshes.Count; ++i) + { + var mf = m_Meshes[i]; + if (mf.Item1 == null) continue; - var m = mf.sharedMesh; - if (m == null) continue; + var m = mf.Item1.sharedMesh; + if (m == null) continue; - var s = new NavMeshBuildSource(); - s.shape = NavMeshBuildSourceShape.Mesh; - s.sourceObject = m; - s.transform = mf.transform.localToWorldMatrix; - s.area = 0; - sources.Add(s); - } + var s = new NavMeshBuildSource(); + s.shape = NavMeshBuildSourceShape.Mesh; + s.sourceObject = m; + s.transform = mf.Item1.transform.localToWorldMatrix; + s.area = mf.Item2; + sources.Add(s); + } - for (var i = 0; i < m_Terrains.Count; ++i) - { - var t = m_Terrains[i]; - if (t == null) continue; + for (var i = 0; i < m_Terrains.Count; ++i) + { + var t = m_Terrains[i]; + if (t.Item1 == null) continue; - var s = new NavMeshBuildSource(); - s.shape = NavMeshBuildSourceShape.Terrain; - s.sourceObject = t.terrainData; - // Terrain system only supports translation - so we pass translation only to back-end - s.transform = Matrix4x4.TRS(t.transform.position, Quaternion.identity, Vector3.one); - s.area = 0; - sources.Add(s); - } - } + var s = new NavMeshBuildSource(); + s.shape = NavMeshBuildSourceShape.Terrain; + s.sourceObject = t.Item1.terrainData; + // Terrain system only supports translation - so we pass translation + // only to back-end + s.transform = Matrix4x4.TRS( + t.Item1.transform.position, Quaternion.identity, Vector3.one); + s.area = t.Item2; + sources.Add(s); + } + } } From 50620e3e3637be0d12953116ac6da01c1caa9e80 Mon Sep 17 00:00:00 2001 From: Gunqqer Date: Wed, 14 Dec 2022 17:01:12 -0500 Subject: [PATCH 2/2] Add some comments --- Assets/Examples/Scripts/NavMeshSourceTag.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Assets/Examples/Scripts/NavMeshSourceTag.cs b/Assets/Examples/Scripts/NavMeshSourceTag.cs index ce944c8c..bfcdc90b 100644 --- a/Assets/Examples/Scripts/NavMeshSourceTag.cs +++ b/Assets/Examples/Scripts/NavMeshSourceTag.cs @@ -4,7 +4,7 @@ using UnityEngine; using UnityEngine.AI; -public class NavMeshSourceTagWithAreas : MonoBehaviour +public class NavMeshSourceTag : MonoBehaviour { public static List> m_Meshes = new List>(); @@ -12,7 +12,7 @@ public class NavMeshSourceTagWithAreas : MonoBehaviour new List>(); [SerializeField] - public int areaNum = -1; + public int areaNum = -1; //Set to zero for default void OnEnable() { @@ -20,6 +20,8 @@ void OnEnable() addToList(); } + //This is not the best way to do this, as you can easily call this multiple times are mess things up + //TODO refractor this to avoid multiple adds public void addToList() { var m = GetComponent();