void OnEnable() { if (mBuildData == null || !mBuildData.IsValid) { // Don't trust Unity de-serialization of null objects. mBuildData = new TileBuildData(); } CleanBuild(); if (mBuildType == NavmeshBuildType.Advanced) { BuildSelector.Instance.Add(this); } }
/// <summary> /// Resets the build to the <see cref="NavmeshBuildState.Inactive"/> state, clearing all /// build data. /// </summary> public void ResetBuild() { mBuildData = new TileBuildData(); mTileSet = null; mInputGeom = null; mInputInfo = new InputBuildInfo(); mNMGenProcessors = null; mConnections = null; mBoundsMin = Vector3.zero; mBoundsMax = Vector3.zero; mIsDirty = true; }
/// <summary> /// Controls behavior of the inspector. /// </summary> public override void OnInspectorGUI() { NavmeshBuild targ = (NavmeshBuild)target; EditorGUIUtility.LookLikeControls(100); OnGUIState(targ); GUI.enabled = !targ.HasBuildData; EditorGUILayout.Separator(); targ.BuildTarget = NavEditorUtil.OnGUINavmeshDataField("Bake Target", targ.BuildTarget); EditorGUILayout.Separator(); NavmeshBuildType buildType = (NavmeshBuildType) EditorGUILayout.EnumPopup("Build Type", targ.BuildType); if (buildType != targ.BuildType) { targ.BuildType = buildType; if (buildType == NavmeshBuildType.Advanced) { BuildSelector.Instance.Select(targ); } } EditorGUILayout.Separator(); TileBuildData tdata = targ.BuildData; GUI.enabled = (tdata == null && targ.TargetHasNavmesh); if (GUILayout.Button("Log Mesh State")) { Debug.Log(targ.BuildTarget.GetMeshReport()); } GUI.enabled = true; switch (targ.BuildType) { case NavmeshBuildType.Standard: OnGUIStandard(targ); break; case NavmeshBuildType.Advanced: OnGUIAdvanced(targ); break; } EditorGUILayout.Separator(); bool orig = mShowInputConfig; mShowInputConfig = EditorGUILayout.Foldout(mShowInputConfig, "Input Configuration"); if (orig != mShowInputConfig) { EditorPrefs.SetBool(ShowInputKey, mShowInputConfig); } EditorGUIUtility.LookLikeControls(); if (mShowInputConfig) { GUI.enabled = !targ.HasBuildData; EditorGUILayout.Separator(); targ.AutoCleanGeometry = EditorGUILayout.Toggle("Auto-Clean", targ.AutoCleanGeometry); EditorGUILayout.Separator(); ScriptableObject so = (ScriptableObject)targ.SceneQuery; ScriptableObject nso = (ScriptableObject)EditorGUILayout.ObjectField( "Scene Query" , so , typeof(ScriptableObject) , false); if (nso != so) { if (!nso || nso is ISceneQuery) { targ.SceneQuery = (ISceneQuery)nso; } else { Debug.LogError(string.Format("{0} does not implement {1}." , nso.name, typeof(ISceneQuery).Name)); } } EditorGUILayout.Separator(); if (OnGUIManageProcessorList(targ.inputProcessors)) { targ.IsDirty = true; } GUI.enabled = true; } EditorGUILayout.Separator(); if (targ.IsDirty) { EditorUtility.SetDirty(target); targ.IsDirty = false; } }
private static void OnGUIState(NavmeshBuild build) { INavmeshData btarget = build.BuildTarget; NavmeshBuildInfo binfo = (btarget == null ? null : btarget.BuildInfo); EditorGUILayout.Separator(); System.Text.StringBuilder sb = new System.Text.StringBuilder(); if (build.BuildState == NavmeshBuildState.Invalid) { if (!(ScriptableObject)btarget) { sb.AppendLine("No build target."); } if (build.inputProcessors.Count == 0) { sb.AppendLine("No input processors."); } GUILayout.Label(sb.ToString().Trim() , EditorUtil.ErrorStyle, GUILayout.ExpandWidth(true)); return; } sb.AppendLine("Input Scene: " + NavEditorUtil.SceneDisplayName(binfo)); if (build.SceneQuery == null) { sb.AppendLine("Search scope: Entire scene"); } if (build.TargetHasNavmesh) { sb.AppendLine("Target has existing navmesh."); } else { sb.AppendLine("Target does not have a navmesh."); } if (build.BuildType == NavmeshBuildType.Advanced) { TileBuildData tdata = build.BuildData; sb.AppendLine("Build state: " + build.BuildState); sb.AppendLine("Active builds: " + (tdata == null ? 0 : build.BuildData.GetActive())); } GUILayout.Label(sb.ToString().Trim() , EditorUtil.HelpStyle , GUILayout.ExpandWidth(true)); if (NavEditorUtil.SceneMismatch(binfo)) { GUILayout.Box("Current scene does not match last input scene." , EditorUtil.WarningStyle , GUILayout.ExpandWidth(true)); } EditorGUILayout.Separator(); GUI.enabled = (btarget != null); NavmeshSceneDraw.Instance.OnGUI(build.BuildTarget, "Show Mesh", true, true); GUI.enabled = true; return; }