В одном из моих проектов мне необходимо было динамически строить навигацию на карте, использую стандартные средства Unity3D в результате долгих поисков мне все же удалось найти пример скрипта и я понял почему функция “NavMeshBuilder.BuildNavMesh ();” не хотела у меня выполняться. Необходимо обязательно подключить ”
1 |
using System; |
”
В общем теперь у меня все работает и генерируется при старте сцены, а вот скрипт который мне помог в этом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using UnityEngine; using System.Collections; using UnityEditor; using System.Reflection; using System; public class NavMeshSettingsHack : MonoBehaviour { [MenuItem ("NavMesh/Change Nav Mesh Settings")] static void ChangeNavMeshSettings() { Type[] types = Assembly.GetAssembly(typeof(EditorWindow)).GetTypes(); Type type = null; //type = System.Type.GetType("UnityEditor.NavMeshEditorWindow"); // don't know why this failed. used following workaround: foreach (Type t in types) { if (t.Name.Contains("NavMeshEditorWindow")) { type = t; } } EditorWindow win = EditorWindow.GetWindow(type); EditorUtility.FocusProjectWindow(); win.Focus(); ChangeFloatField(win, "m_AgentRadius", 1.1f); ChangeFloatField(win, "m_AgentHeight", 0.2f); ChangeFloatField(win, "m_AgentSlope", 45.0f); ChangeFloatField(win, "m_AgentClimb", 0.4f); } private static void ChangeFloatField(System.Object obj, string fieldName, float v) { FieldInfo fi = obj.GetType().GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); UnityEditor.SerializedProperty p = (fi.GetValue(obj) as UnityEditor.SerializedProperty); p.floatValue = v; p.serializedObject.ApplyModifiedProperties(); } } |
Источник: http://forum.unity3d.com/threads/navmeshsettingsobject.145296/