diff options
author | chai <215380520@qq.com> | 2024-05-23 10:08:29 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-05-23 10:08:29 +0800 |
commit | 8722a9920c1f6119bf6e769cba270e63097f8e25 (patch) | |
tree | 2eaf9865de7fb1404546de4a4296553d8f68cc3b /Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor | |
parent | 3ba4020b69e5971bb0df7ee08b31d10ea4d01937 (diff) |
+ astar project
Diffstat (limited to 'Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor')
347 files changed, 25986 insertions, 0 deletions
diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AIBaseEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AIBaseEditor.cs new file mode 100644 index 0000000..ce8e318 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AIBaseEditor.cs @@ -0,0 +1,188 @@ +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + [CustomEditor(typeof(AIBase), true)] + [CanEditMultipleObjects] + public class BaseAIEditor : EditorBase { + float lastSeenCustomGravity = float.NegativeInfinity; + bool debug = false; + + protected void AutoRepathInspector () { + var mode = FindProperty("autoRepath.mode"); + + PropertyField(mode, "Recalculate paths automatically"); + if (!mode.hasMultipleDifferentValues) { + var modeValue = (AutoRepathPolicy.Mode)mode.enumValueIndex; + EditorGUI.indentLevel++; + if (modeValue == AutoRepathPolicy.Mode.EveryNSeconds) { + FloatField("autoRepath.period", min: 0f); + } else if (modeValue == AutoRepathPolicy.Mode.Dynamic) { + var maxInterval = FindProperty("autoRepath.maximumPeriod"); + FloatField(maxInterval, min: 0f); + Slider("autoRepath.sensitivity", 1.0f, 20.0f); + if (PropertyField("autoRepath.visualizeSensitivity")) { + EditorGUILayout.HelpBox("When the game is running the sensitivity will be visualized as a magenta circle. The path will be recalculated immediately if the destination is outside the circle and more quickly if it is close to the edge.", MessageType.None); + } + EditorGUILayout.HelpBox("The path will be recalculated at least every " + maxInterval.floatValue.ToString("0.0") + " seconds, but more often if the destination changes quickly", MessageType.None); + } + EditorGUI.indentLevel--; + } + } + + protected void DebugInspector () { + debug = EditorGUILayout.Foldout(debug, "Debug info"); + if (debug) { + var ai = target as IAstarAI; + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.Toggle("Reached Destination", ai.reachedDestination); + EditorGUILayout.Toggle("Reached End Of Path", ai.reachedEndOfPath); + if (ai is AIBase aiBase && aiBase.rvoDensityBehavior.enabled) { + EditorGUILayout.Toggle("Destination is crowded", aiBase.rvoDensityBehavior.lastJobDensityResult); + } + EditorGUILayout.Toggle("Path Pending", ai.pathPending); + EditorGUILayout.Vector3Field("Destination", ai.destination); + EditorGUILayout.LabelField("Remaining distance", ai.remainingDistance.ToString("0.00")); + EditorGUI.EndDisabledGroup(); + } + } + + protected override void Inspector () { + var isAIPath = typeof(AIPath).IsAssignableFrom(target.GetType()); + + Section("Shape"); + FloatField("radius", min: 0.01f); + FloatField("height", min: 0.01f); + + Section("Pathfinding"); + AutoRepathInspector(); + + Section("Movement"); + + PropertyField("canMove"); + FloatField("maxSpeed", min: 0f); + + if (isAIPath) { + EditorGUI.BeginChangeCheck(); + var acceleration = FindProperty("maxAcceleration"); + int acc = acceleration.hasMultipleDifferentValues ? -1 : (acceleration.floatValue >= 0 ? 1 : 0); + var nacc = EditorGUILayout.Popup("Max Acceleration", acc, new [] { "Default", "Custom" }); + if (EditorGUI.EndChangeCheck()) { + if (nacc == 0) acceleration.floatValue = -2.5f; + else if (acceleration.floatValue < 0) acceleration.floatValue = 10; + } + + if (!acceleration.hasMultipleDifferentValues && nacc == 1) { + EditorGUI.indentLevel++; + PropertyField(acceleration.propertyPath); + EditorGUI.indentLevel--; + acceleration.floatValue = Mathf.Max(acceleration.floatValue, 0.01f); + } + + Popup("orientation", new [] { new GUIContent("ZAxisForward (for 3D games)"), new GUIContent("YAxisForward (for 2D games)") }); + } else { + FloatField("acceleration", min: 0f); + + // The RichAI script doesn't really support any orientation other than Z axis forward, so don't expose it in the inspector + FindProperty("orientation").enumValueIndex = (int)OrientationMode.ZAxisForward; + } + + if (PropertyField("enableRotation")) { + EditorGUI.indentLevel++; + FloatField("rotationSpeed", min: 0f); + if (PropertyField("slowWhenNotFacingTarget")) { + EditorGUI.indentLevel++; + PropertyField("preventMovingBackwards"); + EditorGUI.indentLevel--; + } + EditorGUI.indentLevel--; + } + + if (isAIPath) { + FloatField("pickNextWaypointDist", min: 0f); + FloatField("slowdownDistance", min: 0f); + } else { + FloatField("slowdownTime", min: 0f); + FloatField("wallForce", min: 0f); + FloatField("wallDist", min: 0f); + PropertyField("funnelSimplification"); + } + + FloatField("endReachedDistance", min: 0f); + PropertyField("whenCloseToDestination"); + + if (isAIPath) { + PropertyField("alwaysDrawGizmos"); + PropertyField("constrainInsideGraph"); + } + + var mono = target as MonoBehaviour; + mono.TryGetComponent<Pathfinding.RVO.RVOController>(out Pathfinding.RVO.RVOController rvoController); + if (rvoController && rvoController.enabled) { + if (PropertyField("rvoDensityBehavior.enabled", "Stop when destination is crowded")) { + EditorGUI.indentLevel++; + PropertyField("rvoDensityBehavior.densityThreshold"); + PropertyField("rvoDensityBehavior.returnAfterBeingPushedAway"); + EditorGUI.indentLevel--; + } + } else { + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.Toggle(new GUIContent("Stop when destination is crowded", "Requires an attached RVOController"), false); + EditorGUI.EndDisabledGroup(); + } + + mono.TryGetComponent<Rigidbody>(out Rigidbody rigid); + mono.TryGetComponent<Rigidbody2D>(out Rigidbody2D rigid2D); + mono.TryGetComponent<CharacterController>(out CharacterController controller); + var canUseGravity = (controller != null && controller.enabled) || ((rigid == null || rigid.isKinematic) && (rigid2D == null || rigid2D.isKinematic)); + + var gravity = FindProperty("gravity"); + var groundMask = FindProperty("groundMask"); + + if (canUseGravity) { + EditorGUI.BeginChangeCheck(); + int grav = gravity.hasMultipleDifferentValues ? -1 : (gravity.vector3Value == Vector3.zero ? 0 : (float.IsNaN(gravity.vector3Value.x) ? 1 : 2)); + var ngrav = EditorGUILayout.Popup("Gravity", grav, new [] { "None", "Use Project Settings", "Custom" }); + if (EditorGUI.EndChangeCheck()) { + if (ngrav == 0) gravity.vector3Value = Vector3.zero; + else if (ngrav == 1) gravity.vector3Value = new Vector3(float.NaN, float.NaN, float.NaN); + else if (float.IsNaN(gravity.vector3Value.x) || gravity.vector3Value == Vector3.zero) gravity.vector3Value = Physics.gravity; + lastSeenCustomGravity = float.NegativeInfinity; + } + + if (!gravity.hasMultipleDifferentValues) { + // A sort of delayed Vector3 field (to prevent the field from dissappearing if you happen to enter zeroes into x, y and z for a short time) + // Note: cannot use != in this case because that will not give the correct result in case of NaNs + if (!(gravity.vector3Value == Vector3.zero)) lastSeenCustomGravity = Time.realtimeSinceStartup; + if (Time.realtimeSinceStartup - lastSeenCustomGravity < 2f) { + EditorGUI.indentLevel++; + if (!float.IsNaN(gravity.vector3Value.x)) { + PropertyField(gravity.propertyPath); + } + + if (controller == null || !controller.enabled) { + PropertyField(groundMask.propertyPath, "Raycast Ground Mask"); + } + + EditorGUI.indentLevel--; + } + } + } else { + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.Popup(new GUIContent(gravity.displayName, "Disabled because a non-kinematic rigidbody is attached"), 0, new [] { new GUIContent("Handled by Rigidbody") }); + EditorGUI.EndDisabledGroup(); + } + + DebugInspector(); + + if ((rigid != null || rigid2D != null) && (controller != null && controller.enabled)) { + EditorGUILayout.HelpBox("You are using both a Rigidbody and a Character Controller. Those components are not really designed for that. Please use only one of them.", MessageType.Warning); + } + + var isRichAI = typeof(RichAI).IsAssignableFrom(target.GetType()); + if (isRichAI && Application.isPlaying && AstarPath.active != null && AstarPath.active.graphs.Length > 0 && AstarPath.active.data.recastGraph == null && AstarPath.active.data.navmesh == null) { + EditorGUILayout.HelpBox("This script only works with a navmesh or recast graph. If you are using some other graph type you might want to use another movement script.", MessageType.Warning); + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AIBaseEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AIBaseEditor.cs.meta new file mode 100644 index 0000000..85f1c71 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AIBaseEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ab4eeab9df88a4d069163baf60aad496 +timeCreated: 1489745284 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AILerpEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AILerpEditor.cs new file mode 100644 index 0000000..6ed2821 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AILerpEditor.cs @@ -0,0 +1,31 @@ +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + [CustomEditor(typeof(AILerp), true)] + [CanEditMultipleObjects] + public class AILerpEditor : BaseAIEditor { + protected override void Inspector () { + Section("Pathfinding"); + AutoRepathInspector(); + + Section("Movement"); + FloatField("speed", min: 0f); + PropertyField("canMove"); + if (PropertyField("enableRotation")) { + EditorGUI.indentLevel++; + Popup("orientation", new [] { new GUIContent("ZAxisForward (for 3D games)"), new GUIContent("YAxisForward (for 2D games)") }); + FloatField("rotationSpeed", min: 0f); + EditorGUI.indentLevel--; + } + + if (PropertyField("interpolatePathSwitches")) { + EditorGUI.indentLevel++; + FloatField("switchPathInterpolationSpeed", min: 0f); + EditorGUI.indentLevel--; + } + + DebugInspector(); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AILerpEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AILerpEditor.cs.meta new file mode 100644 index 0000000..64e381a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AILerpEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e9e1d37b65158413c85aad4706d94ff0 +timeCreated: 1495016528 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AnimationLinkEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AnimationLinkEditor.cs new file mode 100644 index 0000000..1d7d71a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AnimationLinkEditor.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace Pathfinding { + [CustomEditor(typeof(AnimationLink))] + public class AnimationLinkEditor : EditorBase { + protected override void Inspector () { + var script = target as AnimationLink; + + EditorGUI.BeginDisabledGroup(script.EndTransform == null); + if (GUILayout.Button("Autoposition Endpoint")) { + List<Vector3> buffer = Pathfinding.Util.ListPool<Vector3>.Claim(); + Vector3 endpos; + script.CalculateOffsets(buffer, out endpos); + script.EndTransform.position = endpos; + Pathfinding.Util.ListPool<Vector3>.Release(buffer); + } + EditorGUI.EndDisabledGroup(); + base.Inspector(); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AnimationLinkEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AnimationLinkEditor.cs.meta new file mode 100644 index 0000000..43de31c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AnimationLinkEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 535448c66b9354b64b6b52fff9e39099 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathEditor.cs new file mode 100644 index 0000000..01c976c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathEditor.cs @@ -0,0 +1,1427 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.Reflection; +using Pathfinding.Graphs.Util; +using Pathfinding.Util; + +namespace Pathfinding { + [CustomEditor(typeof(AstarPath))] + public class AstarPathEditor : Editor { + /// <summary>List of all graph editors available (e.g GridGraphEditor)</summary> + static Dictionary<string, CustomGraphEditorAttribute> graphEditorTypes = new Dictionary<string, CustomGraphEditorAttribute>(); + + /// <summary> + /// Holds node counts for each graph to avoid calculating it every frame. + /// Only used for visualization purposes + /// </summary> + static Dictionary<NavGraph, KeyValuePair<float, KeyValuePair<int, int> > > graphNodeCounts; + + /// <summary>List of all graph editors for the graphs</summary> + GraphEditor[] graphEditors; + + System.Type[] graphTypes { + get { + return script.data.graphTypes; + } + } + + static int lastUndoGroup = -1000; + + /// <summary>Used to make sure correct behaviour when handling undos</summary> + static uint ignoredChecksum; + + const string scriptsFolder = "Assets/AstarPathfindingProject"; + + #region SectionFlags + + static bool showSettings; + static bool customAreaColorsOpen; + static bool editTags; + + FadeArea settingsArea; + FadeArea colorSettingsArea; + FadeArea editorSettingsArea; + FadeArea aboutArea; + FadeArea optimizationSettingsArea; + FadeArea serializationSettingsArea; + FadeArea tagsArea; + FadeArea graphsArea; + FadeArea addGraphsArea; + FadeArea alwaysVisibleArea; + + #endregion + + /// <summary>AstarPath instance that is being inspected</summary> + public AstarPath script { get; private set; } + public bool isPrefab { get; private set; } + + #region Styles + + static bool stylesLoaded; + public static GUISkin astarSkin { get; private set; } + + static GUIStyle level0AreaStyle, level0LabelStyle; + static GUIStyle level1AreaStyle, level1LabelStyle; + + static GUIStyle graphDeleteButtonStyle, graphInfoButtonStyle, graphGizmoButtonStyle, graphEditNameButtonStyle; + + public static GUIStyle helpBox { get; private set; } + public static GUIStyle thinHelpBox { get; private set; } + + #endregion + + /// <summary>Holds defines found in script files, used for optimizations.</summary> + List<OptimizationHandler.DefineDefinition> defines; + + /// <summary>Enables editor stuff. Loads graphs, reads settings and sets everything up</summary> + public void OnEnable () { + script = target as AstarPath; + isPrefab = PrefabUtility.IsPartOfPrefabAsset(script); + + // Make sure all references are set up to avoid NullReferenceExceptions + script.ConfigureReferencesInternal(); + + if (!isPrefab) HideToolsWhileActive(); + + Undo.undoRedoPerformed += OnUndoRedoPerformed; + + // Search the assembly for graph types and graph editors + if (graphEditorTypes == null || graphEditorTypes.Count == 0) + FindGraphTypes(); + + try { + GetAstarEditorSettings(); + } catch (System.Exception e) { + Debug.LogException(e); + } + + LoadStyles(); + + // Load graphs only when not playing, or in extreme cases, when data.graphs is null + if ((!Application.isPlaying && (script.data == null || script.data.graphs == null || script.data.graphs.Length == 0)) || script.data.graphs == null) { + LoadGraphs(); + } + + CreateFadeAreas(); + } + + /// <summary> + /// Hide position/rotation/scale tools for the AstarPath object. Instead, OnSceneGUI will draw position tools for each graph. + /// + /// We cannot rely on the inspector's OnEnable/OnDisable events, because they are tied to the lifetime of the inspector, + /// which does not necessarily follow which object is selected. In particular if there are multiple inspector windows, or + /// an inspector window is locked. + /// </summary> + void HideToolsWhileActive () { + EditorApplication.CallbackFunction toolsCheck = null; + var activelyHidden = true; + Tools.hidden = true; + + AssemblyReloadEvents.AssemblyReloadCallback onAssemblyReload = () => { + if (activelyHidden) { + Tools.hidden = false; + activelyHidden = false; + } + }; + // Ensure that the tools become visible when Unity reloads scripts. + // To avoid it getting stuck in the hidden state. + AssemblyReloadEvents.beforeAssemblyReload += onAssemblyReload; + toolsCheck = () => { + // This will trigger if the inspector is disabled + if (script == null) { + EditorApplication.update -= toolsCheck; + AssemblyReloadEvents.beforeAssemblyReload -= onAssemblyReload; + if (activelyHidden) { + Tools.hidden = false; + activelyHidden = false; + } + return; + } + if (Selection.activeGameObject == script.gameObject) { + Tools.hidden = true; + activelyHidden = true; + } else if (activelyHidden) { + Tools.hidden = false; + activelyHidden = false; + } + }; + EditorApplication.update += toolsCheck; + } + + void CreateFadeAreas () { + if (settingsArea == null) { + aboutArea = new FadeArea(false, this, level0AreaStyle, level0LabelStyle); + optimizationSettingsArea = new FadeArea(false, this, level0AreaStyle, level0LabelStyle); + graphsArea = new FadeArea(script.showGraphs, this, level0AreaStyle, level0LabelStyle); + serializationSettingsArea = new FadeArea(false, this, level0AreaStyle, level0LabelStyle); + settingsArea = new FadeArea(showSettings, this, level0AreaStyle, level0LabelStyle); + + addGraphsArea = new FadeArea(false, this, level1AreaStyle, level1LabelStyle); + colorSettingsArea = new FadeArea(false, this, level1AreaStyle, level1LabelStyle); + editorSettingsArea = new FadeArea(false, this, level1AreaStyle, level1LabelStyle); + alwaysVisibleArea = new FadeArea(true, this, level1AreaStyle, level1LabelStyle); + tagsArea = new FadeArea(editTags, this, level1AreaStyle, level1LabelStyle); + } + } + + /// <summary>Cleans up editor stuff</summary> + public void OnDisable () { + Undo.undoRedoPerformed -= OnUndoRedoPerformed; + SetAstarEditorSettings(); + script = null; + } + + /// <summary>Reads settings frome EditorPrefs</summary> + void GetAstarEditorSettings () { + FadeArea.fancyEffects = EditorPrefs.GetBool("EditorGUILayoutx.fancyEffects", true); + } + + void SetAstarEditorSettings () { + EditorPrefs.SetBool("EditorGUILayoutx.fancyEffects", FadeArea.fancyEffects); + } + + /// <summary> + /// Repaints Scene View. + /// Warning: Uses Undocumented Unity Calls (should be safe for Unity 3.x though) + /// </summary> + void RepaintSceneView () { + if (!Application.isPlaying || EditorApplication.isPaused) SceneView.RepaintAll(); + } + + /// <summary>Tell Unity that we want to use the whole inspector width</summary> + public override bool UseDefaultMargins () { + return false; + } + + public override void OnInspectorGUI () { + // Do some loading and checking + if (!LoadStyles()) { + EditorGUILayout.HelpBox("The GUISkin 'AstarEditorSkin.guiskin' in the folder "+EditorResourceHelper.editorAssets+"/ was not found or some custom styles in it does not exist.\n"+ + "This file is required for the A* Pathfinding Project editor.\n\n"+ + "If you are trying to add A* to a new project, please do not copy the files outside Unity, "+ + "export them as a UnityPackage and import them to this project or download the package from the Asset Store"+ + "or the 'scripts only' package from the A* Pathfinding Project website.\n\n\n"+ + "Skin loading is done in the AstarPathEditor.cs --> LoadStyles method", MessageType.Error); + return; + } + +#if ASTAR_ATAVISM + EditorGUILayout.HelpBox("This is a special version of the A* Pathfinding Project for Atavism. This version only supports scanning recast graphs and exporting them, but no pathfinding during runtime.", MessageType.Info); +#endif + + EditorGUI.BeginChangeCheck(); + + Undo.RecordObject(script, "A* inspector"); + + CheckGraphEditors(); + + // End loading and checking + + EditorGUI.indentLevel = 1; + + // Apparently these can sometimes get eaten by unity components + // so I catch them here for later use + EventType storedEventType = Event.current.type; + string storedEventCommand = Event.current.commandName; + + DrawMainArea(); + + GUILayout.Space(5); + + if (isPrefab) { + EditorGUI.BeginDisabledGroup(true); + GUILayout.Button(new GUIContent("Scan", "Cannot recalculate graphs on prefabs")); + EditorGUI.EndDisabledGroup(); + } else { + if (GUILayout.Button(new GUIContent("Scan", "Recalculate all graphs. Shortcut cmd+alt+s ( ctrl+alt+s on windows )"))) { + RunTask(MenuScan); + } + } + + + // Handle undo + SaveGraphsAndUndo(storedEventType, storedEventCommand); + + + if (EditorGUI.EndChangeCheck()) { + RepaintSceneView(); + EditorUtility.SetDirty(script); + } + } + + /// <summary> + /// Loads GUISkin and sets up styles. + /// See: EditorResourceHelper.LocateEditorAssets + /// Returns: True if all styles were found, false if there was an error somewhere + /// </summary> + public static bool LoadStyles () { + if (stylesLoaded) return true; + + // Dummy styles in case the loading fails + var inspectorSkin = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector); + + if (!EditorResourceHelper.LocateEditorAssets()) { + return false; + } + + var skinPath = EditorResourceHelper.editorAssets + "/AstarEditorSkin" + (EditorGUIUtility.isProSkin ? "Dark" : "Light") + ".guiskin"; + astarSkin = AssetDatabase.LoadAssetAtPath(skinPath, typeof(GUISkin)) as GUISkin; + + if (astarSkin != null) { + astarSkin.button = inspectorSkin.button; + } else { + Debug.LogWarning("Could not load editor skin at '" + skinPath + "'"); + return false; + } + + level0AreaStyle = astarSkin.FindStyle("PixelBox"); + + // If the first style is null, then the rest are likely corrupted as well + // Probably due to the user not copying meta files + if (level0AreaStyle == null) { + return false; + } + + level1LabelStyle = astarSkin.FindStyle("BoxHeader"); + level0LabelStyle = astarSkin.FindStyle("TopBoxHeader"); + + level1AreaStyle = astarSkin.FindStyle("PixelBox3"); + graphDeleteButtonStyle = astarSkin.FindStyle("PixelButton"); + graphInfoButtonStyle = astarSkin.FindStyle("InfoButton"); + graphGizmoButtonStyle = astarSkin.FindStyle("GizmoButton"); + graphEditNameButtonStyle = astarSkin.FindStyle("EditButton"); + + helpBox = inspectorSkin.FindStyle("HelpBox") ?? inspectorSkin.box; + + thinHelpBox = new GUIStyle(helpBox); + thinHelpBox.stretchWidth = false; + thinHelpBox.clipping = TextClipping.Overflow; + thinHelpBox.overflow.bottom += 2; + + stylesLoaded = true; + return true; + } + + /// <summary>Draws the main area in the inspector</summary> + void DrawMainArea () { + CheckGraphEditors(); + + graphsArea.Begin(); + graphsArea.Header("Graphs", ref script.showGraphs); + + if (graphsArea.BeginFade()) { + bool anyNonNull = false; + for (int i = 0; i < script.graphs.Length; i++) { + if (script.graphs[i] != null && script.graphs[i].showInInspector) { + anyNonNull = true; + DrawGraph(graphEditors[i]); + } + } + + // Draw the Add Graph button + addGraphsArea.Begin(); + addGraphsArea.open |= !anyNonNull; + addGraphsArea.Header("Add New Graph"); + + if (addGraphsArea.BeginFade()) { + script.data.FindGraphTypes(); + for (int i = 0; i < graphTypes.Length; i++) { + if (graphEditorTypes.ContainsKey(graphTypes[i].Name)) { + if (GUILayout.Button(graphEditorTypes[graphTypes[i].Name].displayName)) { + addGraphsArea.open = false; + AddGraph(graphTypes[i]); + } + } else if (!graphTypes[i].Name.Contains("Base") && graphTypes[i] != typeof(LinkGraph)) { + EditorGUI.BeginDisabledGroup(true); + GUILayout.Label(graphTypes[i].Name + " (no editor found)", "Button"); + EditorGUI.EndDisabledGroup(); + } + } + } + addGraphsArea.End(); + } + + graphsArea.End(); + + DrawSettings(); + DrawSerializationSettings(); + DrawOptimizationSettings(); + DrawAboutArea(); + + bool showNavGraphs = EditorGUILayout.Toggle("Show Graphs", script.showNavGraphs); + if (script.showNavGraphs != showNavGraphs) { + script.showNavGraphs = showNavGraphs; + RepaintSceneView(); + } + } + + /// <summary>Draws optimizations settings.</summary> + void DrawOptimizationSettings () { + optimizationSettingsArea.Begin(); + optimizationSettingsArea.Header("Optimization"); + + if (optimizationSettingsArea.BeginFade()) { + defines = defines ?? OptimizationHandler.FindDefines(); + + EditorGUILayout.HelpBox("Using C# pre-processor directives, performance and memory usage can be improved by disabling features that you don't use in the project.\n" + + "Every change to these settings requires recompiling the scripts", MessageType.Info); + + foreach (var define in defines) { + EditorGUILayout.Separator(); + + var label = new GUIContent(ObjectNames.NicifyVariableName(define.name), define.description); + define.enabled = EditorGUILayout.Toggle(label, define.enabled); + EditorGUILayout.HelpBox(define.description, MessageType.None); + + if (!define.consistent) { + GUIUtilityx.PushTint(Color.red); + EditorGUILayout.HelpBox("This define is not consistent for all build targets, some have it enabled enabled some have it disabled. Press Apply to change them to the same value", MessageType.Error); + GUIUtilityx.PopTint(); + } + } + + EditorGUILayout.Separator(); + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Apply", GUILayout.Width(150))) { + RunTask(() => { + if (EditorUtility.DisplayDialog("Apply Optimizations", "Applying optimizations requires (in case anything changed) a recompilation of the scripts. The inspector also has to be reloaded. Do you want to continue?", "Ok", "Cancel")) { + OptimizationHandler.ApplyDefines(defines); + AssetDatabase.Refresh(); + defines = null; + } + }); + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + } + + optimizationSettingsArea.End(); + } + + /// <summary> + /// Returns a version with all fields fully defined. + /// This is used because by default new Version(3,0,0) > new Version(3,0). + /// This is not the desired behaviour so we make sure that all fields are defined here + /// </summary> + public static System.Version FullyDefinedVersion (System.Version v) { + return new System.Version(Mathf.Max(v.Major, 0), Mathf.Max(v.Minor, 0), Mathf.Max(v.Build, 0), Mathf.Max(v.Revision, 0)); + } + + void DrawAboutArea () { + aboutArea.Begin(); + + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("About", level0LabelStyle)) { + aboutArea.open = !aboutArea.open; + GUI.changed = true; + } + +#if !ASTAR_ATAVISM + System.Version newVersion = AstarUpdateChecker.latestVersion; + bool beta = false; + + // Check if either the latest release version or the latest beta version is newer than this version + if (FullyDefinedVersion(AstarUpdateChecker.latestVersion) > FullyDefinedVersion(AstarPath.Version) || FullyDefinedVersion(AstarUpdateChecker.latestBetaVersion) > FullyDefinedVersion(AstarPath.Version)) { + if (FullyDefinedVersion(AstarUpdateChecker.latestVersion) <= FullyDefinedVersion(AstarPath.Version)) { + newVersion = AstarUpdateChecker.latestBetaVersion; + beta = true; + } + } + + // Check if the latest version is newer than this version + if (FullyDefinedVersion(newVersion) > FullyDefinedVersion(AstarPath.Version) + ) { + GUIUtilityx.PushTint(Color.green); + if (GUILayout.Button((beta ? "Beta" : "New") + " Version Available! "+newVersion, thinHelpBox, GUILayout.Height(16))) { + Application.OpenURL(AstarUpdateChecker.GetURL("download")); + } + GUIUtilityx.PopTint(); + GUILayout.Space(20); + } +#endif + + GUILayout.EndHorizontal(); + + if (aboutArea.BeginFade()) { + GUILayout.Label("The A* Pathfinding Project was made by Aron Granberg\nYour current version is "+AstarPath.Version); + +#if !ASTAR_ATAVISM + if (FullyDefinedVersion(newVersion) > FullyDefinedVersion(AstarPath.Version)) { + EditorGUILayout.HelpBox("A new "+(beta ? "beta " : "")+"version of the A* Pathfinding Project is available, the new version is "+ + newVersion, MessageType.Info); + + if (GUILayout.Button("What's new?")) { + Application.OpenURL(AstarUpdateChecker.GetURL(beta ? "beta_changelog" : "changelog")); + } + + if (GUILayout.Button("Click here to find out more")) { + Application.OpenURL(AstarUpdateChecker.GetURL("findoutmore")); + } + + GUIUtilityx.PushTint(new Color(0.3F, 0.9F, 0.3F)); + + if (GUILayout.Button("Download new version")) { + Application.OpenURL(AstarUpdateChecker.GetURL("download")); + } + + GUIUtilityx.PopTint(); + } +#endif + + if (GUILayout.Button(new GUIContent("Documentation", "Open the documentation for the A* Pathfinding Project"))) { + Application.OpenURL(AstarUpdateChecker.GetURL("documentation")); + } + + if (GUILayout.Button(new GUIContent("Project Homepage", "Open the homepage for the A* Pathfinding Project"))) { + Application.OpenURL(AstarUpdateChecker.GetURL("homepage")); + } + } + + aboutArea.End(); + } + + /// <summary>Graph editor which has its 'name' field focused</summary> + GraphEditor graphNameFocused; + + void DrawGraphHeader (GraphEditor graphEditor) { + var graph = graphEditor.target; + + // Graph guid, just used to get a unique value + string graphGUIDString = graph.guid.ToString(); + + GUILayout.BeginHorizontal(); + + if (graphNameFocused == graphEditor) { + GUI.SetNextControlName(graphGUIDString); + graph.name = GUILayout.TextField(graph.name ?? "", level1LabelStyle, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(false)); + + // Mark the name field as deselected when it has been deselected or when the user presses Return or Escape + if ((Event.current.type == EventType.Repaint && GUI.GetNameOfFocusedControl() != graphGUIDString) || (Event.current.type == EventType.KeyUp && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.Escape))) { + if (Event.current.type == EventType.KeyUp) Event.current.Use(); + graphNameFocused = null; + } + } else { + // If the graph name text field is not focused and the graph name is empty, then fill it in + if (graph.name == null || graph.name == "") graph.name = graphEditorTypes[graph.GetType().Name].displayName; + + if (GUILayout.Button(graph.name, level1LabelStyle)) { + graphEditor.fadeArea.open = graph.open = !graph.open; + if (!graph.open) { + graph.infoScreenOpen = false; + } + RepaintSceneView(); + } + } + + // The OnInspectorGUI method ensures that the scene view is repainted when gizmos are toggled on or off by checking for EndChangeCheck + graph.drawGizmos = GUILayout.Toggle(graph.drawGizmos, new GUIContent("Draw Gizmos", "Draw Gizmos"), graphGizmoButtonStyle); + + if (GUILayout.Button(new GUIContent("", "Edit Name"), graphEditNameButtonStyle)) { + graphNameFocused = graphEditor; + GUI.FocusControl(graphGUIDString); + } + + if (GUILayout.Toggle(graph.infoScreenOpen, new GUIContent("Info", "Info"), graphInfoButtonStyle)) { + if (!graph.infoScreenOpen) { + graphEditor.infoFadeArea.open = graph.infoScreenOpen = true; + graphEditor.fadeArea.open = graph.open = true; + } + } else { + graphEditor.infoFadeArea.open = graph.infoScreenOpen = false; + } + + if (GUILayout.Button(new GUIContent("Delete", "Delete"), graphDeleteButtonStyle)) { + RemoveGraph(graph); + } + GUILayout.EndHorizontal(); + } + + void DrawGraphInfoArea (GraphEditor graphEditor) { + graphEditor.infoFadeArea.Begin(); + + if (graphEditor.infoFadeArea.BeginFade()) { + bool anyNodesNull = false; + int total = 0; + int numWalkable = 0; + + // Calculate number of nodes in the graph + KeyValuePair<float, KeyValuePair<int, int> > pair; + graphNodeCounts = graphNodeCounts ?? new Dictionary<NavGraph, KeyValuePair<float, KeyValuePair<int, int> > >(); + + if (!graphNodeCounts.TryGetValue(graphEditor.target, out pair) || (Time.realtimeSinceStartup-pair.Key) > 2) { + graphEditor.target.GetNodes(node => { + if (node == null) { + anyNodesNull = true; + } else { + total++; + if (node.Walkable) numWalkable++; + } + }); + pair = new KeyValuePair<float, KeyValuePair<int, int> >(Time.realtimeSinceStartup, new KeyValuePair<int, int>(total, numWalkable)); + graphNodeCounts[graphEditor.target] = pair; + } + + total = pair.Value.Key; + numWalkable = pair.Value.Value; + + + EditorGUI.indentLevel++; + + if (anyNodesNull) { + Debug.LogError("Some nodes in the graph are null. Please report this error."); + } + + EditorGUILayout.LabelField("Nodes", total.ToString()); + EditorGUILayout.LabelField("Walkable", numWalkable.ToString()); + EditorGUILayout.LabelField("Unwalkable", (total-numWalkable).ToString()); + if (total == 0) EditorGUILayout.HelpBox("The number of nodes in the graph is zero. The graph might not be scanned", MessageType.Info); + + EditorGUI.indentLevel--; + } + + graphEditor.infoFadeArea.End(); + } + + /// <summary>Draws the inspector for the given graph with the given graph editor</summary> + void DrawGraph (GraphEditor graphEditor) { + graphEditor.fadeArea.Begin(); + DrawGraphHeader(graphEditor); + + if (graphEditor.fadeArea.BeginFade()) { + DrawGraphInfoArea(graphEditor); + graphEditor.OnInspectorGUI(graphEditor.target); + graphEditor.OnBaseInspectorGUI(graphEditor.target); + } + + graphEditor.fadeArea.End(); + } + + public void OnSceneGUI () { + script = target as AstarPath; + + DrawSceneGUISettings(); + + // OnSceneGUI may be called from EditorUtility.DisplayProgressBar + // which is called repeatedly while the graphs are scanned in the + // editor. However running the OnSceneGUI method while the graphs + // are being scanned is a bad idea since it can interfere with + // scanning, especially by serializing changes + if (script.isScanning) { + return; + } + + script.ConfigureReferencesInternal(); + EditorGUI.BeginChangeCheck(); + + if (!LoadStyles()) return; + + // Some GUI controls might change this to Used, so we need to grab it here + EventType et = Event.current.type; + + CheckGraphEditors(); + for (int i = 0; i < script.graphs.Length; i++) { + NavGraph graph = script.graphs[i]; + if (graph != null && graphEditors[i] != null) { + graphEditors[i].OnSceneGUI(graph); + } + } + + SaveGraphsAndUndo(et); + + if (EditorGUI.EndChangeCheck()) { + EditorUtility.SetDirty(target); + } + } + + void DrawSceneGUISettings () { + var darkSkin = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Scene); + + Handles.BeginGUI(); + float width = 180; + float height = 76; + float margin = 10; + + var origWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 144; + GUILayout.BeginArea(new Rect(Camera.current.pixelWidth - width, Camera.current.pixelHeight - height, width - margin, height - margin), "Graph Display", astarSkin.FindStyle("SceneBoxDark")); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("Show Graphs", darkSkin.toggle, astarSkin.FindStyle("ScenePrefixLabel")); + script.showNavGraphs = EditorGUILayout.Toggle(script.showNavGraphs, darkSkin.toggle); + EditorGUILayout.EndHorizontal(); + + if (GUILayout.Button("Scan", darkSkin.button)) { + RunTask(MenuScan); + } + + // Invisible button to capture clicks. This prevents a click inside the box from causing some other GameObject to be selected. + GUI.Button(new Rect(0, 0, width - margin, height - margin), "", GUIStyle.none); + GUILayout.EndArea(); + + EditorGUIUtility.labelWidth = origWidth; + Handles.EndGUI(); + } + + + TextAsset SaveGraphData (byte[] bytes, TextAsset target = null) { + string projectPath = System.IO.Path.GetDirectoryName(Application.dataPath) + "/"; + + string path; + + if (target != null) { + path = AssetDatabase.GetAssetPath(target); + } else { + // Find a valid file name + int i = 0; + do { + path = "Assets/GraphCaches/GraphCache" + (i == 0 ? "" : i.ToString()) + ".bytes"; + i++; + } while (System.IO.File.Exists(projectPath+path)); + } + + string fullPath = projectPath + path; + System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(fullPath)); + var fileInfo = new System.IO.FileInfo(fullPath); + // Make sure we can write to the file + if (fileInfo.Exists && fileInfo.IsReadOnly) + fileInfo.IsReadOnly = false; + System.IO.File.WriteAllBytes(fullPath, bytes); + + AssetDatabase.Refresh(); + return AssetDatabase.LoadAssetAtPath<TextAsset>(path); + } + + void DrawSerializationSettings () { + serializationSettingsArea.Begin(); + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("Save & Load", level0LabelStyle)) { + serializationSettingsArea.open = !serializationSettingsArea.open; + } + + if (script.data.cacheStartup && script.data.file_cachedStartup != null) { + GUIUtilityx.PushTint(Color.yellow); + GUILayout.Label("Startup cached", thinHelpBox, GUILayout.Height(16)); + GUILayout.Space(20); + GUIUtilityx.PopTint(); + } + + GUILayout.EndHorizontal(); + + // This displays the serialization settings + if (serializationSettingsArea.BeginFade()) { + script.data.cacheStartup = EditorGUILayout.Toggle(new GUIContent("Cache startup", "If enabled, will cache the graphs so they don't have to be scanned at startup"), script.data.cacheStartup); + + script.data.file_cachedStartup = EditorGUILayout.ObjectField(script.data.file_cachedStartup, typeof(TextAsset), false) as TextAsset; + + if (script.data.cacheStartup && script.data.file_cachedStartup == null) { + EditorGUILayout.HelpBox("No cache has been generated", MessageType.Error); + } + + if (script.data.cacheStartup && script.data.file_cachedStartup != null) { + EditorGUILayout.HelpBox("All graph settings will be replaced with the ones from the cache when the game starts", MessageType.Info); + } + + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("Generate cache")) { + RunTask(() => { + var serializationSettings = new Pathfinding.Serialization.SerializeSettings(); + + if (isPrefab) { + if (!EditorUtility.DisplayDialog("Can only save settings", "Only graph settings can be saved when the AstarPath object is a prefab. Instantiate the prefab in a scene to be able to save node data as well.", "Save settings", "Cancel")) { + return; + } + } else { + serializationSettings.nodes = true; + + if (EditorUtility.DisplayDialog("Scan before generating cache?", "Do you want to scan the graphs before saving the cache.\n" + + "If the graphs have not been scanned then the cache may not contain node data and then the graphs will have to be scanned at startup anyway.", "Scan", "Don't scan")) { + MenuScan(); + } + } + + // Save graphs + var bytes = script.data.SerializeGraphs(serializationSettings); + + // Store it in a file + script.data.file_cachedStartup = SaveGraphData(bytes, script.data.file_cachedStartup); + script.data.cacheStartup = true; + }); + } + + if (GUILayout.Button("Load from cache")) { + RunTask(() => { + if (EditorUtility.DisplayDialog("Are you sure you want to load from cache?", "Are you sure you want to load graphs from the cache, this will replace your current graphs?", "Yes", "Cancel")) { + script.data.LoadFromCache(); + } + }); + } + + GUILayout.EndHorizontal(); + + GUILayout.Space(5); + + GUILayout.BeginHorizontal(); + if (GUILayout.Button("Save to file")) { + RunTask(() => { + string path = EditorUtility.SaveFilePanel("Save Graphs", "", "graph.bytes", "bytes"); + + if (path != "") { + var serializationSettings = Pathfinding.Serialization.SerializeSettings.Settings; + if (isPrefab) { + if (!EditorUtility.DisplayDialog("Can only save settings", "Only graph settings can be saved when the AstarPath object is a prefab. Instantiate the prefab in a scene to be able to save node data as well.", "Save settings", "Cancel")) { + return; + } + } else { + if (EditorUtility.DisplayDialog("Include node data?", "Do you want to include node data in the save file. " + + "If node data is included the graph can be restored completely without having to scan it first.", "Include node data", "Only settings")) { + serializationSettings.nodes = true; + } + } + + if (serializationSettings.nodes && EditorUtility.DisplayDialog("Scan before saving?", "Do you want to scan the graphs before saving? " + + "\nNot scanning can cause node data to be omitted from the file if the graph is not yet scanned.", "Scan", "Don't scan")) { + MenuScan(); + } + + uint checksum; + var bytes = SerializeGraphs(serializationSettings, out checksum); + Pathfinding.Serialization.AstarSerializer.SaveToFile(path, bytes); + + EditorUtility.DisplayDialog("Done Saving", "Done saving graph data.", "Ok"); + } + }); + } + + if (GUILayout.Button("Load from file")) { + RunTask(() => { + string path = EditorUtility.OpenFilePanel("Load Graphs", "", ""); + + if (path != "") { + try { + byte[] bytes = Pathfinding.Serialization.AstarSerializer.LoadFromFile(path); + DeserializeGraphs(bytes); + } catch (System.Exception e) { + Debug.LogError("Could not load from file at '"+path+"'\n"+e); + } + } + }); + } + + GUILayout.EndHorizontal(); + } + + serializationSettingsArea.End(); + } + + public void RunTask (System.Action action) { + EditorApplication.CallbackFunction wrapper = null; + wrapper = () => { + try { + // Run the callback only if the editor has not been disabled since the task was scheduled + if (script != null) action(); + } finally { + EditorApplication.update -= wrapper; + } + }; + EditorApplication.update += wrapper; + } + + void DrawSettings () { + settingsArea.Begin(); + settingsArea.Header("Settings", ref showSettings); + + if (settingsArea.BeginFade()) { + DrawPathfindingSettings(); + DrawDebugSettings(); + DrawColorSettings(); + DrawTagSettings(); + DrawEditorSettings(); + } + + settingsArea.End(); + } + + void DrawPathfindingSettings () { + alwaysVisibleArea.Begin(); + alwaysVisibleArea.HeaderLabel("Pathfinding"); + alwaysVisibleArea.BeginFade(); + +#if !ASTAR_ATAVISM + EditorGUI.BeginDisabledGroup(Application.isPlaying); + + script.threadCount = (ThreadCount)EditorGUILayout.EnumPopup(new GUIContent("Thread Count", "Number of threads to run the pathfinding in (if any). More threads " + + "can boost performance on multi core systems. \n" + + "Use None for debugging or if you dont use pathfinding that much.\n " + + "See docs for more info"), script.threadCount); + + EditorGUI.EndDisabledGroup(); + + int threads = AstarPath.CalculateThreadCount(script.threadCount); + if (threads > 0) EditorGUILayout.HelpBox("Using " + threads +" thread(s)" + (script.threadCount < 0 ? " on your machine" : ""), MessageType.None); + else EditorGUILayout.HelpBox("Using a single coroutine (no threads)" + (script.threadCount < 0 ? " on your machine" : ""), MessageType.None); + if (threads > SystemInfo.processorCount) EditorGUILayout.HelpBox("Using more threads than there are CPU cores may not have a positive effect on performance", MessageType.Warning); + + if (script.threadCount == ThreadCount.None) { + script.maxFrameTime = EditorGUILayout.FloatField(new GUIContent("Max Frame Time", "Max number of milliseconds to use for path calculation per frame"), script.maxFrameTime); + } else { + script.maxFrameTime = 10; + } + + script.maxNearestNodeDistance = EditorGUILayout.FloatField(new GUIContent("Max Nearest Node Distance", + "Normally, if the nearest node to e.g the start point of a path was not walkable" + + " a search will be done for the nearest node which is walkble. This is the maximum distance (world units) which it will search"), + script.maxNearestNodeDistance); + + script.heuristic = (Heuristic)EditorGUILayout.EnumPopup("Heuristic", script.heuristic); + + if (script.heuristic == Heuristic.Manhattan || script.heuristic == Heuristic.Euclidean || script.heuristic == Heuristic.DiagonalManhattan) { + EditorGUI.indentLevel++; + script.heuristicScale = EditorGUILayout.FloatField("Heuristic Scale", script.heuristicScale); + script.heuristicScale = Mathf.Clamp01(script.heuristicScale); + EditorGUI.indentLevel--; + } + + GUILayout.Label(new GUIContent("Advanced"), EditorStyles.boldLabel); + + DrawHeuristicOptimizationSettings(); + + script.batchGraphUpdates = EditorGUILayout.Toggle(new GUIContent("Batch Graph Updates", "Limit graph updates to only run every x seconds. Can have positive impact on performance if many graph updates are done"), script.batchGraphUpdates); + + if (script.batchGraphUpdates) { + EditorGUI.indentLevel++; + script.graphUpdateBatchingInterval = EditorGUILayout.FloatField(new GUIContent("Update Interval (s)", "Minimum number of seconds between each batch of graph updates"), script.graphUpdateBatchingInterval); + EditorGUI.indentLevel--; + } + + // Only show if there is actually a navmesh/recast graph in the scene + // to help reduce clutter for other users. + if (script.data.FindGraphWhichInheritsFrom(typeof(NavmeshBase)) != null) { + script.navmeshUpdates.updateInterval = EditorGUILayout.FloatField(new GUIContent("Navmesh Cutting Update Interval (s)", "How often to check if any navmesh cut has changed."), script.navmeshUpdates.updateInterval); + } +#endif + script.scanOnStartup = EditorGUILayout.Toggle(new GUIContent("Scan on Awake", "Scan all graphs on Awake. If this is false, you must call AstarPath.active.Scan () yourself. Useful if you want to make changes to the graphs with code."), script.scanOnStartup); + + alwaysVisibleArea.End(); + } + + readonly string[] heuristicOptimizationOptions = new [] { + "None", + "Random (low quality)", + "RandomSpreadOut (high quality)", + "Custom" + }; + + void DrawHeuristicOptimizationSettings () { + script.euclideanEmbedding.mode = (HeuristicOptimizationMode)EditorGUILayout.Popup(new GUIContent("Heuristic Optimization"), (int)script.euclideanEmbedding.mode, heuristicOptimizationOptions); + + EditorGUI.indentLevel++; + if (script.euclideanEmbedding.mode == HeuristicOptimizationMode.Random) { + script.euclideanEmbedding.spreadOutCount = EditorGUILayout.IntField(new GUIContent("Count", "Number of optimization points, higher numbers give better heuristics and could make it faster, " + + "but too many could make the overhead too great and slow it down. Try to find the optimal value for your map. Recommended value < 100"), script.euclideanEmbedding.spreadOutCount); + } else if (script.euclideanEmbedding.mode == HeuristicOptimizationMode.Custom) { + script.euclideanEmbedding.pivotPointRoot = EditorGUILayout.ObjectField(new GUIContent("Pivot point root", + "All children of this transform are going to be used as pivot points. " + + "Recommended count < 100"), script.euclideanEmbedding.pivotPointRoot, typeof(Transform), true) as Transform; + if (script.euclideanEmbedding.pivotPointRoot == null) { + EditorGUILayout.HelpBox("Please assign an object", MessageType.Error); + } + } else if (script.euclideanEmbedding.mode == HeuristicOptimizationMode.RandomSpreadOut) { + script.euclideanEmbedding.pivotPointRoot = EditorGUILayout.ObjectField(new GUIContent("Pivot point root", + "All children of this transform are going to be used as pivot points. " + + "They will seed the calculation of more pivot points. " + + "Recommended count < 100"), script.euclideanEmbedding.pivotPointRoot, typeof(Transform), true) as Transform; + + if (script.euclideanEmbedding.pivotPointRoot == null) { + EditorGUILayout.HelpBox("No root is assigned. A random node will be choosen as the seed.", MessageType.Info); + } + + script.euclideanEmbedding.spreadOutCount = EditorGUILayout.IntField(new GUIContent("Count", "Number of optimization points, higher numbers give better heuristics and could make it faster, " + + "but too many could make the overhead too great and slow it down. Try to find the optimal value for your map. Recommended value < 100"), script.euclideanEmbedding.spreadOutCount); + } + + if (script.euclideanEmbedding.mode != HeuristicOptimizationMode.None) { + EditorGUILayout.HelpBox("Heuristic optimization assumes the graph remains static. No graph updates, dynamic obstacles or similar should be applied to the graph " + + "when using heuristic optimization.", MessageType.Info); + } + + EditorGUI.indentLevel--; + } + + /// <summary>Opens the A* Inspector and shows the section for editing tags</summary> + public static void EditTags () { + AstarPath astar = UnityCompatibility.FindAnyObjectByType<AstarPath>(); + + if (astar != null) { + editTags = true; + showSettings = true; + Selection.activeGameObject = astar.gameObject; + } else { + Debug.LogWarning("No AstarPath component in the scene"); + } + } + + void DrawTagSettings () { + tagsArea.Begin(); + tagsArea.Header("Tag Names", ref editTags); + + if (tagsArea.BeginFade()) { + string[] tagNames = script.GetTagNames(); + + for (int i = 0; i < tagNames.Length; i++) { + tagNames[i] = EditorGUILayout.TextField(new GUIContent("Tag "+i, "Name for tag "+i), tagNames[i]); + if (tagNames[i] == "") tagNames[i] = ""+i; + } + } + + tagsArea.End(); + } + + void DrawEditorSettings () { + editorSettingsArea.Begin(); + editorSettingsArea.Header("Editor"); + + if (editorSettingsArea.BeginFade()) { + FadeArea.fancyEffects = EditorGUILayout.Toggle("Smooth Transitions", FadeArea.fancyEffects); + } + + editorSettingsArea.End(); + } + + static void DrawColorSlider (ref float left, ref float right, bool editable) { + GUILayout.BeginHorizontal(); + GUILayout.Space(20); + GUILayout.BeginVertical(); + + GUILayout.Box("", astarSkin.GetStyle("ColorInterpolationBox")); + GUILayout.BeginHorizontal(); + if (editable) { + left = EditorGUILayout.IntField((int)left); + } else { + GUILayout.Label(left.ToString("0")); + } + GUILayout.FlexibleSpace(); + if (editable) { + right = EditorGUILayout.IntField((int)right); + } else { + GUILayout.Label(right.ToString("0")); + } + GUILayout.EndHorizontal(); + + GUILayout.EndVertical(); + GUILayout.Space(4); + GUILayout.EndHorizontal(); + } + + void DrawDebugSettings () { + alwaysVisibleArea.Begin(); + alwaysVisibleArea.HeaderLabel("Debug"); + alwaysVisibleArea.BeginFade(); + + script.logPathResults = (PathLog)EditorGUILayout.EnumPopup("Path Logging", script.logPathResults); + script.debugMode = (GraphDebugMode)EditorGUILayout.EnumPopup("Graph Coloring", script.debugMode); + + if (script.debugMode == GraphDebugMode.SolidColor) { + EditorGUI.BeginChangeCheck(); + script.colorSettings._SolidColor = EditorGUILayout.ColorField(new GUIContent("Color", "Color used for the graph when 'Graph Coloring'='Solid Color'"), script.colorSettings._SolidColor); + if (EditorGUI.EndChangeCheck()) { + script.colorSettings.PushToStatic(script); + } + } + + if (script.debugMode == GraphDebugMode.G || script.debugMode == GraphDebugMode.H || script.debugMode == GraphDebugMode.F || script.debugMode == GraphDebugMode.Penalty) { + script.manualDebugFloorRoof = !EditorGUILayout.Toggle("Automatic Limits", !script.manualDebugFloorRoof); + DrawColorSlider(ref script.debugFloor, ref script.debugRoof, script.manualDebugFloorRoof); + } + + script.showSearchTree = EditorGUILayout.Toggle("Show Search Tree", script.showSearchTree); + if (script.showSearchTree) { + EditorGUILayout.HelpBox("Show Search Tree is enabled, you may see rendering glitches in the graph rendering" + + " while the game is running. This is nothing to worry about and is simply due to the paths being calculated at the same time as the gizmos" + + " are being rendered. You can pause the game to see an accurate rendering.", MessageType.Info); + } + script.showUnwalkableNodes = EditorGUILayout.Toggle("Show Unwalkable Nodes", script.showUnwalkableNodes); + + if (script.showUnwalkableNodes) { + EditorGUI.indentLevel++; + script.unwalkableNodeDebugSize = EditorGUILayout.FloatField("Size", script.unwalkableNodeDebugSize); + EditorGUI.indentLevel--; + } + + alwaysVisibleArea.End(); + } + + void DrawColorSettings () { + colorSettingsArea.Begin(); + colorSettingsArea.Header("Colors"); + + if (colorSettingsArea.BeginFade()) { + // Make sure the object is not null + AstarColor colors = script.colorSettings = script.colorSettings ?? new AstarColor(); + + colors._SolidColor = EditorGUILayout.ColorField(new GUIContent("Solid Color", "Color used for the graph when 'Graph Coloring'='Solid Color'"), colors._SolidColor); + colors._UnwalkableNode = EditorGUILayout.ColorField("Unwalkable Node", colors._UnwalkableNode); + colors._BoundsHandles = EditorGUILayout.ColorField("Bounds Handles", colors._BoundsHandles); + + colors._ConnectionLowLerp = EditorGUILayout.ColorField("Connection Gradient (low)", colors._ConnectionLowLerp); + colors._ConnectionHighLerp = EditorGUILayout.ColorField("Connection Gradient (high)", colors._ConnectionHighLerp); + + colors._MeshEdgeColor = EditorGUILayout.ColorField("Mesh Edge", colors._MeshEdgeColor); + + if (EditorResourceHelper.GizmoSurfaceMaterial != null && EditorResourceHelper.GizmoLineMaterial != null) { + EditorGUI.BeginChangeCheck(); + var col1 = EditorResourceHelper.GizmoSurfaceMaterial.color; + col1.a = EditorGUILayout.Slider("Navmesh Surface Opacity", col1.a, 0, 1); + + var col2 = EditorResourceHelper.GizmoLineMaterial.color; + col2.a = EditorGUILayout.Slider("Navmesh Outline Opacity", col2.a, 0, 1); + + var fade = EditorResourceHelper.GizmoSurfaceMaterial.GetColor("_FadeColor"); + fade.a = EditorGUILayout.Slider("Opacity Behind Objects", fade.a, 0, 1); + + if (EditorGUI.EndChangeCheck()) { + Undo.RecordObjects(new [] { EditorResourceHelper.GizmoSurfaceMaterial, EditorResourceHelper.GizmoLineMaterial }, "Change navmesh transparency"); + EditorResourceHelper.GizmoSurfaceMaterial.color = col1; + EditorResourceHelper.GizmoLineMaterial.color = col2; + EditorResourceHelper.GizmoSurfaceMaterial.SetColor("_FadeColor", fade); + EditorResourceHelper.GizmoLineMaterial.SetColor("_FadeColor", fade * new Color(1, 1, 1, 0.7f)); + } + } + + colors._AreaColors = colors._AreaColors ?? new Color[0]; + + // Custom Area Colors + customAreaColorsOpen = EditorGUILayout.Foldout(customAreaColorsOpen, "Custom Area Colors"); + if (customAreaColorsOpen) { + EditorGUI.indentLevel += 2; + + for (int i = 0; i < colors._AreaColors.Length; i++) { + GUILayout.BeginHorizontal(); + colors._AreaColors[i] = EditorGUILayout.ColorField("Area "+i+(i == 0 ? " (not used usually)" : ""), colors._AreaColors[i]); + if (GUILayout.Button(new GUIContent("", "Reset to the default color"), astarSkin.FindStyle("SmallReset"), GUILayout.Width(20))) { + colors._AreaColors[i] = AstarMath.IntToColor(i, 1F); + } + GUILayout.EndHorizontal(); + } + + GUILayout.BeginHorizontal(); + EditorGUI.BeginDisabledGroup(colors._AreaColors.Length > 255); + + if (GUILayout.Button("Add New")) { + var newcols = new Color[colors._AreaColors.Length+1]; + colors._AreaColors.CopyTo(newcols, 0); + newcols[newcols.Length-1] = AstarMath.IntToColor(newcols.Length-1, 1F); + colors._AreaColors = newcols; + } + + EditorGUI.EndDisabledGroup(); + EditorGUI.BeginDisabledGroup(colors._AreaColors.Length == 0); + + if (GUILayout.Button("Remove last") && colors._AreaColors.Length > 0) { + var newcols = new Color[colors._AreaColors.Length-1]; + for (int i = 0; i < colors._AreaColors.Length-1; i++) { + newcols[i] = colors._AreaColors[i]; + } + colors._AreaColors = newcols; + } + + EditorGUI.EndDisabledGroup(); + GUILayout.EndHorizontal(); + + EditorGUI.indentLevel -= 2; + } + + if (GUI.changed) { + colors.PushToStatic(script); + } + } + + colorSettingsArea.End(); + } + + /// <summary>Make sure every graph has a graph editor</summary> + void CheckGraphEditors (bool forceRebuild = false) { + if (forceRebuild || graphEditors == null || script.graphs == null || script.graphs.Length != graphEditors.Length) { + if (script.data.graphs == null) { + script.data.graphs = new NavGraph[0]; + } + + graphEditors = new GraphEditor[script.graphs.Length]; + + for (int i = 0; i < script.graphs.Length; i++) { + NavGraph graph = script.graphs[i]; + + if (graph == null) continue; + + if (graph.guid == new Pathfinding.Util.Guid()) { + graph.guid = Pathfinding.Util.Guid.NewGuid(); + } + + if (graph.showInInspector) graphEditors[i] = CreateGraphEditor(graph); + } + } else { + for (int i = 0; i < script.graphs.Length; i++) { + var graph = script.graphs[i]; + if (graph == null || !graph.showInInspector) continue; + + // TODO + if (graphEditors[i] == null || !graphEditorTypes.TryGetValue(graph.GetType().Name, out var ed) || ed.editorType != graphEditors[i].GetType()) { + CheckGraphEditors(true); + return; + } + + if (graph.guid == new Pathfinding.Util.Guid()) { + graph.guid = Pathfinding.Util.Guid.NewGuid(); + } + + graphEditors[i].target = graph; + } + } + } + + void RemoveGraph (NavGraph graph) { + script.data.RemoveGraph(graph); + CheckGraphEditors(true); + GUI.changed = true; + Repaint(); + } + + void AddGraph (System.Type type) { + script.data.AddGraph(type); + CheckGraphEditors(); + GUI.changed = true; + } + + /// <summary>Creates a GraphEditor for a graph</summary> + GraphEditor CreateGraphEditor (NavGraph graph) { + var graphType = graph.GetType().Name; + GraphEditor result; + + if (graphEditorTypes.TryGetValue(graphType, out var graphEditorTypeAttr)) { + var graphEditorType = graphEditorTypeAttr.editorType; + result = System.Activator.CreateInstance(graphEditorType) as GraphEditor; + + // Deserialize editor settings + var editorData = (graph as IGraphInternals).SerializedEditorSettings; + if (editorData != null) Pathfinding.Serialization.TinyJsonDeserializer.Deserialize(editorData, graphEditorType, result, script.gameObject); + } else { + Debug.LogError("Couldn't find an editor for the graph type '" + graphType + "' There are " + graphEditorTypes.Count + " available graph editors"); + result = new GraphEditor(); + graphEditorTypes[graphType] = new CustomGraphEditorAttribute(graph.GetType(), graphType) { + editorType = typeof(GraphEditor) + }; + } + + result.editor = this; + result.fadeArea = new FadeArea(graph.open, this, level1AreaStyle, level1LabelStyle); + result.infoFadeArea = new FadeArea(graph.infoScreenOpen, this, null, null); + result.target = graph; + + result.OnEnable(); + return result; + } + + void HandleUndo () { + // The user has tried to undo something, apply that + if (script.data.GetData() == null) { + script.data.SetData(new byte[0]); + } else { + LoadGraphs(); + } + } + + /// <summary>Hashes the contents of a byte array</summary> + static int ByteArrayHash (byte[] arr) { + if (arr == null) return -1; + int hash = -1; + for (int i = 0; i < arr.Length; i++) { + hash ^= (arr[i]^i)*3221; + } + return hash; + } + + void SerializeIfDataChanged () { + byte[] bytes = SerializeGraphs(out var checksum); + + int byteHash = ByteArrayHash(bytes); + int dataHash = ByteArrayHash(script.data.GetData()); + //Check if the data is different than the previous data, use checksums + bool isDifferent = checksum != ignoredChecksum && dataHash != byteHash; + + //Only save undo if the data was different from the last saved undo + if (isDifferent) { + Undo.RegisterCompleteObjectUndo(script, "A* Graph Settings"); + Undo.IncrementCurrentGroup(); + //Assign the new data + script.data.SetData(bytes); + EditorUtility.SetDirty(script); + } + } + + /// <summary>Called when an undo or redo operation has been performed</summary> + void OnUndoRedoPerformed () { + if (!this) return; + + byte[] bytes = SerializeGraphs(out var checksum); + + //Check if the data is different than the previous data, use checksums + bool isDifferent = ByteArrayHash(script.data.GetData()) != ByteArrayHash(bytes); + + if (isDifferent) { + HandleUndo(); + } + + CheckGraphEditors(); + // Deserializing a graph does not necessarily yield the same hash as the data loaded from + // this is (probably) because editor settings are not saved all the time + // so we explicitly ignore the new hash + SerializeGraphs(out checksum); + ignoredChecksum = checksum; + } + + public void SaveGraphsAndUndo (EventType et = EventType.Used, string eventCommand = "") { + // Serialize the settings of the graphs + + // Dont process undo events in editor, we don't want to reset graphs + // Also don't do this if the graph is being updated as serializing the graph + // might interfere with that (in particular it might unblock the path queue). + // Also don't do this if the AstarPath object is not the active one, since serialization uses the singleton in some ways. + if (Application.isPlaying || script.isScanning || script.IsAnyWorkItemInProgress) { + return; + } + + if ((Undo.GetCurrentGroup() != lastUndoGroup || et == EventType.MouseUp) && eventCommand != "UndoRedoPerformed") { + SerializeIfDataChanged(); + + lastUndoGroup = Undo.GetCurrentGroup(); + } + + if (Event.current == null || script.data.GetData() == null) { + SerializeIfDataChanged(); + return; + } + } + + /// <summary>Load graphs from serialized data</summary> + public void LoadGraphs () { + DeserializeGraphs(); + } + + public byte[] SerializeGraphs (out uint checksum) { + var settings = Pathfinding.Serialization.SerializeSettings.Settings; + + settings.editorSettings = true; + return SerializeGraphs(settings, out checksum); + } + + public byte[] SerializeGraphs (Pathfinding.Serialization.SerializeSettings settings, out uint checksum) { + CheckGraphEditors(); + // Serialize all graph editors + var output = new System.Text.StringBuilder(); + for (int i = 0; i < graphEditors.Length; i++) { + if (graphEditors[i] == null) continue; + output.Length = 0; + Pathfinding.Serialization.TinyJsonSerializer.Serialize(graphEditors[i], output); + (graphEditors[i].target as IGraphInternals).SerializedEditorSettings = output.ToString(); + } + // Serialize all graphs (including serialized editor data) + return script.data.SerializeGraphs(settings, out checksum); + } + + void DeserializeGraphs () { + if (script.data.GetData() == null || script.data.GetData().Length == 0) { + script.data.graphs = new NavGraph[0]; + } else { + DeserializeGraphs(script.data.GetData()); + } + } + + void DeserializeGraphs (byte[] bytes) { + try { + script.data.DeserializeGraphs(bytes); + // Make sure every graph has a graph editor + CheckGraphEditors(); + } catch (System.Exception e) { + Debug.LogError("Failed to deserialize graphs"); + Debug.LogException(e); + script.data.SetData(null); + } + } + + [MenuItem("Edit/Pathfinding/Scan All Graphs %&s")] + public static void MenuScan () { + if (AstarPath.active == null) { + AstarPath.FindAstarPath(); + if (AstarPath.active == null) { + return; + } + } + + try { + var lastMessageTime = Time.realtimeSinceStartup; + foreach (var p in AstarPath.active.ScanAsync()) { + // Displaying the progress bar is pretty slow, so don't do it too often + if (Time.realtimeSinceStartup - lastMessageTime > 0.2f) { + // Display a progress bar of the scan + UnityEditor.EditorUtility.DisplayProgressBar("Scanning", p.ToString(), p.progress); + lastMessageTime = Time.realtimeSinceStartup; + } + } + + // Repaint the game view in addition to just the scene view. + // In case the user only has the game view open it's nice to refresh it so they can see the graph. + UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); + } catch (System.Exception e) { + Debug.LogError("There was an error generating the graphs:\n"+e+"\n\nIf you think this is a bug, please contact me on forum.arongranberg.com (post a new thread)\n"); + EditorUtility.DisplayDialog("Error Generating Graphs", "There was an error when generating graphs, check the console for more info", "Ok"); + throw e; + } finally { + EditorUtility.ClearProgressBar(); + } + } + + /// <summary>Searches in the current assembly for GraphEditor and NavGraph types</summary> + void FindGraphTypes () { + graphEditorTypes = new Dictionary<string, CustomGraphEditorAttribute>(); + + foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies()) { + System.Type[] types = null; + try { + types = assembly.GetTypes(); + } catch { + // Ignore type load exceptions and things like that. + // We might not be able to read all assemblies for some reason, but hopefully the relevant types exist in the assemblies that we can read + continue; + } + + // Iterate through the assembly for classes which inherit from GraphEditor + foreach (var type in types) { + System.Type baseType = type.BaseType; + while (!System.Type.Equals(baseType, null)) { + if (System.Type.Equals(baseType, typeof(GraphEditor))) { + System.Object[] att = type.GetCustomAttributes(false); + + // Loop through the attributes for the CustomGraphEditorAttribute attribute + foreach (var attribute in att) { + if (attribute is CustomGraphEditorAttribute cge && !System.Type.Equals(cge.graphType, null)) { + cge.editorType = type; + graphEditorTypes.Add(cge.graphType.Name, cge); + } + } + break; + } + + baseType = baseType.BaseType; + } + } + } + + // Make sure graph types (not graph editor types) are also up to date + script.data.FindGraphTypes(); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathEditor.cs.meta new file mode 100644 index 0000000..71b7d41 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aa27fa41f8abe460a8b64e13d7be43ad +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.asmdef b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.asmdef new file mode 100644 index 0000000..94cfbd9 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.asmdef @@ -0,0 +1,51 @@ +{ + "name": "AstarPathfindingProjectEditor", + "rootNamespace": "", + "references": [ + "GUID:efa45043feb7e4147a305b73b5cea642", + "GUID:774e21169c4ac4ec8a01db9cdb98d33b", + "GUID:f4059aaf6c60a4a58a177a2609feb769", + "GUID:de4e6084e6d474788bb8c799d6b461eb" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [ + "MODULE_BURST", + "MODULE_MATHEMATICS", + "MODULE_COLLECTIONS" + ], + "versionDefines": [ + { + "name": "com.unity.burst", + "expression": "1.8.3", + "define": "MODULE_BURST" + }, + { + "name": "com.unity.mathematics", + "expression": "1.2.6", + "define": "MODULE_MATHEMATICS" + }, + { + "name": "com.unity.collections", + "expression": "1.5.1", + "define": "MODULE_COLLECTIONS" + }, + { + "name": "com.unity.collections", + "expression": "0.11-preview", + "define": "MODULE_COLLECTIONS_0_11_OR_NEWER" + }, + { + "name": "com.unity.entities", + "expression": "1.0.0-pre.47", + "define": "MODULE_ENTITIES" + } + ], + "noEngineReferences": false +}
\ No newline at end of file diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.asmdef.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.asmdef.meta new file mode 100644 index 0000000..d5c5cd0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 865575785c1524f888e47306de0c1246 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.uss b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.uss new file mode 100644 index 0000000..f60b2ec --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.uss @@ -0,0 +1,112 @@ +.largeIcon { + width: 200px; + height: 200px; + background-image: url('EditorAssets/ComponentIcons/d_AstarPath@256.png?fileID=2800000&guid=1620f833be5302149a071c06944d3e9b&type=3#d_AstarPath@256'); + flex-shrink: 0; + margin-bottom: 50px; + margin-top: 50px; + transition-property: scale; + transition-duration: 0.6s; + scale: 1 1; + transition-timing-function: ease-out-back; +} + +.welcomeWindow { + flex-grow: 1; + flex-direction: column; + align-items: center; + justify-content: flex-start; + -unity-background-image-tint-color: rgb(34, 34, 34); + background-color: rgb(34, 34, 34); + position: relative; + flex-basis: 100%; +} + +.welcomeButton { + align-self: stretch; + opacity: 1; + margin-left: 20px; + margin-right: 20px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + height: 40px; + border-top-width: 0; + border-right-width: 0; + border-bottom-width: 0; + border-left-width: 0; + border-left-color: rgba(224, 224, 224, 0); + border-right-color: rgba(224, 224, 224, 0); + border-top-color: rgba(224, 224, 224, 0); + border-bottom-color: rgba(224, 224, 224, 0); + background-color: rgb(89, 89, 89); + margin-bottom: 10px; + color: rgb(255, 255, 255); + -unity-font-style: bold; + font-size: 14px; + -unity-text-align: middle-left; + padding-left: 30px; + transition-property: padding-left, background-color; + transition-duration: 0.1s, 0.1s; +} + +:root { + flex-basis: 100%; +} + +.welcomeButton:hover { + padding-left: 40px; + background-color: rgb(231, 122, 14); +} + +.buttonIcon { + flex-grow: 0; + right: auto; + position: relative; + height: 28px; + -unity-background-image-tint-color: rgb(255, 255, 255); + width: 28px; + flex-shrink: 0; + margin-right: 5px; + margin-left: 5px; +} + +.buttonIconRight { + flex-grow: 0; + right: auto; + position: relative; + background-image: url('EditorAssets/images/check_icon.png?fileID=2800000&guid=25a6bf057fb4ad5438e3fa0aa1b45789&type=3#check_icon'); + height: 28px; + -unity-background-image-tint-color: rgb(255, 255, 255); + width: 28px; + flex-shrink: 0; +} + +.welcomeButton Label { + padding-left: 8px; +} + +.largeIconEntry { + scale: 0.7 0.7; +} + +.buttonIcon.samples { + background-image: url('EditorAssets/images/samples_icon.png?fileID=2800000&guid=e10d07f341fb69b42acf8f2b2971270f&type=3#samples_icon'); +} + +.buttonIcon.education { + background-image: url('EditorAssets/images/educate_icon.png?fileID=2800000&guid=d49de811c1b5cbb449d74fda55ad6adc&type=3#educate_icon'); +} + +.buttonIcon.changelog { + background-image: url('EditorAssets/images/changelog_icon.png?fileID=2800000&guid=aac6bbff2ba09084f96968aa0649198f&type=3#changelog_icon'); +} + +.buttonIcon.documentation { + background-image: url('EditorAssets/images/documentation_icon.png?fileID=2800000&guid=2af1390027808444db42d140d1d437ae&type=3#documentation_icon'); +} + +#logo { + background-image: url('EditorAssets/images/astar_logo.png?fileID=2800000&guid=1603401e2a100ba44b299ce8f603b5eb&type=3#astar_logo'); +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.uss.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.uss.meta new file mode 100644 index 0000000..d4e818a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarPathfindingProjectEditor.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1e4e8798274ca7448321794e89178b9 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateChecker.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateChecker.cs new file mode 100644 index 0000000..b443923 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateChecker.cs @@ -0,0 +1,287 @@ +using UnityEngine; +using UnityEditor; +using Pathfinding.Util; +using UnityEngine.Networking; +using System.Collections.Generic; +using System.Linq; + +namespace Pathfinding { + /// <summary>Handles update checking for the A* Pathfinding Project</summary> + [InitializeOnLoad] + public static class AstarUpdateChecker { + /// <summary>Used for downloading new version information</summary> + static UnityWebRequest updateCheckDownload; + + static System.DateTime _lastUpdateCheck; + static bool _lastUpdateCheckRead; + + static System.Version _latestVersion; + + static System.Version _latestBetaVersion; + + /// <summary>Description of the latest update of the A* Pathfinding Project</summary> + static string _latestVersionDescription; + + static bool hasParsedServerMessage; + + /// <summary>Number of days between update checks</summary> + const double updateCheckRate = 1F; + + /// <summary>URL to the version file containing the latest version number.</summary> + const string updateURL = "https://www.arongranberg.com/astar/version.php"; + + /// <summary>Last time an update check was made</summary> + public static System.DateTime lastUpdateCheck { + get { + try { + // Reading from EditorPrefs is relatively slow, avoid it + if (_lastUpdateCheckRead) return _lastUpdateCheck; + + _lastUpdateCheck = System.DateTime.Parse(EditorPrefs.GetString("AstarLastUpdateCheck", "1/1/1971 00:00:01"), System.Globalization.CultureInfo.InvariantCulture); + _lastUpdateCheckRead = true; + } + catch (System.FormatException) { + lastUpdateCheck = System.DateTime.UtcNow; + Debug.LogWarning("Invalid DateTime string encountered when loading from preferences"); + } + return _lastUpdateCheck; + } + private set { + _lastUpdateCheck = value; + EditorPrefs.SetString("AstarLastUpdateCheck", _lastUpdateCheck.ToString(System.Globalization.CultureInfo.InvariantCulture)); + } + } + + /// <summary>Latest version of the A* Pathfinding Project</summary> + public static System.Version latestVersion { + get { + RefreshServerMessage(); + return _latestVersion ?? AstarPath.Version; + } + private set { + _latestVersion = value; + } + } + + /// <summary>Latest beta version of the A* Pathfinding Project</summary> + public static System.Version latestBetaVersion { + get { + RefreshServerMessage(); + return _latestBetaVersion ?? AstarPath.Version; + } + private set { + _latestBetaVersion = value; + } + } + + /// <summary>Summary of the latest update</summary> + public static string latestVersionDescription { + get { + RefreshServerMessage(); + return _latestVersionDescription ?? ""; + } + private set { + _latestVersionDescription = value; + } + } + + /// <summary> + /// Holds various URLs and text for the editor. + /// This info can be updated when a check for new versions is done to ensure that there are no invalid links. + /// </summary> + static Dictionary<string, string> astarServerData = new Dictionary<string, string> { + { "URL:modifiers", "https://www.arongranberg.com/astar/docs/modifiers.html" }, + { "URL:astarpro", "https://arongranberg.com/unity/a-pathfinding/astarpro/" }, + { "URL:documentation", "https://arongranberg.com/astar/docs/" }, + { "URL:findoutmore", "https://arongranberg.com/astar" }, + { "URL:download", "https://arongranberg.com/unity/a-pathfinding/download" }, + { "URL:changelog", "https://arongranberg.com/astar/docs/changelog.html" }, + { "URL:tags", "https://arongranberg.com/astar/docs/tags.html" }, + { "URL:homepage", "https://arongranberg.com/astar/" } + }; + + static AstarUpdateChecker() { + // Add a callback so that we can parse the message when it has been downloaded + EditorApplication.update += UpdateCheckLoop; + EditorBase.getDocumentationURL = () => GetURL("documentation"); + } + + + static void RefreshServerMessage () { + if (!hasParsedServerMessage) { + var serverMessage = EditorPrefs.GetString("AstarServerMessage"); + + if (!string.IsNullOrEmpty(serverMessage)) { + ParseServerMessage(serverMessage); + ShowUpdateWindowIfRelevant(); + } + } + } + + public static string GetURL (string tag) { + RefreshServerMessage(); + string url; + astarServerData.TryGetValue("URL:"+tag, out url); + return url ?? ""; + } + + /// <summary>Initiate a check for updates now, regardless of when the last check was done</summary> + public static void CheckForUpdatesNow () { + lastUpdateCheck = System.DateTime.UtcNow.AddDays(-5); + + // Remove the callback if it already exists + EditorApplication.update -= UpdateCheckLoop; + + // Add a callback so that we can parse the message when it has been downloaded + EditorApplication.update += UpdateCheckLoop; + } + + /// <summary> + /// Checking for updates... + /// Should be called from EditorApplication.update + /// </summary> + static void UpdateCheckLoop () { + // Go on until the update check has been completed + if (!CheckForUpdates()) { + EditorApplication.update -= UpdateCheckLoop; + } + } + + /// <summary> + /// Checks for updates if there was some time since last check. + /// It must be called repeatedly to ensure that the result is processed. + /// Returns: True if an update check is progressing (WWW request) + /// </summary> + static bool CheckForUpdates () { + if (updateCheckDownload != null && updateCheckDownload.isDone) { + if (!string.IsNullOrEmpty(updateCheckDownload.error)) { + Debug.LogWarning("There was an error checking for updates to the A* Pathfinding Project\n" + + "The error might disappear if you switch build target from Webplayer to Standalone because of the webplayer security emulation\nError: " + + updateCheckDownload.error); + updateCheckDownload = null; + return false; + } + UpdateCheckCompleted(updateCheckDownload.downloadHandler.text); + updateCheckDownload.Dispose(); + updateCheckDownload = null; + } + + // Check if it is time to check for updates + // Check for updates a bit earlier if we are in play mode or have the AstarPath object in the scene + // as then the collected statistics will be a bit more accurate + var offsetMinutes = (Application.isPlaying && Time.time > 60) || AstarPath.active != null ? -20 : 20; + var minutesUntilUpdate = lastUpdateCheck.AddDays(updateCheckRate).AddMinutes(offsetMinutes).Subtract(System.DateTime.UtcNow).TotalMinutes; + if (minutesUntilUpdate < 0) { + DownloadVersionInfo(); + } + + return updateCheckDownload != null || minutesUntilUpdate < 10; + } + + static void DownloadVersionInfo () { + if (!Application.isPlaying) AstarPath.FindAstarPath(); + var script = AstarPath.active != null ? AstarPath.active : UnityCompatibility.FindAnyObjectByType<AstarPath>(); + + bool mecanim = UnityCompatibility.FindAnyObjectByType<Animator>() != null; + string query = updateURL+ + "?v="+AstarPath.Version+ + "&pro=1"+ + "&check="+updateCheckRate+"&distr="+AstarPath.Distribution+ + "&unitypro="+(Application.HasProLicense() ? "1" : "0")+ + "&inscene="+(script != null ? "1" : "0")+ + "&targetplatform="+EditorUserBuildSettings.activeBuildTarget+ + "&devplatform="+Application.platform+ + "&mecanim="+(mecanim ? "1" : "0")+ + "&hasNavmesh=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "NavMeshGraph") ? 1 : 0) + + "&hasPoint=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "PointGraph") ? 1 : 0) + + "&hasGrid=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "GridGraph") ? 1 : 0) + + "&hasLayered=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "LayerGridGraph") ? 1 : 0) + + "&hasRecast=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "RecastGraph") ? 1 : 0) + + "&hasGrid=" + (script != null && script.data.graphs.Any(g => g.GetType().Name == "GridGraph") ? 1 : 0) + + "&hasCustom=" + (script != null && script.data.graphs.Any(g => g != null && !g.GetType().FullName.Contains("Pathfinding.")) ? 1 : 0) + + "&graphCount=" + (script != null ? script.data.graphs.Count(g => g != null) : 0) + + "&unityversion="+Application.unityVersion + + "&branch="+AstarPath.Branch; + + updateCheckDownload = UnityWebRequest.Get(query); + updateCheckDownload.SendWebRequest(); + lastUpdateCheck = System.DateTime.UtcNow; + } + + /// <summary>Handles the data from the update page</summary> + static void UpdateCheckCompleted (string result) { + EditorPrefs.SetString("AstarServerMessage", result); + ParseServerMessage(result); + ShowUpdateWindowIfRelevant(); + } + + static void ParseServerMessage (string result) { + if (string.IsNullOrEmpty(result)) { + return; + } + + hasParsedServerMessage = true; + +#if ASTARDEBUG + Debug.Log("Result from update check:\n"+result); +#endif + + string[] splits = result.Split('|'); + latestVersionDescription = splits.Length > 1 ? splits[1] : ""; + + if (splits.Length > 4) { + // First 4 are just compatibility fields + var fields = splits.Skip(4).ToArray(); + + // Take all pairs of fields + for (int i = 0; i < (fields.Length/2)*2; i += 2) { + string key = fields[i]; + string val = fields[i+1]; + astarServerData[key] = val; + } + } + + try { + latestVersion = new System.Version(astarServerData["VERSION:branch"]); + } catch (System.Exception ex) { + Debug.LogWarning("Could not parse version\n"+ex); + } + + try { + latestBetaVersion = new System.Version(astarServerData["VERSION:beta"]); + } catch (System.Exception ex) { + Debug.LogWarning("Could not parse version\n"+ex); + } + } + + static void ShowUpdateWindowIfRelevant () { +#if !ASTAR_ATAVISM + try { + System.DateTime remindDate; + var remindVersion = new System.Version(EditorPrefs.GetString("AstarRemindUpdateVersion", "0.0.0.0")); + if (latestVersion == remindVersion && System.DateTime.TryParse(EditorPrefs.GetString("AstarRemindUpdateDate", "1/1/1971 00:00:01"), out remindDate)) { + if (System.DateTime.UtcNow < remindDate) { + // Don't remind yet + return; + } + } else { + EditorPrefs.DeleteKey("AstarRemindUpdateDate"); + EditorPrefs.DeleteKey("AstarRemindUpdateVersion"); + } + } catch { + Debug.LogError("Invalid AstarRemindUpdateVersion or AstarRemindUpdateDate"); + } + + var skipVersion = new System.Version(EditorPrefs.GetString("AstarSkipUpToVersion", AstarPath.Version.ToString())); + + if (AstarPathEditor.FullyDefinedVersion(latestVersion) != AstarPathEditor.FullyDefinedVersion(skipVersion) && AstarPathEditor.FullyDefinedVersion(latestVersion) > AstarPathEditor.FullyDefinedVersion(AstarPath.Version)) { + EditorPrefs.DeleteKey("AstarSkipUpToVersion"); + EditorPrefs.DeleteKey("AstarRemindUpdateDate"); + EditorPrefs.DeleteKey("AstarRemindUpdateVersion"); + + AstarUpdateWindow.Init(latestVersion, latestVersionDescription); + } +#endif + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateChecker.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateChecker.cs.meta new file mode 100644 index 0000000..fd7da51 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateChecker.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8df9913c9ee004459b24d89644e573d7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateWindow.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateWindow.cs new file mode 100644 index 0000000..67c1840 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateWindow.cs @@ -0,0 +1,101 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + public class AstarUpdateWindow : EditorWindow { + static GUIStyle largeStyle; + static GUIStyle normalStyle; + Version version; + string summary; + bool setReminder; + + public static AstarUpdateWindow Init (Version version, string summary) { + // Get existing open window or if none, make a new one: + AstarUpdateWindow window = EditorWindow.GetWindow<AstarUpdateWindow>(true, "", true); + + window.position = new Rect(Screen.currentResolution.width/2 - 300, Mathf.Max(5, Screen.currentResolution.height/3 - 150), 600, 400); + window.version = version; + window.summary = summary; + window.titleContent = new GUIContent("New Version of the A* Pathfinding Project"); + return window; + } + + public void OnDestroy () { + if (version != null && !setReminder) { + Debug.Log("Closed window, reminding again tomorrow"); + EditorPrefs.SetString("AstarRemindUpdateDate", DateTime.UtcNow.AddDays(1).ToString(System.Globalization.CultureInfo.InvariantCulture)); + EditorPrefs.SetString("AstarRemindUpdateVersion", version.ToString()); + } + } + + void OnGUI () { + if (largeStyle == null) { + largeStyle = new GUIStyle(EditorStyles.largeLabel) { + fontSize = 32, + alignment = TextAnchor.UpperCenter, + richText = true + }; + + normalStyle = new GUIStyle(EditorStyles.label) { + wordWrap = true, + richText = true + }; + } + + if (version == null) { + return; + } + + GUILayout.Label("New Update Available!", largeStyle); + GUILayout.Label("There is a new version of the <b>A* Pathfinding Project</b> available for download.\n" + + "The new version is <b>" + version + "</b> you have <b>" + AstarPath.Version + "</b>\n\n"+ + "<i>Summary:</i>\n"+summary, normalStyle + ); + + GUILayout.FlexibleSpace(); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + GUILayout.BeginVertical(); + + Color col = GUI.color; + GUI.backgroundColor *= new Color(0.5f, 1f, 0.5f); + if (GUILayout.Button("Take me to the download page!", GUILayout.Height(30), GUILayout.MaxWidth(300))) { + Application.OpenURL(AstarUpdateChecker.GetURL("download")); + } + GUI.backgroundColor = col; + + + if (GUILayout.Button("What's new? (full changelog)")) { + Application.OpenURL(AstarUpdateChecker.GetURL("changelog")); + } + + GUILayout.EndVertical(); + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.FlexibleSpace(); + + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("Skip this version", GUILayout.MaxWidth(100))) { + EditorPrefs.SetString("AstarSkipUpToVersion", version.ToString()); + setReminder = true; + Close(); + } + + if (GUILayout.Button("Remind me later ( 1 week )", GUILayout.MaxWidth(200))) { + EditorPrefs.SetString("AstarRemindUpdateDate", DateTime.UtcNow.AddDays(7).ToString(System.Globalization.CultureInfo.InvariantCulture)); + EditorPrefs.SetString("AstarRemindUpdateVersion", version.ToString()); + setReminder = true; + Close(); + } + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateWindow.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateWindow.cs.meta new file mode 100644 index 0000000..624c04d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/AstarUpdateWindow.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97d8d5fc46a644f22b0d66c6ee18e753 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/CustomGraphEditorAttribute.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/CustomGraphEditorAttribute.cs new file mode 100644 index 0000000..614c66c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/CustomGraphEditorAttribute.cs @@ -0,0 +1,19 @@ +namespace Pathfinding { + /// <summary>Added to editors of custom graph types</summary> + [System.AttributeUsage(System.AttributeTargets.All, Inherited = false, AllowMultiple = true)] + public class CustomGraphEditorAttribute : System.Attribute { + /// <summary>Graph type which this is an editor for</summary> + public System.Type graphType; + + /// <summary>Name displayed in the inpector</summary> + public string displayName; + + /// <summary>Type of the editor for the graph</summary> + public System.Type editorType; + + public CustomGraphEditorAttribute (System.Type t, string displayName) { + graphType = t; + this.displayName = displayName; + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/CustomGraphEditorAttribute.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/CustomGraphEditorAttribute.cs.meta new file mode 100644 index 0000000..796cadc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/CustomGraphEditorAttribute.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 576dcf42aca804a48b5923974edaee01 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets.meta new file mode 100644 index 0000000..f628909 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4b2dff938dc634365967d447c540e208 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinDark.guiskin b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinDark.guiskin new file mode 100644 index 0000000..8bca18c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinDark.guiskin @@ -0,0 +1,3051 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} + m_Name: AstarEditorSkinDark + m_EditorClassIdentifier: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_box: + m_Name: box + m_Normal: + m_Background: {fileID: 11001, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_button: + m_Name: button + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: -1537457205435906773, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: -8766172725880940643, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: -9059002882264723198, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: -4993635991501620529, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 7382603045041641420, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 8718812295543890339, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 3 + m_Right: 3 + m_Top: 2 + m_Bottom: 2 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 2 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 1 + m_Font: {fileID: -2339589663860864360, guid: 0000000000000000d000000000000000, + type: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 4 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_toggle: + m_Name: toggle + m_Normal: + m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1} + m_Hover: + m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 14 + m_Right: 0 + m_Top: 14 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 15 + m_Right: 0 + m_Top: 3 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: 0 + m_Top: -4 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_label: + m_Name: label + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.86734694, g: 0.86734694, b: 0.86734694, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textField: + m_Name: textfield + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textArea: + m_Name: textarea + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_window: + m_Name: window + m_Normal: + m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 18 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 20 + m_Bottom: 10 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: -18} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSlider: + m_Name: horizontalslider + m_Normal: + m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 3 + m_Right: 3 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -2 + m_Bottom: -3 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSliderThumb: + m_Name: horizontalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 7 + m_Right: 7 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalSlider: + m_Name: verticalslider + m_Normal: + m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Overflow: + m_Left: -2 + m_Right: -3 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalSliderThumb: + m_Name: verticalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 7 + m_Bottom: 7 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_horizontalScrollbar: + m_Name: horizontalscrollbar + m_Normal: + m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 9 + m_Right: 9 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 1 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 15 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarThumb: + m_Name: horizontalscrollbarthumb + m_Normal: + m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 13 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarLeftButton: + m_Name: horizontalscrollbarleftbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarRightButton: + m_Name: horizontalscrollbarrightbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbar: + m_Name: verticalscrollbar + m_Normal: + m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 9 + m_Bottom: 9 + m_Margin: + m_Left: 1 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 1 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarThumb: + m_Name: verticalscrollbarthumb + m_Normal: + m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 6 + m_Bottom: 6 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalScrollbarUpButton: + m_Name: verticalscrollbarupbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarDownButton: + m_Name: verticalscrollbardownbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_ScrollView: + m_Name: scrollview + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_CustomStyles: + - m_Name: PixelBox + m_Normal: + m_Background: {fileID: 2800000, guid: 5d951d0a838a34f40ac2b9ce8968a7d6, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 4 + m_Bottom: 6 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 1 + m_Right: 1 + m_Top: 0 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: ColorInterpolationBox + m_Normal: + m_Background: {fileID: 2800000, guid: 0790ee8db18ed49ed8369be285199835, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 7 + m_Right: 7 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 6 + m_Bottom: 4 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 4 + m_Overflow: + m_Left: 1 + m_Right: 1 + m_Top: 0 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: StretchWidth + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: BoxHeader + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.6334038, g: 0.63352257, b: 0.6333745, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.7397959, g: 0.7397959, b: 0.7397959, a: 1} + m_Focused: + m_Background: {fileID: 2800000, guid: db5b85df63e094a1c96f11019bccc577, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.63529414, g: 0.63529414, b: 0.63529414, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 8 + m_Right: 6 + m_Top: 2 + m_Bottom: 2 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 0 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 18 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: TopBoxHeader + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.6334038, g: 0.63352257, b: 0.6333745, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.7397959, g: 0.7397959, b: 0.7397959, a: 1} + m_Focused: + m_Background: {fileID: 2800000, guid: db5b85df63e094a1c96f11019bccc577, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.63529414, g: 0.63529414, b: 0.63529414, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 2 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 3 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 5} + m_FixedWidth: 0 + m_FixedHeight: 24 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: PixelBox3 + m_Normal: + m_Background: {fileID: 2800000, guid: 7991166a167af4b4793b4fc8fcc3bfe2, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 9043fef44c60647b7a763eb86f912ba1, type: 3} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 5 + m_Bottom: 2 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 2 + m_Bottom: 2 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: PixelButton + m_Normal: + m_Background: {fileID: 2800000, guid: b5a4a564ac2dc4261a13719673f157e1, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: c730485723dee4bcbad9d8a7593a8799, type: 3} + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: d0f7738d6b5b2420b9a77bfef3926e2a, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: b9d7d6d7befb34b9c889e6195746c452, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 4 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: 1 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: LinkButton + m_Normal: + m_Background: {fileID: 2800000, guid: 53ee29e7cbeb545bcb1ca238a2736fb8, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 1066e2a70f10b481984312db993dadc8, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 34 + m_FixedHeight: 34 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: CloseButton + m_Normal: + m_Background: {fileID: 2800000, guid: 9496521dd08a64ed2a92bc4e90a3a271, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 921542314cf2f4a55952ad059454677e, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -2 + m_Right: 2 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 13 + m_FixedHeight: 13 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: GridPivotSelectButton + m_Normal: + m_Background: {fileID: 2800000, guid: 37972c32346084c13bfddb8c3dbed143, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 7ea4fc739ffbb4af1a466f655bf1d178, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: 7ea4fc739ffbb4af1a466f655bf1d178, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: 37972c32346084c13bfddb8c3dbed143, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: GridPivotSelectBackground + m_Normal: + m_Background: {fileID: 2800000, guid: 11b8d44fcb3cf4c048a576df708e0ec6, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 7 + m_Right: 4 + m_Top: 14 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: CollisionHeader + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.6334038, g: 0.63352257, b: 0.6333745, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: InfoButton + m_Normal: + m_Background: {fileID: 2800000, guid: 1986ec06d68774254928f44b896a3913, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 623f6adf01f324cb7bc6aefe7f87d623, type: 3} + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: d008deade2077407fbf14446df2547c9, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 9b266e42522c048f6b62832985be51ed, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: d008deade2077407fbf14446df2547c9, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 9b266e42522c048f6b62832985be51ed, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: 1986ec06d68774254928f44b896a3913, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 623f6adf01f324cb7bc6aefe7f87d623, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 1 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: PixelBox3Separator + m_Normal: + m_Background: {fileID: 2800000, guid: 3a08de11a34c44da28de4c086fd13461, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 3 + m_Right: 3 + m_Top: 8 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -2 + m_Bottom: 2 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 4 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: GridSizeLock + m_Normal: + m_Background: {fileID: 2800000, guid: c43744025f7024e20b5fe880600d19a7, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 957d0fd6ae3494da9aed50c5d7d7ce4e, type: 3} + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: aaae516f9c5404f77a3e586cdd59695b, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 6c38830c1556942fcb6ce893085d1daa, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: aaae516f9c5404f77a3e586cdd59695b, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 6c38830c1556942fcb6ce893085d1daa, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: c43744025f7024e20b5fe880600d19a7, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 957d0fd6ae3494da9aed50c5d7d7ce4e, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 5 + m_Right: 0 + m_Top: 1 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 27 + m_FixedHeight: 28 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: UpArrow + m_Normal: + m_Background: {fileID: 2800000, guid: b1722c752c8754c5281b2efd6cf8477c, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 4c914fdaf554243fe9fb26afc323caef, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 11 + m_FixedHeight: 10 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: DownArrow + m_Normal: + m_Background: {fileID: 2800000, guid: 12ea2fbedc5cc4bd191d795f44b2de75, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: d8951099054c64beaaa49d675d71cfcf, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 11 + m_FixedHeight: 10 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: SmallReset + m_Normal: + m_Background: {fileID: 2800000, guid: fb3e1d793e4f0459f8b913d0d2d76e6c, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 990963b32226c440fb1a72e47e0ad7a2, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 12 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: GizmoButton + m_Normal: + m_Background: {fileID: 2800000, guid: b05124c2b9dc5429a84ef0195a916fce, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 3772050cdbd2a472789aa76d6de5b270, type: 3} + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 54ad5f6eb8a9349568e58cd1204388a2, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: a454b67ef7bd04780aca99e364202679, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: 54ad5f6eb8a9349568e58cd1204388a2, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: a454b67ef7bd04780aca99e364202679, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: b05124c2b9dc5429a84ef0195a916fce, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 3772050cdbd2a472789aa76d6de5b270, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 1 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: EditButton + m_Normal: + m_Background: {fileID: 2800000, guid: 705155b2c3fce47f0a818ac32d5abe3f, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: e8ebb72a41d314b288545fddfd20cafd, type: 3} + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: e0cb3cc51f25a48bf8b0c647452b09b1, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: f6a4baf90a7bb4e4a92abe07f1a0a9d3, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 0} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 0} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 1 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: SceneBoxDark + m_Normal: + m_Background: {fileID: 2800000, guid: a4bb5812f98bf40a68d9c1a69ad860cb, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: f834e7df6f42446b59c83dca1e5bd098, type: 3} + m_TextColor: {r: 0.74509805, g: 0.74509805, b: 0.74509805, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 0} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 20 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: -16} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: ScenePrefixLabel + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 0} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 1 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: -3} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: HexagonDiameter + m_Normal: + m_Background: {fileID: 2800000, guid: aec40eb6c450c4bdea484100ff9fb9a4, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 36094f49ffe31443eb5e8ea185115a1d, type: 3} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 0} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 8 + m_Right: 8 + m_Top: 5 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 32 + m_FixedHeight: 32 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: HexagonWidth + m_Normal: + m_Background: {fileID: 2800000, guid: 43a4af66a8c594a2daa4744ed77da2dd, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 321a1fe2502bc493d87337a3a4429cf5, type: 3} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 0} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 8 + m_Right: 8 + m_Top: 5 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 32 + m_FixedHeight: 32 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: SimpleDeleteButton + m_Normal: + m_Background: {fileID: 2800000, guid: 5d7e9740bfd1d470180f5e4823171712, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: f88ac1d30fa7144dd94337fce44b9239, type: 3} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: f6b7bcad2476249879798d0ee64ea2e2, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 14e87db4f581b4f8cb79da48d87e01ee, type: 3} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 0} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + m_Settings: + m_DoubleClickSelectsWord: 1 + m_TripleClickSelectsLine: 1 + m_CursorColor: {r: 1, g: 1, b: 1, a: 1} + m_CursorFlashSpeed: -1 + m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7} +--- !u!1002 &11400001 +EditorExtensionImpl: + serializedVersion: 6 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinDark.guiskin.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinDark.guiskin.meta new file mode 100644 index 0000000..052aa3f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinDark.guiskin.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8fc713511eb5d4fb9937ab63de6af346 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinLight.guiskin b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinLight.guiskin new file mode 100644 index 0000000..aa1a6ee --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinLight.guiskin @@ -0,0 +1,3045 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} + m_Name: AstarEditorSkinLight + m_EditorClassIdentifier: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_box: + m_Name: box + m_Normal: + m_Background: {fileID: 11001, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_button: + m_Name: button + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: -1537457205435906773, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: -8766172725880940643, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: -9059002882264723198, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: -4993635991501620529, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 7382603045041641420, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 8718812295543890339, guid: 0000000000000000d000000000000000, type: 0} + m_TextColor: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 3 + m_Right: 3 + m_Top: 2 + m_Bottom: 2 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 2 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 4 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_toggle: + m_Name: toggle + m_Normal: + m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1} + m_Hover: + m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 14 + m_Right: 0 + m_Top: 14 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 15 + m_Right: 0 + m_Top: 3 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: 0 + m_Top: -4 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_label: + m_Name: label + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textField: + m_Name: textfield + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textArea: + m_Name: textarea + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_window: + m_Name: window + m_Normal: + m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 18 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 20 + m_Bottom: 10 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: -18} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSlider: + m_Name: horizontalslider + m_Normal: + m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 3 + m_Right: 3 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -2 + m_Bottom: -3 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSliderThumb: + m_Name: horizontalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 7 + m_Right: 7 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalSlider: + m_Name: verticalslider + m_Normal: + m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Overflow: + m_Left: -2 + m_Right: -3 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalSliderThumb: + m_Name: verticalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 7 + m_Bottom: 7 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_horizontalScrollbar: + m_Name: horizontalscrollbar + m_Normal: + m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 9 + m_Right: 9 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 1 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 15 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarThumb: + m_Name: horizontalscrollbarthumb + m_Normal: + m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 13 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarLeftButton: + m_Name: horizontalscrollbarleftbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarRightButton: + m_Name: horizontalscrollbarrightbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbar: + m_Name: verticalscrollbar + m_Normal: + m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 9 + m_Bottom: 9 + m_Margin: + m_Left: 1 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 1 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarThumb: + m_Name: verticalscrollbarthumb + m_Normal: + m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 6 + m_Bottom: 6 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalScrollbarUpButton: + m_Name: verticalscrollbarupbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarDownButton: + m_Name: verticalscrollbardownbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_ScrollView: + m_Name: scrollview + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_CustomStyles: + - m_Name: PixelBox + m_Normal: + m_Background: {fileID: 2800000, guid: 2fa6580cc9f7f40919411d1ed85c6fe1, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 4 + m_Bottom: 6 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 1 + m_Right: 1 + m_Top: 0 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: ColorInterpolationBox + m_Normal: + m_Background: {fileID: 2800000, guid: 9bf4f8f9d8795455bb87213dd56ed793, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 7 + m_Right: 7 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 6 + m_Bottom: 4 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 4 + m_Overflow: + m_Left: 1 + m_Right: 1 + m_Top: 0 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: StretchWidth + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: BoxHeader + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.7397959, g: 0.7397959, b: 0.7397959, a: 1} + m_Focused: + m_Background: {fileID: 2800000, guid: 620f088d04c284b21939ce24996fdbee, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12156863, g: 0.12156863, b: 0.12156863, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 8 + m_Right: 6 + m_Top: 2 + m_Bottom: 2 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 0 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 18 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: TopBoxHeader + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.7397959, g: 0.7397959, b: 0.7397959, a: 1} + m_Focused: + m_Background: {fileID: 2800000, guid: 620f088d04c284b21939ce24996fdbee, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12156863, g: 0.12156863, b: 0.12156863, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 2 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 3 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 5} + m_FixedWidth: 0 + m_FixedHeight: 24 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: PixelBox3 + m_Normal: + m_Background: {fileID: 2800000, guid: 86cd0618b10f3494c831ac9215649110, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 5ed56a3e069cd4b5aa4360154acc026a, type: 3} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 5 + m_Bottom: 2 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 2 + m_Bottom: 2 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: PixelButton + m_Normal: + m_Background: {fileID: 2800000, guid: 3240f334343ca4dee8239c16d2de57c6, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 6444e8eb74e6f40e0a966d1e26744d08, type: 3} + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: c051ffc737cd54d909137d2937e82930, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 19e49615b2c8540fd8a11acd2a26c335, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 4 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: 1 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: LinkButton + m_Normal: + m_Background: {fileID: 2800000, guid: 53ee29e7cbeb545bcb1ca238a2736fb8, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 1066e2a70f10b481984312db993dadc8, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 34 + m_FixedHeight: 34 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: CloseButton + m_Normal: + m_Background: {fileID: 2800000, guid: 9496521dd08a64ed2a92bc4e90a3a271, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 921542314cf2f4a55952ad059454677e, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -2 + m_Right: 2 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 13 + m_FixedHeight: 13 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: GridPivotSelectButton + m_Normal: + m_Background: {fileID: 2800000, guid: 9de7a15ab4e1d48da9861247bc34226d, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 3d11311e97436432e897a4bd0b5fbfac, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: 3d11311e97436432e897a4bd0b5fbfac, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: 9de7a15ab4e1d48da9861247bc34226d, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: GridPivotSelectBackground + m_Normal: + m_Background: {fileID: 2800000, guid: b593db43606434498a7200f8281297d8, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.34183675, g: 0.34183675, b: 0.34183675, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 7 + m_Right: 4 + m_Top: 14 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: CollisionHeader + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: InfoButton + m_Normal: + m_Background: {fileID: 2800000, guid: efb7b60811b9a4ec7b92ecfcaa9bcd0d, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 7ef0e648811f14f65b69c2df3f27de11, type: 3} + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 7604699b5bc8f4343b03cc4d0b603403, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 8acb97c3fcc694bf3b7d33b1ff321337, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: 7604699b5bc8f4343b03cc4d0b603403, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 8acb97c3fcc694bf3b7d33b1ff321337, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: efb7b60811b9a4ec7b92ecfcaa9bcd0d, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 7ef0e648811f14f65b69c2df3f27de11, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 1 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: PixelBox3Separator + m_Normal: + m_Background: {fileID: 2800000, guid: e101da2dcb7a14fa2aed1a65c384a99b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 3 + m_Right: 3 + m_Top: 8 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -2 + m_Bottom: 2 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 4 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: GridSizeLock + m_Normal: + m_Background: {fileID: 2800000, guid: 3805c157b9b38472684befb652c5d213, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: d04d4a88875f842c88825d3d5b2b529c, type: 3} + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 5e0cd84e9d84642ac883c25ca8d667ac, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 7b229d059f89d49918aec1466c0c5819, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: 5e0cd84e9d84642ac883c25ca8d667ac, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 7b229d059f89d49918aec1466c0c5819, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: 3805c157b9b38472684befb652c5d213, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: d04d4a88875f842c88825d3d5b2b529c, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 5 + m_Right: 0 + m_Top: 1 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 27 + m_FixedHeight: 28 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: UpArrow + m_Normal: + m_Background: {fileID: 2800000, guid: b1722c752c8754c5281b2efd6cf8477c, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 4c914fdaf554243fe9fb26afc323caef, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 11 + m_FixedHeight: 10 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: DownArrow + m_Normal: + m_Background: {fileID: 2800000, guid: 12ea2fbedc5cc4bd191d795f44b2de75, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: d8951099054c64beaaa49d675d71cfcf, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 11 + m_FixedHeight: 10 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: SmallReset + m_Normal: + m_Background: {fileID: 2800000, guid: fb3e1d793e4f0459f8b913d0d2d76e6c, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 990963b32226c440fb1a72e47e0ad7a2, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 12 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: GizmoButton + m_Normal: + m_Background: {fileID: 2800000, guid: c780955fc9d0f458abc0de8f2f9cedb2, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: deb2afb942c3b42fbba8823da7f05894, type: 3} + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 455f4fe795672465c8a4e8db3c6b9ccb, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 731ce0beec302410299a12fa1da2dc54, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: 455f4fe795672465c8a4e8db3c6b9ccb, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 731ce0beec302410299a12fa1da2dc54, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: c780955fc9d0f458abc0de8f2f9cedb2, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: deb2afb942c3b42fbba8823da7f05894, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 1 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: EditButton + m_Normal: + m_Background: {fileID: 2800000, guid: 71ef598858974450ead310c33f29d5d3, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 7e276a83ed42e4e3584a50b6084eef8d, type: 3} + m_TextColor: {r: 0.12244898, g: 0.12244898, b: 0.12244898, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 3354fe2e1951d420fa49d8f4fec2954b, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: f7ae6f90d33d043c684812513307ec16, type: 3} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 0} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: + - {fileID: 0} + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 1 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 1 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: SceneBoxDark + m_Normal: + m_Background: {fileID: 2800000, guid: a4bb5812f98bf40a68d9c1a69ad860cb, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: f834e7df6f42446b59c83dca1e5bd098, type: 3} + m_TextColor: {r: 0.745283, g: 0.745283, b: 0.745283, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 20 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: -16} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: ScenePrefixLabel + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 1 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: -3} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: HexagonDiameter + m_Normal: + m_Background: {fileID: 2800000, guid: b1817d211ea3547f088cddf76f3e6647, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 5a358b45ec6c34f20b9f792e1f259b4f, type: 3} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 8 + m_Right: 8 + m_Top: 5 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 32 + m_FixedHeight: 32 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: HexagonWidth + m_Normal: + m_Background: {fileID: 2800000, guid: c3f63c474ba404e88a6a16a074cced39, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 6010a63a238ef4899872fe5bd998dbb5, type: 3} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 8 + m_Right: 8 + m_Top: 5 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 32 + m_FixedHeight: 32 + m_StretchWidth: 0 + m_StretchHeight: 0 + - m_Name: SimpleDeleteButton + m_Normal: + m_Background: {fileID: 2800000, guid: 168346d70f1fe4211ab22c360451c602, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: 003032829f3e34ba3bbf576dbdbf4961, type: 3} + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 3d1e3e2345df94db3be6501151e8db26, type: 3} + m_ScaledBackgrounds: + - {fileID: 2800000, guid: e95696bf2c915483a965d5b8c7c41fb0, type: 3} + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.4745098, g: 0.70980394, b: 0.8901961, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 16 + m_FixedHeight: 16 + m_StretchWidth: 0 + m_StretchHeight: 0 + m_Settings: + m_DoubleClickSelectsWord: 1 + m_TripleClickSelectsLine: 1 + m_CursorColor: {r: 1, g: 1, b: 1, a: 1} + m_CursorFlashSpeed: -1 + m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7} +--- !u!1002 &11400001 +EditorExtensionImpl: + serializedVersion: 6 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinLight.guiskin.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinLight.guiskin.meta new file mode 100644 index 0000000..89d157f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/AstarEditorSkinLight.guiskin.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 66428235a3cda4584bd90de6998ad4d2 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons.meta new file mode 100644 index 0000000..41a5e6f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1088224cbcd07314797b5131074dcc61 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AIDestinationSetter@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AIDestinationSetter@256.png Binary files differnew file mode 100644 index 0000000..25317e3 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AIDestinationSetter@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AIDestinationSetter@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AIDestinationSetter@256.png.meta new file mode 100644 index 0000000..1ec46c3 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AIDestinationSetter@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 8dca5cfad5de0f444847aaaaa7cf73b8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AstarPath@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AstarPath@256.png Binary files differnew file mode 100644 index 0000000..b850c2b --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AstarPath@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AstarPath@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AstarPath@256.png.meta new file mode 100644 index 0000000..5e5abc0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/AstarPath@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 20cc19c9ace15d248a07aaa9c8b81e80 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/DynamicGridObstacle@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/DynamicGridObstacle@256.png Binary files differnew file mode 100644 index 0000000..f0579fe --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/DynamicGridObstacle@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/DynamicGridObstacle@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/DynamicGridObstacle@256.png.meta new file mode 100644 index 0000000..aa9d93f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/DynamicGridObstacle@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: edb61d815bfcfa548b5e947d759e9fb6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MoveInCircle@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MoveInCircle@256.png Binary files differnew file mode 100644 index 0000000..7579399 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MoveInCircle@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MoveInCircle@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MoveInCircle@256.png.meta new file mode 100644 index 0000000..97567ec --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MoveInCircle@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 8cf8c12a4f0221b438c0d7ffa0eab6f4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MovementScripts@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MovementScripts@256.png Binary files differnew file mode 100644 index 0000000..4162d0c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MovementScripts@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MovementScripts@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MovementScripts@256.png.meta new file mode 100644 index 0000000..438bbba --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/MovementScripts@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: f2e81a0445323b64f973d2f5b5c56e15 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshAdd@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshAdd@256.png Binary files differnew file mode 100644 index 0000000..62eb10c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshAdd@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshAdd@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshAdd@256.png.meta new file mode 100644 index 0000000..1e4d59e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshAdd@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 9e78f057f1263a641b1b3e683ae46b5e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshCut@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshCut@256.png Binary files differnew file mode 100644 index 0000000..b6899bc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshCut@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshCut@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshCut@256.png.meta new file mode 100644 index 0000000..0e902bc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NavmeshCut@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 8e13392804681844e98e416b545e821a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NodeLink2@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NodeLink2@256.png Binary files differnew file mode 100644 index 0000000..11d3fd8 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NodeLink2@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NodeLink2@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NodeLink2@256.png.meta new file mode 100644 index 0000000..1b66233 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/NodeLink2@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: eb30e238fe6211b4fa5f441a73bd01ef +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Patrol@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Patrol@256.png Binary files differnew file mode 100644 index 0000000..ca2056b --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Patrol@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Patrol@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Patrol@256.png.meta new file mode 100644 index 0000000..4f3a15c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Patrol@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: af22be3b7ab2b3b44afe7297460363ff +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/ProceduralGraphMover@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/ProceduralGraphMover@256.png Binary files differnew file mode 100644 index 0000000..85f8c5c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/ProceduralGraphMover@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/ProceduralGraphMover@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/ProceduralGraphMover@256.png.meta new file mode 100644 index 0000000..dd3eac8 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/ProceduralGraphMover@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: ddf758bc3c379c843a3c9b6030f06959 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/RVOController@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/RVOController@256.png Binary files differnew file mode 100644 index 0000000..7a3a3f1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/RVOController@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/RVOController@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/RVOController@256.png.meta new file mode 100644 index 0000000..8f658b1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/RVOController@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 23b90e39b0f33834bbdbf9ff000d14d5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Seeker@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Seeker@256.png Binary files differnew file mode 100644 index 0000000..720b23b --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Seeker@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Seeker@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Seeker@256.png.meta new file mode 100644 index 0000000..3f426ed --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/Seeker@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 2c41d544537d6ee4a8ecd487b2ac9724 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AIDestinationSetter@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AIDestinationSetter@256.png Binary files differnew file mode 100644 index 0000000..46a32fe --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AIDestinationSetter@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AIDestinationSetter@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AIDestinationSetter@256.png.meta new file mode 100644 index 0000000..9f74bef --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AIDestinationSetter@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 4070f972aa69a7f43a32b186cc95434a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AstarPath@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AstarPath@256.png Binary files differnew file mode 100644 index 0000000..d444987 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AstarPath@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AstarPath@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AstarPath@256.png.meta new file mode 100644 index 0000000..2ba5a8d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_AstarPath@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 1620f833be5302149a071c06944d3e9b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_DynamicGridObstacle@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_DynamicGridObstacle@256.png Binary files differnew file mode 100644 index 0000000..b76ac12 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_DynamicGridObstacle@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_DynamicGridObstacle@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_DynamicGridObstacle@256.png.meta new file mode 100644 index 0000000..2b65727 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_DynamicGridObstacle@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 91eab5ba852d092468731c6ff2468e4e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MoveInCircle@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MoveInCircle@256.png Binary files differnew file mode 100644 index 0000000..9205074 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MoveInCircle@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MoveInCircle@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MoveInCircle@256.png.meta new file mode 100644 index 0000000..1412a08 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MoveInCircle@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: b13bcad279d89724589e3b19297e7f7e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MovementScripts@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MovementScripts@256.png Binary files differnew file mode 100644 index 0000000..f908c62 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MovementScripts@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MovementScripts@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MovementScripts@256.png.meta new file mode 100644 index 0000000..bfd3220 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_MovementScripts@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 3f255a09e18c8ca438c5c637954f306e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshAdd@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshAdd@256.png Binary files differnew file mode 100644 index 0000000..0047f80 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshAdd@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshAdd@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshAdd@256.png.meta new file mode 100644 index 0000000..3941556 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshAdd@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 94cf7e2a5fd05ea45a3a78170941a51a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshCut@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshCut@256.png Binary files differnew file mode 100644 index 0000000..fbf4fa9 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshCut@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshCut@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshCut@256.png.meta new file mode 100644 index 0000000..cd82569 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_NavmeshCut@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 1b197d68033744e4083039c6ba7c1c2a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Patrol@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Patrol@256.png Binary files differnew file mode 100644 index 0000000..ac27b9d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Patrol@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Patrol@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Patrol@256.png.meta new file mode 100644 index 0000000..360aff9 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Patrol@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: a778521cf2098e742b580bee948ea7a5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_ProceduralGraphMover@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_ProceduralGraphMover@256.png Binary files differnew file mode 100644 index 0000000..b2abdbd --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_ProceduralGraphMover@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_ProceduralGraphMover@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_ProceduralGraphMover@256.png.meta new file mode 100644 index 0000000..8f2813f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_ProceduralGraphMover@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 1f4ed587d406e7f42ba6020f06750920 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_RVOController@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_RVOController@256.png Binary files differnew file mode 100644 index 0000000..b19c2a9 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_RVOController@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_RVOController@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_RVOController@256.png.meta new file mode 100644 index 0000000..e617dc5 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_RVOController@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 754f3279748cb184bbf0724c070d7d18 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Seeker@256.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Seeker@256.png Binary files differnew file mode 100644 index 0000000..665aa79 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Seeker@256.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Seeker@256.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Seeker@256.png.meta new file mode 100644 index 0000000..6372c14 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/ComponentIcons/d_Seeker@256.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 0e61a293a00beae419ed19a406ebd204 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin.meta new file mode 100644 index 0000000..1f1f7b1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b550ce2d4ed7140078170116365ea5f9 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/colorInterpolationBox.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/colorInterpolationBox.png Binary files differnew file mode 100644 index 0000000..d8d06e3 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/colorInterpolationBox.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/colorInterpolationBox.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/colorInterpolationBox.png.meta new file mode 100644 index 0000000..269010f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/colorInterpolationBox.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 0790ee8db18ed49ed8369be285199835 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@1x.png Binary files differnew file mode 100644 index 0000000..88d8ff4 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@1x.png.meta new file mode 100644 index 0000000..e70bfda --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: b5a4a564ac2dc4261a13719673f157e1 +timeCreated: 1498132652 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@2x.png Binary files differnew file mode 100644 index 0000000..e8cf2e1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@2x.png.meta new file mode 100644 index 0000000..7eac088 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: c730485723dee4bcbad9d8a7593a8799 +timeCreated: 1498131761 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@1x.png Binary files differnew file mode 100644 index 0000000..9a8d12a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@1x.png.meta new file mode 100644 index 0000000..e496c38 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: d0f7738d6b5b2420b9a77bfef3926e2a +timeCreated: 1498133640 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@2x.png Binary files differnew file mode 100644 index 0000000..85042f0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@2x.png.meta new file mode 100644 index 0000000..0411ce6 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/deleteButton_active@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: b9d7d6d7befb34b9c889e6195746c452 +timeCreated: 1498133640 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@1x.png Binary files differnew file mode 100644 index 0000000..98da8d8 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@1x.png.meta new file mode 100644 index 0000000..6e8eccb --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 705155b2c3fce47f0a818ac32d5abe3f +timeCreated: 1499339103 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@2x.png Binary files differnew file mode 100644 index 0000000..c79317a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@2x.png.meta new file mode 100644 index 0000000..f84eba3 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: e8ebb72a41d314b288545fddfd20cafd +timeCreated: 1499339103 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@1x.png Binary files differnew file mode 100644 index 0000000..588407e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@1x.png.meta new file mode 100644 index 0000000..037e5e2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: e0cb3cc51f25a48bf8b0c647452b09b1 +timeCreated: 1499339103 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@2x.png Binary files differnew file mode 100644 index 0000000..e0b9b54 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@2x.png.meta new file mode 100644 index 0000000..38f2321 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/editButton_active@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: f6a4baf90a7bb4e4a92abe07f1a0a9d3 +timeCreated: 1499339103 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@1x.png Binary files differnew file mode 100644 index 0000000..b47a297 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@1x.png.meta new file mode 100644 index 0000000..2a0e6e5 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: b05124c2b9dc5429a84ef0195a916fce +timeCreated: 1498128537 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@2x.png Binary files differnew file mode 100644 index 0000000..57e79b0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@2x.png.meta new file mode 100644 index 0000000..fd1911d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_off@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 3772050cdbd2a472789aa76d6de5b270 +timeCreated: 1498128911 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@1x.png Binary files differnew file mode 100644 index 0000000..c3ddfa2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@1x.png.meta new file mode 100644 index 0000000..6e277e1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 54ad5f6eb8a9349568e58cd1204388a2 +timeCreated: 1498131017 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@2x.png Binary files differnew file mode 100644 index 0000000..5f93e73 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@2x.png.meta new file mode 100644 index 0000000..89a0c91 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gizmoButton_on@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: a454b67ef7bd04780aca99e364202679 +timeCreated: 1498131017 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gridPivotSelect.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gridPivotSelect.png Binary files differnew file mode 100644 index 0000000..f681cd5 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gridPivotSelect.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gridPivotSelect.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gridPivotSelect.png.meta new file mode 100644 index 0000000..ec5d57a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/gridPivotSelect.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 11b8d44fcb3cf4c048a576df708e0ec6 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/headerBackground.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/headerBackground.png Binary files differnew file mode 100644 index 0000000..bb4b145 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/headerBackground.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/headerBackground.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/headerBackground.png.meta new file mode 100644 index 0000000..58ba0b2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/headerBackground.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: db5b85df63e094a1c96f11019bccc577 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@1x.png Binary files differnew file mode 100644 index 0000000..7aeae0e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@1x.png.meta new file mode 100644 index 0000000..d1bfc7b --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@1x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: aec40eb6c450c4bdea484100ff9fb9a4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@2x.png Binary files differnew file mode 100644 index 0000000..5ee613a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@2x.png.meta new file mode 100644 index 0000000..0a4642b --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_diameter@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 36094f49ffe31443eb5e8ea185115a1d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@1x.png Binary files differnew file mode 100644 index 0000000..466afa3 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@1x.png.meta new file mode 100644 index 0000000..525328e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@1x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 43a4af66a8c594a2daa4744ed77da2dd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@2x.png Binary files differnew file mode 100644 index 0000000..6d79614 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@2x.png.meta new file mode 100644 index 0000000..e3a1fc9 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/hex_width@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 321a1fe2502bc493d87337a3a4429cf5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images.meta new file mode 100644 index 0000000..aae599e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f2ff19fb9b8f0477ea6722260e413281 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect-03.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect-03.png Binary files differnew file mode 100644 index 0000000..f8aaa12 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect-03.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect-03.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect-03.png.meta new file mode 100644 index 0000000..905c90e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect-03.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 0758c9e42111d4aec99694c875e9badc +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect.png Binary files differnew file mode 100644 index 0000000..ba04f8f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect.png.meta new file mode 100644 index 0000000..dd858cf --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 5006aa4ede39e49198b851d98e267b5d +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png Binary files differnew file mode 100644 index 0000000..184a7f7 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png.meta new file mode 100644 index 0000000..511baaa --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_Normal.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 37972c32346084c13bfddb8c3dbed143 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_On.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_On.png Binary files differnew file mode 100644 index 0000000..6b8f130 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_On.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_On.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_On.png.meta new file mode 100644 index 0000000..3f50861 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/images/gridPivotSelect_On.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 7ea4fc739ffbb4af1a466f655bf1d178 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@1x.png Binary files differnew file mode 100644 index 0000000..d05c224 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@1x.png.meta new file mode 100644 index 0000000..fa00722 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 1986ec06d68774254928f44b896a3913 +timeCreated: 1498131401 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@2x.png Binary files differnew file mode 100644 index 0000000..b5813bd --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@2x.png.meta new file mode 100644 index 0000000..12dab6f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 623f6adf01f324cb7bc6aefe7f87d623 +timeCreated: 1498131297 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@1x.png Binary files differnew file mode 100644 index 0000000..ee1c0e4 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@1x.png.meta new file mode 100644 index 0000000..053aaab --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: d008deade2077407fbf14446df2547c9 +timeCreated: 1498131543 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@2x.png Binary files differnew file mode 100644 index 0000000..68fe2b5 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@2x.png.meta new file mode 100644 index 0000000..73d3262 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/infoButton_active@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 9b266e42522c048f6b62832985be51ed +timeCreated: 1498131543 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@1x.png Binary files differnew file mode 100644 index 0000000..9c23f91 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@1x.png.meta new file mode 100644 index 0000000..5fa6f2c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@1x.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: aaae516f9c5404f77a3e586cdd59695b +timeCreated: 1498137820 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@2x.png Binary files differnew file mode 100644 index 0000000..8289e02 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@2x.png.meta new file mode 100644 index 0000000..fcf3a21 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_closed@2x.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 6c38830c1556942fcb6ce893085d1daa +timeCreated: 1498137820 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@1x.png Binary files differnew file mode 100644 index 0000000..4ee59fd --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@1x.png.meta new file mode 100644 index 0000000..203cafa --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@1x.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: c43744025f7024e20b5fe880600d19a7 +timeCreated: 1498138222 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@2x.png Binary files differnew file mode 100644 index 0000000..861f8fe --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@2x.png.meta new file mode 100644 index 0000000..cdc3174 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/lock_open@2x.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 957d0fd6ae3494da9aed50c5d7d7ce4e +timeCreated: 1498138222 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox2.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox2.png Binary files differnew file mode 100644 index 0000000..982aacf --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox2.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox2.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox2.png.meta new file mode 100644 index 0000000..7b8a559 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox2.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 5d951d0a838a34f40ac2b9ce8968a7d6 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@1x.png Binary files differnew file mode 100644 index 0000000..8149b8b --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@1x.png.meta new file mode 100644 index 0000000..7b98371 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 7991166a167af4b4793b4fc8fcc3bfe2 +timeCreated: 1498136635 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@2x.png Binary files differnew file mode 100644 index 0000000..9e8843a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@2x.png.meta new file mode 100644 index 0000000..d102b63 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 9043fef44c60647b7a763eb86f912ba1 +timeCreated: 1498136635 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3_separator.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3_separator.png Binary files differnew file mode 100644 index 0000000..5b8357f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3_separator.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3_separator.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3_separator.png.meta new file mode 100644 index 0000000..5b48465 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/pixelBox3_separator.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 3a08de11a34c44da28de4c086fd13461 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@1x.png Binary files differnew file mode 100644 index 0000000..736c814 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@1x.png.meta new file mode 100644 index 0000000..37a5e0e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@1x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 5d7e9740bfd1d470180f5e4823171712 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@2x.png Binary files differnew file mode 100644 index 0000000..0d0025f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@2x.png.meta new file mode 100644 index 0000000..cab4be2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: f88ac1d30fa7144dd94337fce44b9239 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@1x.png Binary files differnew file mode 100644 index 0000000..5a2b2ed --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@1x.png.meta new file mode 100644 index 0000000..b2b9e6d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@1x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: f6b7bcad2476249879798d0ee64ea2e2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@2x.png Binary files differnew file mode 100644 index 0000000..c3b557e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@2x.png.meta new file mode 100644 index 0000000..ffc111c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/DarkSkin/simpleDeleteButton_on@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 14e87db4f581b4f8cb79da48d87e01ee +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin.meta new file mode 100644 index 0000000..43ff2c9 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f79a2f1eef89149908992172e1e91fb6 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/colorInterpolationBox.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/colorInterpolationBox.png Binary files differnew file mode 100644 index 0000000..2563ffa --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/colorInterpolationBox.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/colorInterpolationBox.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/colorInterpolationBox.png.meta new file mode 100644 index 0000000..7ab7865 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/colorInterpolationBox.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 9bf4f8f9d8795455bb87213dd56ed793 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@1x.png Binary files differnew file mode 100644 index 0000000..8bd150a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@1x.png.meta new file mode 100644 index 0000000..e808cdb --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 3240f334343ca4dee8239c16d2de57c6 +timeCreated: 1498135848 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@2x.png Binary files differnew file mode 100644 index 0000000..5a15224 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@2x.png.meta new file mode 100644 index 0000000..2e7ea6a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 6444e8eb74e6f40e0a966d1e26744d08 +timeCreated: 1498135848 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@1x.png Binary files differnew file mode 100644 index 0000000..d8b10e2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@1x.png.meta new file mode 100644 index 0000000..7dd1ac6 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: c051ffc737cd54d909137d2937e82930 +timeCreated: 1498135848 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@2x.png Binary files differnew file mode 100644 index 0000000..bf12997 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@2x.png.meta new file mode 100644 index 0000000..4a5df8d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/deleteButton_active@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 19e49615b2c8540fd8a11acd2a26c335 +timeCreated: 1498135848 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@1x.png Binary files differnew file mode 100644 index 0000000..14b12b8 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@1x.png.meta new file mode 100644 index 0000000..72df301 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 71ef598858974450ead310c33f29d5d3 +timeCreated: 1499339589 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@2x.png Binary files differnew file mode 100644 index 0000000..ae8c9ca --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@2x.png.meta new file mode 100644 index 0000000..a83dbb5 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 7e276a83ed42e4e3584a50b6084eef8d +timeCreated: 1499339218 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@1x.png Binary files differnew file mode 100644 index 0000000..0b17373 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@1x.png.meta new file mode 100644 index 0000000..2f14cff --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 3354fe2e1951d420fa49d8f4fec2954b +timeCreated: 1499339580 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@2x.png Binary files differnew file mode 100644 index 0000000..3effbaa --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@2x.png.meta new file mode 100644 index 0000000..3a25f4c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/editButton_active@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: f7ae6f90d33d043c684812513307ec16 +timeCreated: 1499339218 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@1x.png Binary files differnew file mode 100644 index 0000000..c37f01f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@1x.png.meta new file mode 100644 index 0000000..3355c30 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: c780955fc9d0f458abc0de8f2f9cedb2 +timeCreated: 1498135848 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@2x.png Binary files differnew file mode 100644 index 0000000..106c1bc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@2x.png.meta new file mode 100644 index 0000000..6baface --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_off@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: deb2afb942c3b42fbba8823da7f05894 +timeCreated: 1498135848 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@1x.png Binary files differnew file mode 100644 index 0000000..2252176 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@1x.png.meta new file mode 100644 index 0000000..c0131fa --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 455f4fe795672465c8a4e8db3c6b9ccb +timeCreated: 1498135848 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@2x.png Binary files differnew file mode 100644 index 0000000..97c06a1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@2x.png.meta new file mode 100644 index 0000000..90a53b7 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/gizmoButton_on@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 731ce0beec302410299a12fa1da2dc54 +timeCreated: 1498135848 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/headerBackground.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/headerBackground.png Binary files differnew file mode 100644 index 0000000..2005c5c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/headerBackground.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/headerBackground.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/headerBackground.png.meta new file mode 100644 index 0000000..23f4328 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/headerBackground.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 620f088d04c284b21939ce24996fdbee +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@1x.png Binary files differnew file mode 100644 index 0000000..81c818e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@1x.png.meta new file mode 100644 index 0000000..ca540c8 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@1x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: b1817d211ea3547f088cddf76f3e6647 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@2x.png Binary files differnew file mode 100644 index 0000000..4e32ccc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@2x.png.meta new file mode 100644 index 0000000..bd0c3fb --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_diameter@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 5a358b45ec6c34f20b9f792e1f259b4f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@1x.png Binary files differnew file mode 100644 index 0000000..dd1fbe4 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@1x.png.meta new file mode 100644 index 0000000..4f49dd2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@1x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: c3f63c474ba404e88a6a16a074cced39 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@2x.png Binary files differnew file mode 100644 index 0000000..0b0660d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@2x.png.meta new file mode 100644 index 0000000..6e22671 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/hex_width@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 6010a63a238ef4899872fe5bd998dbb5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@1x.png Binary files differnew file mode 100644 index 0000000..856cffd --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@1x.png.meta new file mode 100644 index 0000000..70af4b9 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: efb7b60811b9a4ec7b92ecfcaa9bcd0d +timeCreated: 1498135616 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@2x.png Binary files differnew file mode 100644 index 0000000..3fc60c0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@2x.png.meta new file mode 100644 index 0000000..cb49254 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 7ef0e648811f14f65b69c2df3f27de11 +timeCreated: 1498135616 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@1x.png Binary files differnew file mode 100644 index 0000000..698e746 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@1x.png.meta new file mode 100644 index 0000000..f51b6f2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 7604699b5bc8f4343b03cc4d0b603403 +timeCreated: 1498135616 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@2x.png Binary files differnew file mode 100644 index 0000000..5c0abe1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@2x.png.meta new file mode 100644 index 0000000..533c5d2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/infoButton_active@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 8acb97c3fcc694bf3b7d33b1ff321337 +timeCreated: 1498135616 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@1x.png Binary files differnew file mode 100644 index 0000000..cc87549 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@1x.png.meta new file mode 100644 index 0000000..c4f3e50 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@1x.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 5e0cd84e9d84642ac883c25ca8d667ac +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@2x.png Binary files differnew file mode 100644 index 0000000..f5e1bdc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@2x.png.meta new file mode 100644 index 0000000..6c2033c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_closed@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 7b229d059f89d49918aec1466c0c5819 +timeCreated: 1498138836 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@1x.png Binary files differnew file mode 100644 index 0000000..53e32e7 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@1x.png.meta new file mode 100644 index 0000000..eb817d4 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@1x.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 3805c157b9b38472684befb652c5d213 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@2x.png Binary files differnew file mode 100644 index 0000000..5645369 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@2x.png.meta new file mode 100644 index 0000000..fcd64e4 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/lock_open@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: d04d4a88875f842c88825d3d5b2b529c +timeCreated: 1498138836 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@1x.png Binary files differnew file mode 100644 index 0000000..53fb86b --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@1x.png.meta new file mode 100644 index 0000000..479408d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@1x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 86cd0618b10f3494c831ac9215649110 +timeCreated: 1498136947 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@2x.png Binary files differnew file mode 100644 index 0000000..0528ee8 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@2x.png.meta new file mode 100644 index 0000000..3c2d2f2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/pixelBox3@2x.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 5ed56a3e069cd4b5aa4360154acc026a +timeCreated: 1498136947 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_normal.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_normal.png Binary files differnew file mode 100644 index 0000000..28442e2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_normal.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_normal.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_normal.png.meta new file mode 100644 index 0000000..a61085d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_normal.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: fb3e1d793e4f0459f8b913d0d2d76e6c +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_on.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_on.png Binary files differnew file mode 100644 index 0000000..18b5bc0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_on.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_on.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_on.png.meta new file mode 100644 index 0000000..a3a8e84 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/reset_on.png.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: 990963b32226c440fb1a72e47e0ad7a2 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@1x.png Binary files differnew file mode 100644 index 0000000..a8a5741 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@1x.png.meta new file mode 100644 index 0000000..05b4137 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@1x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 168346d70f1fe4211ab22c360451c602 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@2x.png Binary files differnew file mode 100644 index 0000000..ef035a0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@2x.png.meta new file mode 100644 index 0000000..f5917f5 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 003032829f3e34ba3bbf576dbdbf4961 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@1x.png Binary files differnew file mode 100644 index 0000000..21a645d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@1x.png.meta new file mode 100644 index 0000000..6d166b8 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@1x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 3d1e3e2345df94db3be6501151e8db26 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@2x.png Binary files differnew file mode 100644 index 0000000..3ea3541 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@2x.png.meta new file mode 100644 index 0000000..520e0fd --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/LightSkin/simpleDeleteButton_on@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: e95696bf2c915483a965d5b8c7c41fb0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/grid.psd b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/grid.psd Binary files differnew file mode 100644 index 0000000..d857d98 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/grid.psd diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/grid.psd.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/grid.psd.meta new file mode 100644 index 0000000..3d4f89d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/grid.psd.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 527965173b00f43f9a1b8fc9e8c2e64b +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: 2 + aniso: 7 + mipBias: -1 + wrapMode: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + textureType: 5 + buildTargetSettings: [] diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images.meta new file mode 100644 index 0000000..0bddab1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e013c4948c1d4420b8fbf7ac7be8a498 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown.png Binary files differnew file mode 100644 index 0000000..0b5fa3c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown.png.meta new file mode 100644 index 0000000..eec1b5d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 12ea2fbedc5cc4bd191d795f44b2de75 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown_on.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown_on.png Binary files differnew file mode 100644 index 0000000..3f494ac --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown_on.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown_on.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown_on.png.meta new file mode 100644 index 0000000..65ed2f7 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowDown_on.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: d8951099054c64beaaa49d675d71cfcf +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp.png Binary files differnew file mode 100644 index 0000000..7fd0ad0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp.png.meta new file mode 100644 index 0000000..62bf0af --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: b1722c752c8754c5281b2efd6cf8477c +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp_on.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp_on.png Binary files differnew file mode 100644 index 0000000..af1461a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp_on.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp_on.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp_on.png.meta new file mode 100644 index 0000000..c9355c2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/ArrowUp_on.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 4c914fdaf554243fe9fb26afc323caef +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/astar_logo.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/astar_logo.png Binary files differnew file mode 100644 index 0000000..1be8f4c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/astar_logo.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/astar_logo.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/astar_logo.png.meta new file mode 100644 index 0000000..46287c9 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/astar_logo.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 1603401e2a100ba44b299ce8f603b5eb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/changelog_icon.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/changelog_icon.png Binary files differnew file mode 100644 index 0000000..d179343 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/changelog_icon.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/changelog_icon.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/changelog_icon.png.meta new file mode 100644 index 0000000..cb2fa9f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/changelog_icon.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: aac6bbff2ba09084f96968aa0649198f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/check_icon.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/check_icon.png Binary files differnew file mode 100644 index 0000000..bec4bcc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/check_icon.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/check_icon.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/check_icon.png.meta new file mode 100644 index 0000000..45eca96 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/check_icon.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 25a6bf057fb4ad5438e3fa0aa1b45789 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/documentation_icon.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/documentation_icon.png Binary files differnew file mode 100644 index 0000000..515c035 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/documentation_icon.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/documentation_icon.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/documentation_icon.png.meta new file mode 100644 index 0000000..75b60af --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/documentation_icon.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 2af1390027808444db42d140d1d437ae +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/educate_icon.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/educate_icon.png Binary files differnew file mode 100644 index 0000000..5c9f257 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/educate_icon.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/educate_icon.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/educate_icon.png.meta new file mode 100644 index 0000000..e2fc5e7 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/educate_icon.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: d49de811c1b5cbb449d74fda55ad6adc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect.png Binary files differnew file mode 100644 index 0000000..67c91da --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect.png.meta new file mode 100644 index 0000000..db6c14f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: b593db43606434498a7200f8281297d8 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_Normal.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_Normal.png Binary files differnew file mode 100644 index 0000000..d7bb55d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_Normal.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_Normal.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_Normal.png.meta new file mode 100644 index 0000000..77004bb --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_Normal.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 9de7a15ab4e1d48da9861247bc34226d +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_On.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_On.png Binary files differnew file mode 100644 index 0000000..4cd6f53 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_On.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_On.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_On.png.meta new file mode 100644 index 0000000..9730cdf --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/gridPivotSelect_On.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 3d11311e97436432e897a4bd0b5fbfac +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/samples_icon.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/samples_icon.png Binary files differnew file mode 100644 index 0000000..3854469 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/samples_icon.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/samples_icon.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/samples_icon.png.meta new file mode 100644 index 0000000..dc1a4a5 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/samples_icon.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: e10d07f341fb69b42acf8f2b2971270f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_01.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_01.png Binary files differnew file mode 100644 index 0000000..bb43e9f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_01.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_01.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_01.png.meta new file mode 100644 index 0000000..e8842c3 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_01.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: e4a6b67ac365349d8b7c358676aaf022 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_02.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_02.png Binary files differnew file mode 100644 index 0000000..978bdb2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_02.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_02.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_02.png.meta new file mode 100644 index 0000000..1710b74 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownArrow_02.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 0a9d941450e7c46cf8928d06762c2189 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_01.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_01.png Binary files differnew file mode 100644 index 0000000..c4e1966 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_01.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_01.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_01.png.meta new file mode 100644 index 0000000..635224d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_01.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 4cecafde1350347fd984baee5961a393 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_02.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_02.png Binary files differnew file mode 100644 index 0000000..41ea211 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_02.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_02.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_02.png.meta new file mode 100644 index 0000000..b658a45 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/images/upDownButtons_02.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: c7970d065c27b4d7c9ac2ff73b61733e +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_active.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_active.png Binary files differnew file mode 100644 index 0000000..18b1194 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_active.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_active.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_active.png.meta new file mode 100644 index 0000000..99c46b0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_active.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 1066e2a70f10b481984312db993dadc8 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_normal.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_normal.png Binary files differnew file mode 100644 index 0000000..0188980 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_normal.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_normal.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_normal.png.meta new file mode 100644 index 0000000..7db2609 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/linkButton_normal.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 53ee29e7cbeb545bcb1ca238a2736fb8 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox.png Binary files differnew file mode 100644 index 0000000..a87ee57 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox.png.meta new file mode 100644 index 0000000..5482a1d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: bdec0523f27864115b7b727c8f5d90e2 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox2.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox2.png Binary files differnew file mode 100644 index 0000000..9bb3204 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox2.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox2.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox2.png.meta new file mode 100644 index 0000000..eaaf91a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox2.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 2fa6580cc9f7f40919411d1ed85c6fe1 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 0 + textureType: 0 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox3_separator.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox3_separator.png Binary files differnew file mode 100644 index 0000000..2936760 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox3_separator.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox3_separator.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox3_separator.png.meta new file mode 100644 index 0000000..d7144f7 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/pixelBox3_separator.png.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: e101da2dcb7a14fa2aed1a65c384a99b +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@1x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@1x.png Binary files differnew file mode 100644 index 0000000..328ea39 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@1x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@1x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@1x.png.meta new file mode 100644 index 0000000..ccde3bb --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@1x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: a4bb5812f98bf40a68d9c1a69ad860cb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@2x.png b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@2x.png Binary files differnew file mode 100644 index 0000000..acd7ece --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@2x.png diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@2x.png.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@2x.png.meta new file mode 100644 index 0000000..6515302 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/scene_box@2x.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: f834e7df6f42446b59c83dca1e5bd098 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/tooltips.tsv b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/tooltips.tsv new file mode 100644 index 0000000..78fbe91 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/tooltips.tsv @@ -0,0 +1,4072 @@ +AIMoveSystem.cs.GCHandle <undefined> +AstarPath.AstarDistribution astarpath.html#AstarDistribution Information about where the package was downloaded. +AstarPath.Branch astarpath.html#Branch Which branch of the A* Pathfinding Project is this release. \n\nUsed when checking for updates so that users of the development versions can get notifications of development updates. +AstarPath.Distribution astarpath.html#Distribution Used by the editor to guide the user to the correct place to download updates. +AstarPath.IsAnyGraphUpdateInProgress astarpath.html#IsAnyGraphUpdateInProgress Returns if any graph updates are being calculated right now. \n\n[more in online documentation] +AstarPath.IsAnyGraphUpdateQueued astarpath.html#IsAnyGraphUpdateQueued Returns if any graph updates are waiting to be applied. \n\n[more in online documentation] +AstarPath.IsAnyWorkItemInProgress astarpath.html#IsAnyWorkItemInProgress Returns if any work items are in progress right now. \n\n[more in online documentation] +AstarPath.IsInsideWorkItem astarpath.html#IsInsideWorkItem Returns if this code is currently being exectuted inside a work item. \n\n[more in online documentation]\nIn contrast to IsAnyWorkItemInProgress this is only true when work item code is being executed, it is not true in-between the updates to a work item that takes several frames to complete. +AstarPath.IsUsingMultithreading astarpath.html#IsUsingMultithreading Returns whether or not multithreading is used. \n\n\n[more in online documentation] +AstarPath.NNConstraintNone astarpath.html#NNConstraintNone Cached NNConstraint.None to avoid unnecessary allocations. \n\nThis should ideally be fixed by making NNConstraint an immutable class/struct. +AstarPath.NumParallelThreads astarpath.html#NumParallelThreads Number of parallel pathfinders. \n\nReturns the number of concurrent processes which can calculate paths at once. When using multithreading, this will be the number of threads, if not using multithreading it is always 1 (since only 1 coroutine is used). \n\n[more in online documentation] +AstarPath.On65KOverflow astarpath.html#On65KOverflow Called when <b>pathID</b> overflows 65536 and resets back to zero. \n\n[more in online documentation] +AstarPath.OnAwakeSettings astarpath.html#OnAwakeSettings Called on Awake before anything else is done. \n\nThis is called at the start of the Awake call, right after active has been set, but this is the only thing that has been done.\n\nUse this when you want to set up default settings for an AstarPath component created during runtime since some settings can only be changed in Awake (such as multithreading related stuff) <b>[code in online documentation]</b> +AstarPath.OnGraphPostScan astarpath.html#OnGraphPostScan Called for each graph after they have been scanned. \n\nAll other graphs might not have been scanned yet. In most cases it is recommended to create a custom class which inherits from Pathfinding.GraphModifier instead. +AstarPath.OnGraphPreScan astarpath.html#OnGraphPreScan Called for each graph before they are scanned. \n\nIn most cases it is recommended to create a custom class which inherits from Pathfinding.GraphModifier instead. +AstarPath.OnGraphsUpdated astarpath.html#OnGraphsUpdated Called when any graphs are updated. \n\nRegister to for example recalculate the path whenever a graph changes. In most cases it is recommended to create a custom class which inherits from Pathfinding.GraphModifier instead. +AstarPath.OnLatePostScan astarpath.html#OnLatePostScan Called after scanning has completed fully. \n\nThis is called as the last thing in the Scan function. In most cases it is recommended to create a custom class which inherits from Pathfinding.GraphModifier instead. +AstarPath.OnPathPostSearch astarpath.html#OnPathPostSearch Called for each path after searching. \n\nBe careful when using multithreading since this will be called from a different thread. +AstarPath.OnPathPreSearch astarpath.html#OnPathPreSearch Called for each path before searching. \n\nBe careful when using multithreading since this will be called from a different thread. +AstarPath.OnPathsCalculated astarpath.html#OnPathsCalculated Called right after callbacks on paths have been called. \n\nA path's callback function runs on the main thread when the path has been calculated. This is done in batches for all paths that have finished their calculation since the last frame. This event will trigger right after a batch of callbacks have been called.\n\nIf you do not want to use individual path callbacks, you can use this instead to poll all pending paths and see which ones have completed. This is better than doing it in e.g. the Update loop, because here you will have a guarantee that all calculated paths are still valid. Immediately after this callback has finished, other things may invalidate calculated paths, like for example graph updates.\n\nThis is used by the ECS integration to update all entities' pending paths, without having to store a callback for each agent, and also to avoid the ECS synchronization overhead that having individual callbacks would entail. +AstarPath.OnPostScan astarpath.html#OnPostScan Called after scanning. \n\nThis is called before applying links, flood-filling the graphs and other post processing. In most cases it is recommended to create a custom class which inherits from Pathfinding.GraphModifier instead. +AstarPath.OnPreScan astarpath.html#OnPreScan Called before starting the scanning. \n\nIn most cases it is recommended to create a custom class which inherits from Pathfinding.GraphModifier instead. +AstarPath.Version astarpath.html#Version The version number for the A* Pathfinding Project. +AstarPath.active astarpath.html#active Returns the active AstarPath object in the scene. \n\n[more in online documentation] +AstarPath.batchGraphUpdates astarpath.html#batchGraphUpdates Throttle graph updates and batch them to improve performance. \n\nIf toggled, graph updates will batched and executed less often (specified by graphUpdateBatchingInterval).\n\nThis can have a positive impact on pathfinding throughput since the pathfinding threads do not need to be stopped as often, and it reduces the overhead per graph update. All graph updates are still applied however, they are just batched together so that more of them are applied at the same time.\n\nHowever do not use this if you want minimal latency between a graph update being requested and it being applied.\n\nThis only applies to graph updates requested using the UpdateGraphs method. Not those requested using AddWorkItem.\n\nIf you want to apply graph updates immediately at some point, you can call FlushGraphUpdates.\n\n[more in online documentation] +AstarPath.colorSettings astarpath.html#colorSettings Reference to the color settings for this AstarPath object. \n\nColor settings include for example which color the nodes should be in, in the sceneview. +AstarPath.cs.Thread <undefined> +AstarPath.data astarpath.html#data Holds all graph data. +AstarPath.debugFloor astarpath.html#debugFloor Low value to use for certain debugMode modes. \n\nFor example if debugMode is set to G, this value will determine when the node will be completely red.\n\n[more in online documentation] +AstarPath.debugMode astarpath.html#debugMode The mode to use for drawing nodes in the sceneview. \n\n[more in online documentation] +AstarPath.debugPathData astarpath.html#debugPathData The path to debug using gizmos. \n\nThis is the path handler used to calculate the last path. It is used in the editor to draw debug information using gizmos. +AstarPath.debugPathID astarpath.html#debugPathID The path ID to debug using gizmos. +AstarPath.debugRoof astarpath.html#debugRoof High value to use for certain debugMode modes. \n\nFor example if debugMode is set to G, this value will determine when the node will be completely green.\n\nFor the penalty debug mode, the nodes will be colored green when they have a penalty less than debugFloor and red when their penalty is greater or equal to this value and something between red and green otherwise.\n\n[more in online documentation] +AstarPath.euclideanEmbedding astarpath.html#euclideanEmbedding Holds settings for heuristic optimization. \n\n[more in online documentation]\n [more in online documentation] +AstarPath.fullGetNearestSearch astarpath.html#fullGetNearestSearch Do a full GetNearest search for all graphs. \n\nAdditional searches will normally only be done on the graph which in the first fast search seemed to have the closest node. With this setting on, additional searches will be done on all graphs since the first check is not always completely accurate.\n\nMore technically: GetNearestForce on all graphs will be called if true, otherwise only on the one graph which's GetNearest search returned the best node.\n\nUsually faster when disabled, but higher quality searches when enabled. \n\n[more in online documentation] +AstarPath.graphDataLock astarpath.html#graphDataLock Global read-write lock for graph data. \n\nGraph data is always consistent from the main-thread's perspective, but if you are using jobs to read from graph data, you may need this.\n\nA write lock is held automatically...\n- During graph updates. During async graph updates, the lock is only held once per frame while the graph update is actually running, not for the whole duration.\n\n- During work items. Async work items work similarly to graph updates, the lock is only held once per frame while the work item is actually running.\n\n- When GraphModifier events run.\n\n- When graph related callbacks, such as OnGraphsUpdated, run.\n\n- During the last step of a graph's scanning process. See ScanningStage.\n\n\nTo use e.g. AstarPath.active.GetNearest from an ECS job, you'll need to acquire a read lock first, and make sure the lock is only released when the job is finished.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +AstarPath.graphUpdateBatchingInterval astarpath.html#graphUpdateBatchingInterval Minimum number of seconds between each batch of graph updates. \n\nIf batchGraphUpdates is true, this defines the minimum number of seconds between each batch of graph updates.\n\nThis can have a positive impact on pathfinding throughput since the pathfinding threads do not need to be stopped as often, and it reduces the overhead per graph update. All graph updates are still applied however, they are just batched together so that more of them are applied at the same time.\n\nDo not use this if you want minimal latency between a graph update being requested and it being applied.\n\nThis only applies to graph updates requested using the UpdateGraphs method. Not those requested using AddWorkItem.\n\n[more in online documentation] +AstarPath.graphUpdateRoutineRunning astarpath.html#graphUpdateRoutineRunning +AstarPath.graphUpdates astarpath.html#graphUpdates Processes graph updates. +AstarPath.graphUpdatesWorkItemAdded astarpath.html#graphUpdatesWorkItemAdded Makes sure QueueGraphUpdates will not queue multiple graph update orders. +AstarPath.graphs astarpath.html#graphs Shortcut to Pathfinding.AstarData.graphs. +AstarPath.hasScannedGraphAtStartup astarpath.html#hasScannedGraphAtStartup +AstarPath.heuristic astarpath.html#heuristic The distance function to use as a heuristic. \n\nThe heuristic, often referred to as just 'H' is the estimated cost from a node to the target. Different heuristics affect how the path picks which one to follow from multiple possible with the same length \n\n[more in online documentation] +AstarPath.heuristicScale astarpath.html#heuristicScale The scale of the heuristic. \n\nIf a value lower than 1 is used, the pathfinder will search more nodes (slower). If 0 is used, the pathfinding algorithm will be reduced to dijkstra's algorithm. This is equivalent to setting heuristic to None. If a value larger than 1 is used the pathfinding will (usually) be faster because it expands fewer nodes, but the paths may no longer be the optimal (i.e the shortest possible paths).\n\nUsually you should leave this to the default value of 1.\n\n[more in online documentation] +AstarPath.hierarchicalGraph astarpath.html#hierarchicalGraph Holds a hierarchical graph to speed up some queries like if there is a path between two nodes. +AstarPath.inGameDebugPath astarpath.html#inGameDebugPath Debug string from the last completed path. \n\nWill be updated if logPathResults == PathLog.InGame +AstarPath.isScanning astarpath.html#isScanning Set while any graphs are being scanned. \n\nIt will be true up until the FloodFill is done.\n\n[more in online documentation]\nUsed to better support Graph Update Objects called for example in OnPostScan\n\n[more in online documentation] +AstarPath.isScanningBacking astarpath.html#isScanningBacking Backing field for isScanning. \n\nCannot use an auto-property because they cannot be marked with System.NonSerialized. +AstarPath.lastGraphUpdate astarpath.html#lastGraphUpdate Time the last graph update was done. \n\nUsed to group together frequent graph updates to batches +AstarPath.lastScanTime astarpath.html#lastScanTime The time it took for the last call to Scan() to complete. \n\nUsed to prevent automatically rescanning the graphs too often (editor only) +AstarPath.logPathResults astarpath.html#logPathResults The amount of debugging messages. \n\nUse less debugging to improve performance (a bit) or just to get rid of the Console spamming. Use more debugging (heavy) if you want more information about what the pathfinding scripts are doing. The InGame option will display the latest path log using in-game GUI.\n\n <b>[image in online documentation]</b> +AstarPath.manualDebugFloorRoof astarpath.html#manualDebugFloorRoof If set, the debugFloor and debugRoof values will not be automatically recalculated. \n\n[more in online documentation] +AstarPath.maxFrameTime astarpath.html#maxFrameTime Max number of milliseconds to spend each frame for pathfinding. \n\nAt least 500 nodes will be searched each frame (if there are that many to search). When using multithreading this value is irrelevant. +AstarPath.maxNearestNodeDistance astarpath.html#maxNearestNodeDistance Maximum distance to search for nodes. \n\nWhen searching for the nearest node to a point, this is the limit (in world units) for how far away it is allowed to be.\n\nThis is relevant if you try to request a path to a point that cannot be reached and it thus has to search for the closest node to that point which can be reached (which might be far away). If it cannot find a node within this distance then the path will fail.\n\n <b>[image in online documentation]</b>\n\n[more in online documentation] +AstarPath.maxNearestNodeDistanceSqr astarpath.html#maxNearestNodeDistanceSqr Max Nearest Node Distance Squared. \n\n[more in online documentation] +AstarPath.navmeshUpdates astarpath.html#navmeshUpdates Handles navmesh cuts. \n\n[more in online documentation] +AstarPath.nextFreePathID astarpath.html#nextFreePathID The next unused Path ID. \n\nIncremented for every call to GetNextPathID +AstarPath.nodeStorage astarpath.html#nodeStorage Holds global node data that cannot be stored in individual graphs. +AstarPath.offMeshLinks astarpath.html#offMeshLinks Holds all active off-mesh links. +AstarPath.pathProcessor astarpath.html#pathProcessor Holds all paths waiting to be calculated and calculates them. +AstarPath.pathReturnQueue astarpath.html#pathReturnQueue Holds all completed paths waiting to be returned to where they were requested. +AstarPath.prioritizeGraphs astarpath.html#prioritizeGraphs Prioritize graphs. \n\nGraphs will be prioritized based on their order in the inspector. The first graph which has a node closer than prioritizeGraphsLimit will be chosen instead of searching all graphs.\n\n[more in online documentation] +AstarPath.prioritizeGraphsLimit astarpath.html#prioritizeGraphsLimit Distance limit for prioritizeGraphs. \n\n[more in online documentation] +AstarPath.redrawScope astarpath.html#redrawScope +AstarPath.scanOnStartup astarpath.html#scanOnStartup If true, all graphs will be scanned during Awake. \n\nIf you disable this, you will have to call AstarPath.active.Scan() yourself to enable pathfinding. Alternatively you could load a saved graph from a file.\n\nIf a startup cache has been generated (see Saving and Loading Graphs), it always takes priority to load that instead of scanning the graphs.\n\nThis can be useful to enable if you want to scan your graphs asynchronously, or if you have a procedural world which has not been created yet at the start of the game.\n\n[more in online documentation] +AstarPath.showGraphs astarpath.html#showGraphs Shows or hides graph inspectors. \n\nUsed internally by the editor +AstarPath.showNavGraphs astarpath.html#showNavGraphs Visualize graphs in the scene view (editor only). \n\n <b>[image in online documentation]</b> +AstarPath.showSearchTree astarpath.html#showSearchTree If enabled, nodes will draw a line to their 'parent'. \n\nThis will show the search tree for the latest path.\n\n[more in online documentation] +AstarPath.showUnwalkableNodes astarpath.html#showUnwalkableNodes Toggle to show unwalkable nodes. \n\n[more in online documentation] +AstarPath.tagNames astarpath.html#tagNames Stored tag names. \n\n[more in online documentation] +AstarPath.threadCount astarpath.html#threadCount Number of pathfinding threads to use. \n\nMultithreading puts pathfinding in another thread, this is great for performance on 2+ core computers since the framerate will barely be affected by the pathfinding at all.\n- None indicates that the pathfinding is run in the Unity thread as a coroutine\n\n- Automatic will try to adjust the number of threads to the number of cores and memory on the computer. Less than 512mb of memory or a single core computer will make it revert to using no multithreading.\n\n\nIt is recommended that you use one of the "Auto" settings that are available. The reason is that even if your computer might be beefy and have 8 cores. Other computers might only be quad core or dual core in which case they will not benefit from more than 1 or 3 threads respectively (you usually want to leave one core for the unity thread). If you use more threads than the number of cores on the computer it is mostly just wasting memory, it will not run any faster. The extra memory usage is not trivially small. Each thread needs to keep a small amount of data for each node in all the graphs. It is not the full graph data but it is proportional to the number of nodes. The automatic settings will inspect the machine it is running on and use that to determine the number of threads so that no memory is wasted.\n\nThe exception is if you only have one (or maybe two characters) active at time. Then you should probably just go with one thread always since it is very unlikely that you will need the extra throughput given by more threads. Keep in mind that more threads primarily increases throughput by calculating different paths on different threads, it will not calculate individual paths any faster.\n\nNote that if you are modifying the pathfinding core scripts or if you are directly modifying graph data without using any of the safe wrappers (like AddWorkItem) multithreading can cause strange errors and pathfinding stopping to work if you are not careful. For basic usage (not modding the pathfinding core) it should be safe.\n\n[more in online documentation]\n\n\n [more in online documentation] +AstarPath.unwalkableNodeDebugSize astarpath.html#unwalkableNodeDebugSize Size of the red cubes shown in place of unwalkable nodes. \n\n[more in online documentation] +AstarPath.waitForPathDepth astarpath.html#waitForPathDepth +AstarPath.workItemLock astarpath.html#workItemLock Held if any work items are currently queued. +AstarPath.workItems astarpath.html#workItems Processes work items. +BlockableChannel.cs.PopState <undefined> +FollowerControlSystem.cs.GCHandle <undefined> +GridGraph.cs.Math <undefined> +GridNode.cs.PREALLOCATE_NODES <undefined> +GridNodeBase.cs.PREALLOCATE_NODES <undefined> +JobRepairPath.cs.GCHandle <undefined> +LevelGridNode.cs.ASTAR_LEVELGRIDNODE_FEW_LAYERS <undefined> +Pathfinding.ABPath.NNConstraintNone abpath.html#NNConstraintNone Cached NNConstraint.None to reduce allocations. +Pathfinding.ABPath.calculatePartial abpath.html#calculatePartial Calculate partial path if the target node cannot be reached. \n\nIf the target node cannot be reached, the node which was closest (given by heuristic) will be chosen as target node and a partial path will be returned. This only works if a heuristic is used (which is the default). If a partial path is found, CompleteState is set to Partial. \n\n[more in online documentation]\nThe endNode and endPoint will be modified and be set to the node which ends up being closest to the target.\n\n[more in online documentation] +Pathfinding.ABPath.cost abpath.html#cost Total cost of this path as used by the pathfinding algorithm. \n\nThe cost is influenced by both the length of the path, as well as any tags or penalties on the nodes. By default, the cost to move 1 world unit is Int3.Precision.\n\nIf the path failed, the cost will be set to zero.\n\n[more in online documentation] +Pathfinding.ABPath.endNode abpath.html#endNode End node of the path. +Pathfinding.ABPath.endPoint abpath.html#endPoint End point of the path. \n\nThis is the closest point on the endNode to originalEndPoint +Pathfinding.ABPath.endPointKnownBeforeCalculation abpath.html#endPointKnownBeforeCalculation True if this path type has a well defined end point, even before calculation starts. \n\nThis is for example true for the ABPath type, but false for the RandomPath type. +Pathfinding.ABPath.endingCondition abpath.html#endingCondition Optional ending condition for the path. \n\nThe ending condition determines when the path has been completed. Can be used to for example mark a path as complete when it is within a specific distance from the target.\n\nIf ending conditions are used that are not centered around the endpoint of the path, then you should also set the heuristic to None to ensure the path is still optimal. The performance impact of setting the heuristic to None is quite large, so you might want to try to run it with the default heuristic to see if the path is good enough for your use case anyway.\n\nIf null, no custom ending condition will be used. This means that the path will end when the target node has been reached.\n\n[more in online documentation] +Pathfinding.ABPath.hasEndPoint abpath.html#hasEndPoint Determines if a search for an end node should be done. \n\nSet by different path types. \n\n[more in online documentation] +Pathfinding.ABPath.originalEndPoint abpath.html#originalEndPoint End Point exactly as in the path request. +Pathfinding.ABPath.originalStartPoint abpath.html#originalStartPoint Start Point exactly as in the path request. +Pathfinding.ABPath.partialBestTargetGScore abpath.html#partialBestTargetGScore +Pathfinding.ABPath.partialBestTargetHScore abpath.html#partialBestTargetHScore +Pathfinding.ABPath.partialBestTargetPathNodeIndex abpath.html#partialBestTargetPathNodeIndex Current best target for the partial path. \n\nThis is the node with the lowest H score. +Pathfinding.ABPath.startNode abpath.html#startNode Start node of the path. +Pathfinding.ABPath.startPoint abpath.html#startPoint Start point of the path. \n\nThis is the closest point on the startNode to originalStartPoint +Pathfinding.ABPathEndingCondition.abPath abpathendingcondition.html#abPath Path which this ending condition is used on. \n\nSame as path but downcasted to ABPath +Pathfinding.AIBase.ShapeGizmoColor aibase.html#ShapeGizmoColor +Pathfinding.AIBase.accumulatedMovementDelta aibase.html#accumulatedMovementDelta Accumulated movement deltas from the Move method. +Pathfinding.AIBase.autoRepath aibase.html#autoRepath Determines how the agent recalculates its path automatically. \n\nThis corresponds to the settings under the "Recalculate Paths Automatically" field in the inspector. +Pathfinding.AIBase.canMove aibase.html#canMove Enables or disables movement completely. \n\nIf you want the agent to stand still, but still react to local avoidance and use gravity: use isStopped instead.\n\nThis is also useful if you want to have full control over when the movement calculations run. Take a look at MovementUpdate\n\n[more in online documentation] +Pathfinding.AIBase.canSearch aibase.html#canSearch Enables or disables recalculating the path at regular intervals. \n\nSetting this to false does not stop any active path requests from being calculated or stop it from continuing to follow the current path.\n\nNote that this only disables automatic path recalculations. If you call the SearchPath() method a path will still be calculated.\n\n[more in online documentation] +Pathfinding.AIBase.canSearchCompability aibase.html#canSearchCompability +Pathfinding.AIBase.centerOffset aibase.html#centerOffset Offset along the Y coordinate for the ground raycast start position. \n\nNormally the pivot of the character is at the character's feet, but you usually want to fire the raycast from the character's center, so this value should be half of the character's height.\n\nA green gizmo line will be drawn upwards from the pivot point of the character to indicate where the raycast will start.\n\n[more in online documentation] +Pathfinding.AIBase.centerOffsetCompatibility aibase.html#centerOffsetCompatibility +Pathfinding.AIBase.controller aibase.html#controller Cached CharacterController component. +Pathfinding.AIBase.desiredVelocity aibase.html#desiredVelocity Velocity that this agent wants to move with. \n\nIncludes gravity and local avoidance if applicable. In world units per second.\n\n[more in online documentation] +Pathfinding.AIBase.desiredVelocityWithoutLocalAvoidance aibase.html#desiredVelocityWithoutLocalAvoidance Velocity that this agent wants to move with before taking local avoidance into account. \n\nIncludes gravity. In world units per second.\n\nSetting this property will set the current velocity that the agent is trying to move with, including gravity. This can be useful if you want to make the agent come to a complete stop in a single frame or if you want to modify the velocity in some way.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation]\n\n\nIf you are not using local avoidance then this property will in almost all cases be identical to desiredVelocity plus some noise due to floating point math.\n\n[more in online documentation] +Pathfinding.AIBase.destination aibase.html#destination Position in the world that this agent should move to. \n\nIf no destination has been set yet, then (+infinity, +infinity, +infinity) will be returned.\n\nNote that setting this property does not immediately cause the agent to recalculate its path. So it may take some time before the agent starts to move towards this point. Most movement scripts have a <b>repathRate</b> field which indicates how often the agent looks for a new path. You can also call the SearchPath method to immediately start to search for a new path. Paths are calculated asynchronously so when an agent starts to search for path it may take a few frames (usually 1 or 2) until the result is available. During this time the pathPending property will return true.\n\nIf you are setting a destination and then want to know when the agent has reached that destination then you could either use reachedDestination (recommended) or check both pathPending and reachedEndOfPath. Check the documentation for the respective fields to learn about their differences.\n\n<b>[code in online documentation]</b><b>[code in online documentation]</b> +Pathfinding.AIBase.destinationBackingField aibase.html#destinationBackingField Backing field for destination. +Pathfinding.AIBase.enableRotation aibase.html#enableRotation If true, the AI will rotate to face the movement direction. \n\n[more in online documentation] +Pathfinding.AIBase.endOfPath aibase.html#endOfPath End point of path the agent is currently following. \n\nIf the agent has no path (or it might not be calculated yet), this will return the destination instead. If the agent has no destination it will return the agent's current position.\n\nThe end of the path is usually identical or very close to the destination, but it may differ if the path for example was blocked by a wall so that the agent couldn't get any closer.\n\nThis is only updated when the path is recalculated. +Pathfinding.AIBase.endReachedDistance aibase.html#endReachedDistance Distance to the end point to consider the end of path to be reached. \n\nWhen the end of the path is within this distance then IAstarAI.reachedEndOfPath will return true. When the destination is within this distance then IAstarAI.reachedDestination will return true.\n\nNote that the destination may not be reached just because the end of the path was reached. The destination may not be reachable at all.\n\n[more in online documentation] +Pathfinding.AIBase.gravity aibase.html#gravity Gravity to use. \n\nIf set to (NaN,NaN,NaN) then Physics.Gravity (configured in the Unity project settings) will be used. If set to (0,0,0) then no gravity will be used and no raycast to check for ground penetration will be performed. +Pathfinding.AIBase.groundMask aibase.html#groundMask Layer mask to use for ground placement. \n\nMake sure this does not include the layer of any colliders attached to this gameobject.\n\n[more in online documentation] +Pathfinding.AIBase.height aibase.html#height Height of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nThis value is currently only used if an RVOController is attached to the same GameObject, otherwise it is only used for drawing nice gizmos in the scene view. However since the height value is used for some things, the radius field is always visible for consistency and easier visualization of the character. That said, it may be used for something in a future release.\n\n[more in online documentation] +Pathfinding.AIBase.isStopped aibase.html#isStopped Gets or sets if the agent should stop moving. \n\nIf this is set to true the agent will immediately start to slow down as quickly as it can to come to a full stop. The agent will still react to local avoidance and gravity (if applicable), but it will not try to move in any particular direction.\n\nThe current path of the agent will not be cleared, so when this is set to false again the agent will continue moving along the previous path.\n\nThis is a purely user-controlled parameter, so for example it is not set automatically when the agent stops moving because it has reached the target. Use reachedEndOfPath for that.\n\nIf this property is set to true while the agent is traversing an off-mesh link (RichAI script only), then the agent will continue traversing the link and stop once it has completed it.\n\n[more in online documentation]\nThe steeringTarget property will continue to indicate the point which the agent would move towards if it would not be stopped. +Pathfinding.AIBase.lastDeltaPosition aibase.html#lastDeltaPosition Amount which the character wants or tried to move with during the last frame. +Pathfinding.AIBase.lastDeltaTime aibase.html#lastDeltaTime Delta time used for movement during the last frame. +Pathfinding.AIBase.lastRaycastHit aibase.html#lastRaycastHit Hit info from the last raycast done for ground placement. \n\nWill not update unless gravity is used (if no gravity is used, then raycasts are disabled).\n\n[more in online documentation] +Pathfinding.AIBase.lastRepath aibase.html#lastRepath Time when the last path request was started. +Pathfinding.AIBase.maxSpeed aibase.html#maxSpeed Max speed in world units per second. +Pathfinding.AIBase.movementPlane aibase.html#movementPlane Plane which this agent is moving in. \n\nThis is used to convert between world space and a movement plane to make it possible to use this script in both 2D games and 3D games. +Pathfinding.AIBase.onPathComplete aibase.html#onPathComplete Cached delegate for the OnPathComplete method. \n\nCaching this avoids allocating a new one every time a path is calculated, which reduces GC pressure. +Pathfinding.AIBase.onSearchPath aibase.html#onSearchPath Called when the agent recalculates its path. \n\nThis is called both for automatic path recalculations (see canSearch) and manual ones (see SearchPath).\n\n[more in online documentation] +Pathfinding.AIBase.orientation aibase.html#orientation Determines which direction the agent moves in. \n\nFor 3D games you most likely want the ZAxisIsForward option as that is the convention for 3D games. For 2D games you most likely want the YAxisIsForward option as that is the convention for 2D games.\n\nUsing the YAxisForward option will also allow the agent to assume that the movement will happen in the 2D (XY) plane instead of the XZ plane if it does not know. This is important only for the point graph which does not have a well defined up direction. The other built-in graphs (e.g the grid graph) will all tell the agent which movement plane it is supposed to use.\n\n <b>[image in online documentation]</b> +Pathfinding.AIBase.position aibase.html#position Position of the agent. \n\nIn world space. If updatePosition is true then this value is idential to transform.position. \n\n[more in online documentation] +Pathfinding.AIBase.prevPosition1 aibase.html#prevPosition1 Position of the character at the end of the last frame. +Pathfinding.AIBase.prevPosition2 aibase.html#prevPosition2 Position of the character at the end of the frame before the last frame. +Pathfinding.AIBase.radius aibase.html#radius Radius of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nNote that this does not affect pathfinding in any way. The graph used completely determines where the agent can move.\n\n[more in online documentation] +Pathfinding.AIBase.reachedDestination aibase.html#reachedDestination True if the ai has reached the destination. \n\nThis is a best effort calculation to see if the destination has been reached. For the AIPath/RichAI scripts, this is when the character is within AIPath.endReachedDistance world units from the destination. For the AILerp script it is when the character is at the destination (±a very small margin).\n\nThis value will be updated immediately when the destination is changed (in contrast to reachedEndOfPath), however since path requests are asynchronous it will use an approximation until it sees the real path result. What this property does is to check the distance to the end of the current path, and add to that the distance from the end of the path to the destination (i.e. is assumes it is possible to move in a straight line between the end of the current path to the destination) and then checks if that total distance is less than AIPath.endReachedDistance. This property is therefore only a best effort, but it will work well for almost all use cases.\n\nFurthermore it will not report that the destination is reached if the destination is above the head of the character or more than half the height of the character below its feet (so if you have a multilevel building, it is important that you configure the height of the character correctly).\n\nThe cases which could be problematic are if an agent is standing next to a very thin wall and the destination suddenly changes to the other side of that thin wall. During the time that it takes for the path to be calculated the agent may see itself as alredy having reached the destination because the destination only moved a very small distance (the wall was thin), even though it may actually be quite a long way around the wall to the other side.\n\nIn contrast to reachedEndOfPath, this property is immediately updated when the destination is changed.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.AIBase.repathRate aibase.html#repathRate Determines how often the agent will search for new paths (in seconds). \n\nThe agent will plan a new path to the target every N seconds.\n\nIf you have fast moving targets or AIs, you might want to set it to a lower value.\n\n[more in online documentation]\n\n\n\n[more in online documentation] +Pathfinding.AIBase.repathRateCompatibility aibase.html#repathRateCompatibility +Pathfinding.AIBase.rigid aibase.html#rigid Cached Rigidbody component. +Pathfinding.AIBase.rigid2D aibase.html#rigid2D Cached Rigidbody component. +Pathfinding.AIBase.rotation aibase.html#rotation Rotation of the agent. \n\nIf updateRotation is true then this value is identical to transform.rotation. +Pathfinding.AIBase.rotationIn2D aibase.html#rotationIn2D If true, the forward axis of the character will be along the Y axis instead of the Z axis. \n\n[more in online documentation] +Pathfinding.AIBase.rvoController aibase.html#rvoController Cached RVOController component. +Pathfinding.AIBase.rvoDensityBehavior aibase.html#rvoDensityBehavior Controls if the agent slows down to a stop if the area around the destination is crowded. \n\nUsing this module requires that local avoidance is used: i.e. that an RVOController is attached to the GameObject.\n\n[more in online documentation]\n [more in online documentation] +Pathfinding.AIBase.seeker aibase.html#seeker Cached Seeker component. +Pathfinding.AIBase.shouldRecalculatePath aibase.html#shouldRecalculatePath True if the path should be automatically recalculated as soon as possible. +Pathfinding.AIBase.simulatedPosition aibase.html#simulatedPosition Position of the agent. \n\nIf updatePosition is true then this value will be synchronized every frame with Transform.position. +Pathfinding.AIBase.simulatedRotation aibase.html#simulatedRotation Rotation of the agent. \n\nIf updateRotation is true then this value will be synchronized every frame with Transform.rotation. +Pathfinding.AIBase.startHasRun aibase.html#startHasRun True if the Start method has been executed. \n\nUsed to test if coroutines should be started in OnEnable to prevent calculating paths in the awake stage (or rather before start on frame 0). +Pathfinding.AIBase.target aibase.html#target Target to move towards. \n\nThe AI will try to follow/move towards this target. It can be a point on the ground where the player has clicked in an RTS for example, or it can be the player object in a zombie game.\n\n[more in online documentation] +Pathfinding.AIBase.targetCompatibility aibase.html#targetCompatibility +Pathfinding.AIBase.tr aibase.html#tr Cached Transform component. +Pathfinding.AIBase.updatePosition aibase.html#updatePosition Determines if the character's position should be coupled to the Transform's position. \n\nIf false then all movement calculations will happen as usual, but the object that this component is attached to will not move instead only the position property will change.\n\nThis is useful if you want to control the movement of the character using some other means such as for example root motion but still want the AI to move freely. \n\n[more in online documentation] +Pathfinding.AIBase.updateRotation aibase.html#updateRotation Determines if the character's rotation should be coupled to the Transform's rotation. \n\nIf false then all movement calculations will happen as usual, but the object that this component is attached to will not rotate instead only the rotation property will change.\n\n[more in online documentation] +Pathfinding.AIBase.usingGravity aibase.html#usingGravity Indicates if gravity is used during this frame. +Pathfinding.AIBase.velocity aibase.html#velocity Actual velocity that the agent is moving with. \n\nIn world units per second.\n\n[more in online documentation] +Pathfinding.AIBase.velocity2D aibase.html#velocity2D Current desired velocity of the agent (does not include local avoidance and physics). \n\nLies in the movement plane. +Pathfinding.AIBase.verticalVelocity aibase.html#verticalVelocity Velocity due to gravity. \n\nPerpendicular to the movement plane.\n\nWhen the agent is grounded this may not accurately reflect the velocity of the agent. It may be non-zero even though the agent is not moving. +Pathfinding.AIBase.waitingForPathCalculation aibase.html#waitingForPathCalculation Only when the previous path has been calculated should the script consider searching for a new path. +Pathfinding.AIBase.whenCloseToDestination aibase.html#whenCloseToDestination What to do when within endReachedDistance units from the destination. \n\nThe character can either stop immediately when it comes within that distance, which is useful for e.g archers or other ranged units that want to fire on a target. Or the character can continue to try to reach the exact destination point and come to a full stop there. This is useful if you want the character to reach the exact point that you specified.\n\n[more in online documentation] +Pathfinding.AIDestinationSetter.ai aidestinationsetter.html#ai +Pathfinding.AIDestinationSetter.entity aidestinationsetter.html#entity +Pathfinding.AIDestinationSetter.target aidestinationsetter.html#target The object that the AI should move to. +Pathfinding.AIDestinationSetter.useRotation aidestinationsetter.html#useRotation If true, the agent will try to align itself with the rotation of the target. \n\nThis can only be used together with the FollowerEntity movement script. Other movement scripts will ignore it.\n\n <b>[video in online documentation]</b>\n\n[more in online documentation] +Pathfinding.AIDestinationSetter.world aidestinationsetter.html#world +Pathfinding.AILerp.autoRepath ailerp.html#autoRepath Determines how the agent recalculates its path automatically. \n\nThis corresponds to the settings under the "Recalculate Paths Automatically" field in the inspector. +Pathfinding.AILerp.canMove ailerp.html#canMove Enables or disables movement completely. \n\nIf you want the agent to stand still, but still react to local avoidance and use gravity: use isStopped instead.\n\nThis is also useful if you want to have full control over when the movement calculations run. Take a look at MovementUpdate\n\n[more in online documentation] +Pathfinding.AILerp.canSearch ailerp.html#canSearch Enables or disables recalculating the path at regular intervals. \n\nSetting this to false does not stop any active path requests from being calculated or stop it from continuing to follow the current path.\n\nNote that this only disables automatic path recalculations. If you call the SearchPath() method a path will still be calculated.\n\n[more in online documentation] +Pathfinding.AILerp.canSearchAgain ailerp.html#canSearchAgain Only when the previous path has been returned should a search for a new path be done. +Pathfinding.AILerp.canSearchCompability ailerp.html#canSearchCompability +Pathfinding.AILerp.desiredVelocity ailerp.html#desiredVelocity +Pathfinding.AILerp.desiredVelocityWithoutLocalAvoidance ailerp.html#desiredVelocityWithoutLocalAvoidance +Pathfinding.AILerp.destination ailerp.html#destination +Pathfinding.AILerp.enableRotation ailerp.html#enableRotation If true, the AI will rotate to face the movement direction. \n\n[more in online documentation] +Pathfinding.AILerp.endOfPath ailerp.html#endOfPath End point of path the agent is currently following. \n\nIf the agent has no path (or it might not be calculated yet), this will return the destination instead. If the agent has no destination it will return the agent's current position.\n\nThe end of the path is usually identical or very close to the destination, but it may differ if the path for example was blocked by a wall so that the agent couldn't get any closer.\n\nThis is only updated when the path is recalculated. +Pathfinding.AILerp.hasPath ailerp.html#hasPath True if this agent currently has a path that it follows. +Pathfinding.AILerp.height ailerp.html#height Height of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nThis value is currently only used if an RVOController is attached to the same GameObject, otherwise it is only used for drawing nice gizmos in the scene view. However since the height value is used for some things, the radius field is always visible for consistency and easier visualization of the character. That said, it may be used for something in a future release.\n\n[more in online documentation] +Pathfinding.AILerp.interpolatePathSwitches ailerp.html#interpolatePathSwitches If true, some interpolation will be done when a new path has been calculated. \n\nThis is used to avoid short distance teleportation. \n\n[more in online documentation] +Pathfinding.AILerp.interpolator ailerp.html#interpolator +Pathfinding.AILerp.interpolatorPath ailerp.html#interpolatorPath +Pathfinding.AILerp.isStopped ailerp.html#isStopped Gets or sets if the agent should stop moving. \n\nIf this is set to true the agent will immediately start to slow down as quickly as it can to come to a full stop. The agent will still react to local avoidance and gravity (if applicable), but it will not try to move in any particular direction.\n\nThe current path of the agent will not be cleared, so when this is set to false again the agent will continue moving along the previous path.\n\nThis is a purely user-controlled parameter, so for example it is not set automatically when the agent stops moving because it has reached the target. Use reachedEndOfPath for that.\n\nIf this property is set to true while the agent is traversing an off-mesh link (RichAI script only), then the agent will continue traversing the link and stop once it has completed it.\n\n[more in online documentation]\nThe steeringTarget property will continue to indicate the point which the agent would move towards if it would not be stopped. +Pathfinding.AILerp.maxSpeed ailerp.html#maxSpeed Max speed in world units per second. +Pathfinding.AILerp.movementPlane ailerp.html#movementPlane The plane the agent is moving in. \n\nThis is typically the ground plane, which will be the XZ plane in a 3D game, and the XY plane in a 2D game. Ultimately it depends on the graph orientation.\n\nIf you are doing pathfinding on a spherical world (see Spherical Worlds), the the movement plane will be the tangent plane of the sphere at the agent's position. +Pathfinding.AILerp.onPathComplete ailerp.html#onPathComplete Cached delegate for the OnPathComplete method. \n\nCaching this avoids allocating a new one every time a path is calculated, which reduces GC pressure. +Pathfinding.AILerp.onSearchPath ailerp.html#onSearchPath Called when the agent recalculates its path. \n\nThis is called both for automatic path recalculations (see canSearch) and manual ones (see SearchPath).\n\n[more in online documentation] +Pathfinding.AILerp.orientation ailerp.html#orientation Determines which direction the agent moves in. \n\nFor 3D games you most likely want the ZAxisIsForward option as that is the convention for 3D games. For 2D games you most likely want the YAxisIsForward option as that is the convention for 2D games.\n\nUsing the YAxisForward option will also allow the agent to assume that the movement will happen in the 2D (XY) plane instead of the XZ plane if it does not know. This is important only for the point graph which does not have a well defined up direction. The other built-in graphs (e.g the grid graph) will all tell the agent which movement plane it is supposed to use.\n\n <b>[image in online documentation]</b> +Pathfinding.AILerp.path ailerp.html#path Current path which is followed. +Pathfinding.AILerp.pathPending ailerp.html#pathPending True if a path is currently being calculated. +Pathfinding.AILerp.pathSwitchInterpolationTime ailerp.html#pathSwitchInterpolationTime Time since the path was replaced by a new path. \n\n[more in online documentation] +Pathfinding.AILerp.position ailerp.html#position Position of the agent. \n\nIn world space. \n\n[more in online documentation]\nIf you want to move the agent you may use Teleport or Move. +Pathfinding.AILerp.previousMovementDirection ailerp.html#previousMovementDirection +Pathfinding.AILerp.previousMovementOrigin ailerp.html#previousMovementOrigin When a new path was returned, the AI was moving along this ray. \n\nUsed to smoothly interpolate between the previous movement and the movement along the new path. The speed is equal to movement direction. +Pathfinding.AILerp.previousPosition1 ailerp.html#previousPosition1 +Pathfinding.AILerp.previousPosition2 ailerp.html#previousPosition2 +Pathfinding.AILerp.radius ailerp.html#radius Radius of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nNote that this does not affect pathfinding in any way. The graph used completely determines where the agent can move.\n\n[more in online documentation] +Pathfinding.AILerp.reachedDestination ailerp.html#reachedDestination True if the ai has reached the destination. \n\nThis is a best effort calculation to see if the destination has been reached. For the AIPath/RichAI scripts, this is when the character is within AIPath.endReachedDistance world units from the destination. For the AILerp script it is when the character is at the destination (±a very small margin).\n\nThis value will be updated immediately when the destination is changed (in contrast to reachedEndOfPath), however since path requests are asynchronous it will use an approximation until it sees the real path result. What this property does is to check the distance to the end of the current path, and add to that the distance from the end of the path to the destination (i.e. is assumes it is possible to move in a straight line between the end of the current path to the destination) and then checks if that total distance is less than AIPath.endReachedDistance. This property is therefore only a best effort, but it will work well for almost all use cases.\n\nFurthermore it will not report that the destination is reached if the destination is above the head of the character or more than half the height of the character below its feet (so if you have a multilevel building, it is important that you configure the height of the character correctly).\n\nThe cases which could be problematic are if an agent is standing next to a very thin wall and the destination suddenly changes to the other side of that thin wall. During the time that it takes for the path to be calculated the agent may see itself as alredy having reached the destination because the destination only moved a very small distance (the wall was thin), even though it may actually be quite a long way around the wall to the other side.\n\nIn contrast to reachedEndOfPath, this property is immediately updated when the destination is changed.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.AILerp.reachedEndOfPath ailerp.html#reachedEndOfPath True if the end of the current path has been reached. +Pathfinding.AILerp.remainingDistance ailerp.html#remainingDistance Approximate remaining distance along the current path to the end of the path. \n\nThe RichAI movement script approximates this distance since it is quite expensive to calculate the real distance. However it will be accurate when the agent is within 1 corner of the destination. You can use GetRemainingPath to calculate the actual remaining path more precisely.\n\nThe AIPath and AILerp scripts use a more accurate distance calculation at all times.\n\nIf the agent does not currently have a path, then positive infinity will be returned.\n\n[more in online documentation]\n\n\n\n[more in online documentation] +Pathfinding.AILerp.repathRate ailerp.html#repathRate Determines how often it will search for new paths. \n\nIf you have fast moving targets or AIs, you might want to set it to a lower value. The value is in seconds between path requests.\n\n[more in online documentation] +Pathfinding.AILerp.repathRateCompatibility ailerp.html#repathRateCompatibility +Pathfinding.AILerp.rotation ailerp.html#rotation Rotation of the agent. \n\nIn world space. \n\n[more in online documentation] +Pathfinding.AILerp.rotationIn2D ailerp.html#rotationIn2D If true, the forward axis of the character will be along the Y axis instead of the Z axis. \n\n[more in online documentation] +Pathfinding.AILerp.rotationSpeed ailerp.html#rotationSpeed How quickly to rotate. +Pathfinding.AILerp.seeker ailerp.html#seeker Cached Seeker component. +Pathfinding.AILerp.shouldRecalculatePath ailerp.html#shouldRecalculatePath True if the path should be automatically recalculated as soon as possible. +Pathfinding.AILerp.simulatedPosition ailerp.html#simulatedPosition +Pathfinding.AILerp.simulatedRotation ailerp.html#simulatedRotation +Pathfinding.AILerp.speed ailerp.html#speed Speed in world units. +Pathfinding.AILerp.startHasRun ailerp.html#startHasRun Holds if the Start function has been run. \n\nUsed to test if coroutines should be started in OnEnable to prevent calculating paths in the awake stage (or rather before start on frame 0). +Pathfinding.AILerp.steeringTarget ailerp.html#steeringTarget Point on the path which the agent is currently moving towards. \n\nThis is usually a point a small distance ahead of the agent or the end of the path.\n\nIf the agent does not have a path at the moment, then the agent's current position will be returned. +Pathfinding.AILerp.switchPathInterpolationSpeed ailerp.html#switchPathInterpolationSpeed How quickly to interpolate to the new path. \n\n[more in online documentation] +Pathfinding.AILerp.target ailerp.html#target Target to move towards. \n\nThe AI will try to follow/move towards this target. It can be a point on the ground where the player has clicked in an RTS for example, or it can be the player object in a zombie game.\n\n[more in online documentation] +Pathfinding.AILerp.targetCompatibility ailerp.html#targetCompatibility Required for serialization backward compatibility. +Pathfinding.AILerp.tr ailerp.html#tr Cached Transform component. +Pathfinding.AILerp.updatePosition ailerp.html#updatePosition Determines if the character's position should be coupled to the Transform's position. \n\nIf false then all movement calculations will happen as usual, but the object that this component is attached to will not move instead only the position property will change.\n\n[more in online documentation] +Pathfinding.AILerp.updateRotation ailerp.html#updateRotation Determines if the character's rotation should be coupled to the Transform's rotation. \n\nIf false then all movement calculations will happen as usual, but the object that this component is attached to will not rotate instead only the rotation property will change.\n\n[more in online documentation] +Pathfinding.AILerp.velocity ailerp.html#velocity Actual velocity that the agent is moving with. \n\nIn world units per second.\n\n[more in online documentation] +Pathfinding.AIPath.GizmoColor aipath.html#GizmoColor +Pathfinding.AIPath.alwaysDrawGizmos aipath.html#alwaysDrawGizmos Draws detailed gizmos constantly in the scene view instead of only when the agent is selected and settings are being modified. +Pathfinding.AIPath.cachedNNConstraint aipath.html#cachedNNConstraint +Pathfinding.AIPath.canMove aipath.html#canMove Enables or disables movement completely. \n\nIf you want the agent to stand still, but still react to local avoidance and use gravity: use isStopped instead.\n\nThis is also useful if you want to have full control over when the movement calculations run. Take a look at MovementUpdate\n\n[more in online documentation] +Pathfinding.AIPath.canSearch aipath.html#canSearch Enables or disables recalculating the path at regular intervals. \n\nSetting this to false does not stop any active path requests from being calculated or stop it from continuing to follow the current path.\n\nNote that this only disables automatic path recalculations. If you call the SearchPath() method a path will still be calculated.\n\n[more in online documentation] +Pathfinding.AIPath.constrainInsideGraph aipath.html#constrainInsideGraph Ensure that the character is always on the traversable surface of the navmesh. \n\nWhen this option is enabled a GetNearest query will be done every frame to find the closest node that the agent can walk on and if the agent is not inside that node, then the agent will be moved to it.\n\nThis is especially useful together with local avoidance in order to avoid agents pushing each other into walls. \n\n[more in online documentation]\nThis option also integrates with local avoidance so that if the agent is say forced into a wall by other agents the local avoidance system will be informed about that wall and can take that into account.\n\nEnabling this has some performance impact depending on the graph type (pretty fast for grid graphs, slightly slower for navmesh/recast graphs). If you are using a navmesh/recast graph you may want to switch to the RichAI movement script which is specifically written for navmesh/recast graphs and does this kind of clamping out of the box. In many cases it can also follow the path more smoothly around sharp bends in the path.\n\nIt is not recommended that you use this option together with the funnel modifier on grid graphs because the funnel modifier will make the path go very close to the border of the graph and this script has a tendency to try to cut corners a bit. This may cause it to try to go slightly outside the traversable surface near corners and that will look bad if this option is enabled.\n\n[more in online documentation]\nBelow you can see an image where several agents using local avoidance were ordered to go to the same point in a corner. When not constraining the agents to the graph they are easily pushed inside obstacles. <b>[image in online documentation]</b> +Pathfinding.AIPath.endOfPath aipath.html#endOfPath End point of path the agent is currently following. \n\nIf the agent has no path (or it might not be calculated yet), this will return the destination instead. If the agent has no destination it will return the agent's current position.\n\nThe end of the path is usually identical or very close to the destination, but it may differ if the path for example was blocked by a wall so that the agent couldn't get any closer.\n\nThis is only updated when the path is recalculated. +Pathfinding.AIPath.gizmoHash aipath.html#gizmoHash +Pathfinding.AIPath.hasPath aipath.html#hasPath True if this agent currently has a path that it follows. +Pathfinding.AIPath.height aipath.html#height Height of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nThis value is currently only used if an RVOController is attached to the same GameObject, otherwise it is only used for drawing nice gizmos in the scene view. However since the height value is used for some things, the radius field is always visible for consistency and easier visualization of the character. That said, it may be used for something in a future release.\n\n[more in online documentation] +Pathfinding.AIPath.interpolator aipath.html#interpolator Represents the current steering target for the agent. +Pathfinding.AIPath.interpolatorPath aipath.html#interpolatorPath Helper which calculates points along the current path. +Pathfinding.AIPath.lastChangedTime aipath.html#lastChangedTime +Pathfinding.AIPath.maxAcceleration aipath.html#maxAcceleration How quickly the agent accelerates. \n\nPositive values represent an acceleration in world units per second squared. Negative values are interpreted as an inverse time of how long it should take for the agent to reach its max speed. For example if it should take roughly 0.4 seconds for the agent to reach its max speed then this field should be set to -1/0.4 = -2.5. For a negative value the final acceleration will be: -acceleration*maxSpeed. This behaviour exists mostly for compatibility reasons.\n\nIn the Unity inspector there are two modes: Default and Custom. In the Default mode this field is set to -2.5 which means that it takes about 0.4 seconds for the agent to reach its top speed. In the Custom mode you can set the acceleration to any positive value. +Pathfinding.AIPath.maxSpeed aipath.html#maxSpeed Max speed in world units per second. +Pathfinding.AIPath.movementPlane aipath.html#movementPlane The plane the agent is moving in. \n\nThis is typically the ground plane, which will be the XZ plane in a 3D game, and the XY plane in a 2D game. Ultimately it depends on the graph orientation.\n\nIf you are doing pathfinding on a spherical world (see Spherical Worlds), the the movement plane will be the tangent plane of the sphere at the agent's position. +Pathfinding.AIPath.path aipath.html#path Current path which is followed. +Pathfinding.AIPath.pathPending aipath.html#pathPending True if a path is currently being calculated. +Pathfinding.AIPath.pickNextWaypointDist aipath.html#pickNextWaypointDist How far the AI looks ahead along the path to determine the point it moves to. \n\nIn world units. If you enable the alwaysDrawGizmos toggle this value will be visualized in the scene view as a blue circle around the agent. <b>[image in online documentation]</b>\n\nHere are a few example videos showing some typical outcomes with good values as well as how it looks when this value is too low and too high. [more in online documentation] +Pathfinding.AIPath.preventMovingBackwards aipath.html#preventMovingBackwards Prevent the velocity from being too far away from the forward direction of the character. \n\nIf the character is ordered to move in the opposite direction from where it is facing then enabling this will cause it to make a small loop instead of turning on the spot.\n\nThis setting only has an effect if slowWhenNotFacingTarget is enabled. +Pathfinding.AIPath.radius aipath.html#radius Radius of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nNote that this does not affect pathfinding in any way. The graph used completely determines where the agent can move.\n\n[more in online documentation] +Pathfinding.AIPath.reachedDestination aipath.html#reachedDestination True if the ai has reached the destination. \n\nThis is a best effort calculation to see if the destination has been reached. For the AIPath/RichAI scripts, this is when the character is within AIPath.endReachedDistance world units from the destination. For the AILerp script it is when the character is at the destination (±a very small margin).\n\nThis value will be updated immediately when the destination is changed (in contrast to reachedEndOfPath), however since path requests are asynchronous it will use an approximation until it sees the real path result. What this property does is to check the distance to the end of the current path, and add to that the distance from the end of the path to the destination (i.e. is assumes it is possible to move in a straight line between the end of the current path to the destination) and then checks if that total distance is less than AIPath.endReachedDistance. This property is therefore only a best effort, but it will work well for almost all use cases.\n\nFurthermore it will not report that the destination is reached if the destination is above the head of the character or more than half the height of the character below its feet (so if you have a multilevel building, it is important that you configure the height of the character correctly).\n\nThe cases which could be problematic are if an agent is standing next to a very thin wall and the destination suddenly changes to the other side of that thin wall. During the time that it takes for the path to be calculated the agent may see itself as alredy having reached the destination because the destination only moved a very small distance (the wall was thin), even though it may actually be quite a long way around the wall to the other side.\n\nIn contrast to reachedEndOfPath, this property is immediately updated when the destination is changed.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.AIPath.reachedEndOfPath aipath.html#reachedEndOfPath True if the agent has reached the end of the current path. \n\nNote that setting the destination does not immediately update the path, nor is there any guarantee that the AI will actually be able to reach the destination that you set. The AI will try to get as close as possible. Often you want to use reachedDestination instead which is easier to work with.\n\nIt is very hard to provide a method for detecting if the AI has reached the destination that works across all different games because the destination may not even lie on the navmesh and how that is handled differs from game to game (see also the code snippet in the docs for destination).\n\n[more in online documentation] +Pathfinding.AIPath.remainingDistance aipath.html#remainingDistance Approximate remaining distance along the current path to the end of the path. \n\nThe RichAI movement script approximates this distance since it is quite expensive to calculate the real distance. However it will be accurate when the agent is within 1 corner of the destination. You can use GetRemainingPath to calculate the actual remaining path more precisely.\n\nThe AIPath and AILerp scripts use a more accurate distance calculation at all times.\n\nIf the agent does not currently have a path, then positive infinity will be returned.\n\n[more in online documentation]\n\n\n\n[more in online documentation] +Pathfinding.AIPath.rotationFilterState aipath.html#rotationFilterState +Pathfinding.AIPath.rotationFilterState2 aipath.html#rotationFilterState2 +Pathfinding.AIPath.rotationSpeed aipath.html#rotationSpeed Rotation speed in degrees per second. \n\nRotation is calculated using Quaternion.RotateTowards. This variable represents the rotation speed in degrees per second. The higher it is, the faster the character will be able to rotate. +Pathfinding.AIPath.slowWhenNotFacingTarget aipath.html#slowWhenNotFacingTarget Slow down when not facing the target direction. \n\nIncurs at a small performance overhead.\n\nThis setting only has an effect if enableRotation is enabled. +Pathfinding.AIPath.slowdownDistance aipath.html#slowdownDistance Distance from the end of the path where the AI will start to slow down. +Pathfinding.AIPath.steeringTarget aipath.html#steeringTarget Point on the path which the agent is currently moving towards. \n\nThis is usually a point a small distance ahead of the agent or the end of the path.\n\nIf the agent does not have a path at the moment, then the agent's current position will be returned. +Pathfinding.AIPathAlignedToSurface.scratchDictionary aipathalignedtosurface.html#scratchDictionary Scratch dictionary used to avoid allocations every frame. +Pathfinding.AdvancedSmooth.ConstantTurn.circleCenter constantturn.html#circleCenter +Pathfinding.AdvancedSmooth.ConstantTurn.clockwise constantturn.html#clockwise +Pathfinding.AdvancedSmooth.ConstantTurn.gamma1 constantturn.html#gamma1 +Pathfinding.AdvancedSmooth.ConstantTurn.gamma2 constantturn.html#gamma2 +Pathfinding.AdvancedSmooth.MaxTurn.alfaLeftLeft maxturn.html#alfaLeftLeft +Pathfinding.AdvancedSmooth.MaxTurn.alfaLeftRight maxturn.html#alfaLeftRight +Pathfinding.AdvancedSmooth.MaxTurn.alfaRightLeft maxturn.html#alfaRightLeft +Pathfinding.AdvancedSmooth.MaxTurn.alfaRightRight maxturn.html#alfaRightRight +Pathfinding.AdvancedSmooth.MaxTurn.betaLeftLeft maxturn.html#betaLeftLeft +Pathfinding.AdvancedSmooth.MaxTurn.betaLeftRight maxturn.html#betaLeftRight +Pathfinding.AdvancedSmooth.MaxTurn.betaRightLeft maxturn.html#betaRightLeft +Pathfinding.AdvancedSmooth.MaxTurn.betaRightRight maxturn.html#betaRightRight +Pathfinding.AdvancedSmooth.MaxTurn.deltaLeftRight maxturn.html#deltaLeftRight +Pathfinding.AdvancedSmooth.MaxTurn.deltaRightLeft maxturn.html#deltaRightLeft +Pathfinding.AdvancedSmooth.MaxTurn.gammaLeft maxturn.html#gammaLeft +Pathfinding.AdvancedSmooth.MaxTurn.gammaRight maxturn.html#gammaRight +Pathfinding.AdvancedSmooth.MaxTurn.leftCircleCenter maxturn.html#leftCircleCenter +Pathfinding.AdvancedSmooth.MaxTurn.preLeftCircleCenter maxturn.html#preLeftCircleCenter +Pathfinding.AdvancedSmooth.MaxTurn.preRightCircleCenter maxturn.html#preRightCircleCenter +Pathfinding.AdvancedSmooth.MaxTurn.preVaLeft maxturn.html#preVaLeft +Pathfinding.AdvancedSmooth.MaxTurn.preVaRight maxturn.html#preVaRight +Pathfinding.AdvancedSmooth.MaxTurn.rightCircleCenter maxturn.html#rightCircleCenter +Pathfinding.AdvancedSmooth.MaxTurn.vaLeft maxturn.html#vaLeft +Pathfinding.AdvancedSmooth.MaxTurn.vaRight maxturn.html#vaRight +Pathfinding.AdvancedSmooth.Order advancedsmooth.html#Order +Pathfinding.AdvancedSmooth.Turn.constructor turn.html#constructor +Pathfinding.AdvancedSmooth.Turn.id turn.html#id +Pathfinding.AdvancedSmooth.Turn.length turn.html#length +Pathfinding.AdvancedSmooth.Turn.score turn.html#score +Pathfinding.AdvancedSmooth.TurnConstructor.ThreeSixtyRadians turnconstructor.html#ThreeSixtyRadians +Pathfinding.AdvancedSmooth.TurnConstructor.changedPreviousTangent turnconstructor.html#changedPreviousTangent +Pathfinding.AdvancedSmooth.TurnConstructor.constantBias turnconstructor.html#constantBias Constant bias to add to the path lengths. \n\nThis can be used to favor certain turn types before others.\n\nBy for example setting this to -5, paths from this path constructor will be chosen if there are no other paths more than 5 world units shorter than this one (as opposed to just any shorter path) +Pathfinding.AdvancedSmooth.TurnConstructor.current turnconstructor.html#current +Pathfinding.AdvancedSmooth.TurnConstructor.factorBias turnconstructor.html#factorBias Bias to multiply the path lengths with. \n\nThis can be used to favor certain turn types before others. \n\n[more in online documentation] +Pathfinding.AdvancedSmooth.TurnConstructor.next turnconstructor.html#next +Pathfinding.AdvancedSmooth.TurnConstructor.normal turnconstructor.html#normal +Pathfinding.AdvancedSmooth.TurnConstructor.prev turnconstructor.html#prev +Pathfinding.AdvancedSmooth.TurnConstructor.prevNormal turnconstructor.html#prevNormal +Pathfinding.AdvancedSmooth.TurnConstructor.t1 turnconstructor.html#t1 +Pathfinding.AdvancedSmooth.TurnConstructor.t2 turnconstructor.html#t2 +Pathfinding.AdvancedSmooth.TurnConstructor.turningRadius turnconstructor.html#turningRadius +Pathfinding.AdvancedSmooth.turnConstruct1 advancedsmooth.html#turnConstruct1 +Pathfinding.AdvancedSmooth.turnConstruct2 advancedsmooth.html#turnConstruct2 +Pathfinding.AdvancedSmooth.turningRadius advancedsmooth.html#turningRadius +Pathfinding.AlternativePath.Order alternativepath.html#Order +Pathfinding.AlternativePath.destroyed alternativepath.html#destroyed +Pathfinding.AlternativePath.penalty alternativepath.html#penalty How much penalty (weight) to apply to nodes. +Pathfinding.AlternativePath.prevNodes alternativepath.html#prevNodes The previous path. +Pathfinding.AlternativePath.prevPenalty alternativepath.html#prevPenalty The previous penalty used. \n\nStored just in case it changes during operation +Pathfinding.AlternativePath.randomStep alternativepath.html#randomStep Max number of nodes to skip in a row. +Pathfinding.AlternativePath.rnd alternativepath.html#rnd A random object. +Pathfinding.AnimationLink.LinkClip.clip linkclip.html#clip +Pathfinding.AnimationLink.LinkClip.loopCount linkclip.html#loopCount +Pathfinding.AnimationLink.LinkClip.name linkclip.html#name +Pathfinding.AnimationLink.LinkClip.velocity linkclip.html#velocity +Pathfinding.AnimationLink.animSpeed animationlink.html#animSpeed +Pathfinding.AnimationLink.boneRoot animationlink.html#boneRoot +Pathfinding.AnimationLink.clip animationlink.html#clip +Pathfinding.AnimationLink.referenceMesh animationlink.html#referenceMesh +Pathfinding.AnimationLink.reverseAnim animationlink.html#reverseAnim +Pathfinding.AnimationLink.sequence animationlink.html#sequence +Pathfinding.AstarColor.AreaColors astarcolor.html#AreaColors +Pathfinding.AstarColor.BoundsHandles astarcolor.html#BoundsHandles +Pathfinding.AstarColor.ConnectionHighLerp astarcolor.html#ConnectionHighLerp +Pathfinding.AstarColor.ConnectionLowLerp astarcolor.html#ConnectionLowLerp +Pathfinding.AstarColor.MeshEdgeColor astarcolor.html#MeshEdgeColor +Pathfinding.AstarColor.SolidColor astarcolor.html#SolidColor +Pathfinding.AstarColor.UnwalkableNode astarcolor.html#UnwalkableNode +Pathfinding.AstarColor._AreaColors astarcolor.html#_AreaColors Holds user set area colors. \n\nUse GetAreaColor to get an area color +Pathfinding.AstarColor._BoundsHandles astarcolor.html#_BoundsHandles +Pathfinding.AstarColor._ConnectionHighLerp astarcolor.html#_ConnectionHighLerp +Pathfinding.AstarColor._ConnectionLowLerp astarcolor.html#_ConnectionLowLerp +Pathfinding.AstarColor._MeshEdgeColor astarcolor.html#_MeshEdgeColor +Pathfinding.AstarColor._SolidColor astarcolor.html#_SolidColor +Pathfinding.AstarColor._UnwalkableNode astarcolor.html#_UnwalkableNode +Pathfinding.AstarData.active astardata.html#active The AstarPath component which owns this AstarData. +Pathfinding.AstarData.cacheStartup astardata.html#cacheStartup Should graph-data be cached. \n\nCaching the startup means saving the whole graphs - not only the settings - to a file (file_cachedStartup) which can be loaded when the game starts. This is usually much faster than scanning the graphs when the game starts. This is configured from the editor under the "Save & Load" tab.\n\n[more in online documentation] +Pathfinding.AstarData.data astardata.html#data Serialized data for all graphs and settings. +Pathfinding.AstarData.dataString astardata.html#dataString Serialized data for all graphs and settings. \n\nStored as a base64 encoded string because otherwise Unity's Undo system would sometimes corrupt the byte data (because it only stores deltas).\n\nThis can be accessed as a byte array from the data property. +Pathfinding.AstarData.file_cachedStartup astardata.html#file_cachedStartup Serialized data for cached startup. \n\nIf set, on start the graphs will be deserialized from this file. +Pathfinding.AstarData.graphStructureLocked astardata.html#graphStructureLocked +Pathfinding.AstarData.graphTypes astardata.html#graphTypes All supported graph types. \n\nPopulated through reflection search +Pathfinding.AstarData.graphs astardata.html#graphs All graphs. \n\nThis will be filled only after deserialization has completed. May contain null entries if graph have been removed. +Pathfinding.AstarData.gridGraph astardata.html#gridGraph Shortcut to the first GridGraph. +Pathfinding.AstarData.layerGridGraph astardata.html#layerGridGraph Shortcut to the first LayerGridGraph. \n\n [more in online documentation] +Pathfinding.AstarData.linkGraph astardata.html#linkGraph Shortcut to the first LinkGraph. +Pathfinding.AstarData.navmesh astardata.html#navmesh Shortcut to the first NavMeshGraph. +Pathfinding.AstarData.pointGraph astardata.html#pointGraph Shortcut to the first PointGraph. +Pathfinding.AstarData.recastGraph astardata.html#recastGraph Shortcut to the first RecastGraph. \n\n [more in online documentation] +Pathfinding.AstarDebugger.GraphPoint.collectEvent graphpoint.html#collectEvent +Pathfinding.AstarDebugger.GraphPoint.fps graphpoint.html#fps +Pathfinding.AstarDebugger.GraphPoint.memory graphpoint.html#memory +Pathfinding.AstarDebugger.PathTypeDebug.getSize pathtypedebug.html#getSize +Pathfinding.AstarDebugger.PathTypeDebug.getTotalCreated pathtypedebug.html#getTotalCreated +Pathfinding.AstarDebugger.PathTypeDebug.name pathtypedebug.html#name +Pathfinding.AstarDebugger.allocMem astardebugger.html#allocMem +Pathfinding.AstarDebugger.allocRate astardebugger.html#allocRate +Pathfinding.AstarDebugger.boxRect astardebugger.html#boxRect +Pathfinding.AstarDebugger.cachedText astardebugger.html#cachedText +Pathfinding.AstarDebugger.cam astardebugger.html#cam +Pathfinding.AstarDebugger.collectAlloc astardebugger.html#collectAlloc +Pathfinding.AstarDebugger.debugTypes astardebugger.html#debugTypes +Pathfinding.AstarDebugger.delayedDeltaTime astardebugger.html#delayedDeltaTime +Pathfinding.AstarDebugger.delta astardebugger.html#delta +Pathfinding.AstarDebugger.font astardebugger.html#font Font to use. \n\nA monospaced font is the best +Pathfinding.AstarDebugger.fontSize astardebugger.html#fontSize +Pathfinding.AstarDebugger.fpsDropCounterSize astardebugger.html#fpsDropCounterSize +Pathfinding.AstarDebugger.fpsDrops astardebugger.html#fpsDrops +Pathfinding.AstarDebugger.graph astardebugger.html#graph +Pathfinding.AstarDebugger.graphBufferSize astardebugger.html#graphBufferSize +Pathfinding.AstarDebugger.graphHeight astardebugger.html#graphHeight +Pathfinding.AstarDebugger.graphOffset astardebugger.html#graphOffset +Pathfinding.AstarDebugger.graphWidth astardebugger.html#graphWidth +Pathfinding.AstarDebugger.lastAllocMemory astardebugger.html#lastAllocMemory +Pathfinding.AstarDebugger.lastAllocSet astardebugger.html#lastAllocSet +Pathfinding.AstarDebugger.lastCollect astardebugger.html#lastCollect +Pathfinding.AstarDebugger.lastCollectNum astardebugger.html#lastCollectNum +Pathfinding.AstarDebugger.lastDeltaTime astardebugger.html#lastDeltaTime +Pathfinding.AstarDebugger.lastUpdate astardebugger.html#lastUpdate +Pathfinding.AstarDebugger.maxNodePool astardebugger.html#maxNodePool +Pathfinding.AstarDebugger.maxVecPool astardebugger.html#maxVecPool +Pathfinding.AstarDebugger.peakAlloc astardebugger.html#peakAlloc +Pathfinding.AstarDebugger.show astardebugger.html#show +Pathfinding.AstarDebugger.showFPS astardebugger.html#showFPS +Pathfinding.AstarDebugger.showGraph astardebugger.html#showGraph +Pathfinding.AstarDebugger.showInEditor astardebugger.html#showInEditor +Pathfinding.AstarDebugger.showMemProfile astardebugger.html#showMemProfile +Pathfinding.AstarDebugger.showPathProfile astardebugger.html#showPathProfile +Pathfinding.AstarDebugger.style astardebugger.html#style +Pathfinding.AstarDebugger.text astardebugger.html#text +Pathfinding.AstarDebugger.yOffset astardebugger.html#yOffset +Pathfinding.AstarMath.GlobalRandom astarmath.html#GlobalRandom +Pathfinding.AstarMath.GlobalRandomLock astarmath.html#GlobalRandomLock +Pathfinding.AstarPathEditor.aboutArea astarpatheditor.html#aboutArea +Pathfinding.AstarPathEditor.addGraphsArea astarpatheditor.html#addGraphsArea +Pathfinding.AstarPathEditor.alwaysVisibleArea astarpatheditor.html#alwaysVisibleArea +Pathfinding.AstarPathEditor.astarSkin astarpatheditor.html#astarSkin +Pathfinding.AstarPathEditor.colorSettingsArea astarpatheditor.html#colorSettingsArea +Pathfinding.AstarPathEditor.customAreaColorsOpen astarpatheditor.html#customAreaColorsOpen +Pathfinding.AstarPathEditor.defines astarpatheditor.html#defines Holds defines found in script files, used for optimizations. \n\n [more in online documentation] +Pathfinding.AstarPathEditor.editTags astarpatheditor.html#editTags +Pathfinding.AstarPathEditor.editorSettingsArea astarpatheditor.html#editorSettingsArea +Pathfinding.AstarPathEditor.graphDeleteButtonStyle astarpatheditor.html#graphDeleteButtonStyle +Pathfinding.AstarPathEditor.graphEditNameButtonStyle astarpatheditor.html#graphEditNameButtonStyle +Pathfinding.AstarPathEditor.graphEditorTypes astarpatheditor.html#graphEditorTypes List of all graph editors available (e.g GridGraphEditor) +Pathfinding.AstarPathEditor.graphEditors astarpatheditor.html#graphEditors List of all graph editors for the graphs. +Pathfinding.AstarPathEditor.graphGizmoButtonStyle astarpatheditor.html#graphGizmoButtonStyle +Pathfinding.AstarPathEditor.graphInfoButtonStyle astarpatheditor.html#graphInfoButtonStyle +Pathfinding.AstarPathEditor.graphNameFocused astarpatheditor.html#graphNameFocused Graph editor which has its 'name' field focused. +Pathfinding.AstarPathEditor.graphNodeCounts astarpatheditor.html#graphNodeCounts Holds node counts for each graph to avoid calculating it every frame. \n\nOnly used for visualization purposes +Pathfinding.AstarPathEditor.graphTypes astarpatheditor.html#graphTypes +Pathfinding.AstarPathEditor.graphsArea astarpatheditor.html#graphsArea +Pathfinding.AstarPathEditor.helpBox astarpatheditor.html#helpBox +Pathfinding.AstarPathEditor.heuristicOptimizationOptions astarpatheditor.html#heuristicOptimizationOptions +Pathfinding.AstarPathEditor.ignoredChecksum astarpatheditor.html#ignoredChecksum Used to make sure correct behaviour when handling undos. +Pathfinding.AstarPathEditor.isPrefab astarpatheditor.html#isPrefab +Pathfinding.AstarPathEditor.lastUndoGroup astarpatheditor.html#lastUndoGroup +Pathfinding.AstarPathEditor.level0AreaStyle astarpatheditor.html#level0AreaStyle +Pathfinding.AstarPathEditor.level0LabelStyle astarpatheditor.html#level0LabelStyle +Pathfinding.AstarPathEditor.level1AreaStyle astarpatheditor.html#level1AreaStyle +Pathfinding.AstarPathEditor.level1LabelStyle astarpatheditor.html#level1LabelStyle +Pathfinding.AstarPathEditor.optimizationSettingsArea astarpatheditor.html#optimizationSettingsArea +Pathfinding.AstarPathEditor.script astarpatheditor.html#script AstarPath instance that is being inspected. +Pathfinding.AstarPathEditor.scriptsFolder astarpatheditor.html#scriptsFolder +Pathfinding.AstarPathEditor.serializationSettingsArea astarpatheditor.html#serializationSettingsArea +Pathfinding.AstarPathEditor.settingsArea astarpatheditor.html#settingsArea +Pathfinding.AstarPathEditor.showSettings astarpatheditor.html#showSettings +Pathfinding.AstarPathEditor.stylesLoaded astarpatheditor.html#stylesLoaded +Pathfinding.AstarPathEditor.tagsArea astarpatheditor.html#tagsArea +Pathfinding.AstarPathEditor.thinHelpBox astarpatheditor.html#thinHelpBox +Pathfinding.AstarUpdateChecker._lastUpdateCheck astarupdatechecker.html#_lastUpdateCheck +Pathfinding.AstarUpdateChecker._lastUpdateCheckRead astarupdatechecker.html#_lastUpdateCheckRead +Pathfinding.AstarUpdateChecker._latestBetaVersion astarupdatechecker.html#_latestBetaVersion +Pathfinding.AstarUpdateChecker._latestVersion astarupdatechecker.html#_latestVersion +Pathfinding.AstarUpdateChecker._latestVersionDescription astarupdatechecker.html#_latestVersionDescription Description of the latest update of the A* Pathfinding Project. +Pathfinding.AstarUpdateChecker.astarServerData astarupdatechecker.html#astarServerData Holds various URLs and text for the editor. \n\nThis info can be updated when a check for new versions is done to ensure that there are no invalid links. +Pathfinding.AstarUpdateChecker.hasParsedServerMessage astarupdatechecker.html#hasParsedServerMessage +Pathfinding.AstarUpdateChecker.lastUpdateCheck astarupdatechecker.html#lastUpdateCheck Last time an update check was made. +Pathfinding.AstarUpdateChecker.latestBetaVersion astarupdatechecker.html#latestBetaVersion Latest beta version of the A* Pathfinding Project. +Pathfinding.AstarUpdateChecker.latestVersion astarupdatechecker.html#latestVersion Latest version of the A* Pathfinding Project. +Pathfinding.AstarUpdateChecker.latestVersionDescription astarupdatechecker.html#latestVersionDescription Summary of the latest update. +Pathfinding.AstarUpdateChecker.updateCheckDownload astarupdatechecker.html#updateCheckDownload Used for downloading new version information. +Pathfinding.AstarUpdateChecker.updateCheckRate astarupdatechecker.html#updateCheckRate Number of days between update checks. +Pathfinding.AstarUpdateChecker.updateURL astarupdatechecker.html#updateURL URL to the version file containing the latest version number. +Pathfinding.AstarUpdateWindow.largeStyle astarupdatewindow.html#largeStyle +Pathfinding.AstarUpdateWindow.normalStyle astarupdatewindow.html#normalStyle +Pathfinding.AstarUpdateWindow.setReminder astarupdatewindow.html#setReminder +Pathfinding.AstarUpdateWindow.summary astarupdatewindow.html#summary +Pathfinding.AstarUpdateWindow.version astarupdatewindow.html#version +Pathfinding.AstarWorkItem.init astarworkitem.html#init Init function. \n\nMay be null if no initialization is needed. Will be called once, right before the first call to update or updateWithContext. +Pathfinding.AstarWorkItem.initWithContext astarworkitem.html#initWithContext Init function. \n\nMay be null if no initialization is needed. Will be called once, right before the first call to update or updateWithContext.\n\nA context object is sent as a parameter. This can be used to for example queue a flood fill that will be executed either when a work item calls EnsureValidFloodFill or all work items have been completed. If multiple work items are updating nodes so that they need a flood fill afterwards, using the QueueFloodFill method is preferred since then only a single flood fill needs to be performed for all of the work items instead of one per work item. +Pathfinding.AstarWorkItem.update astarworkitem.html#update Update function, called once per frame when the work item executes. \n\nTakes a param <b>force</b>. If that is true, the work item should try to complete the whole item in one go instead of spreading it out over multiple frames.\n\n[more in online documentation] +Pathfinding.AstarWorkItem.updateWithContext astarworkitem.html#updateWithContext Update function, called once per frame when the work item executes. \n\nTakes a param <b>force</b>. If that is true, the work item should try to complete the whole item in one go instead of spreading it out over multiple frames. \n\n[more in online documentation]\n\n\nA context object is sent as a parameter. This can be used to for example queue a flood fill that will be executed either when a work item calls EnsureValidFloodFill or all work items have been completed. If multiple work items are updating nodes so that they need a flood fill afterwards, using the QueueFloodFill method is preferred since then only a single flood fill needs to be performed for all of the work items instead of one per work item. +Pathfinding.AutoRepathPolicy.Mode autorepathpolicy2.html#Mode Policy mode for how often to recalculate an agent's path. +Pathfinding.AutoRepathPolicy.lastDestination autorepathpolicy2.html#lastDestination +Pathfinding.AutoRepathPolicy.lastRepathTime autorepathpolicy2.html#lastRepathTime +Pathfinding.AutoRepathPolicy.maximumPeriod autorepathpolicy2.html#maximumPeriod Maximum number of seconds between each automatic path recalculation for Mode.Dynamic. +Pathfinding.AutoRepathPolicy.mode autorepathpolicy2.html#mode Policy to use when recalculating paths. \n\n[more in online documentation] +Pathfinding.AutoRepathPolicy.period autorepathpolicy2.html#period Number of seconds between each automatic path recalculation for Mode.EveryNSeconds. +Pathfinding.AutoRepathPolicy.sensitivity autorepathpolicy2.html#sensitivity How sensitive the agent should be to changes in its destination for Mode.Dynamic. \n\nA higher value means the destination has to move less for the path to be recalculated.\n\n[more in online documentation] +Pathfinding.AutoRepathPolicy.visualizeSensitivity autorepathpolicy2.html#visualizeSensitivity If true the sensitivity will be visualized as a circle in the scene view when the game is playing. +Pathfinding.BaseAIEditor.debug baseaieditor.html#debug +Pathfinding.BaseAIEditor.lastSeenCustomGravity baseaieditor.html#lastSeenCustomGravity +Pathfinding.BinaryHeap.D binaryheap.html#D Number of children of each node in the tree. \n\nDifferent values have been tested and 4 has been empirically found to perform the best. \n\n[more in online documentation] +Pathfinding.BinaryHeap.GrowthFactor binaryheap.html#GrowthFactor The tree will grow by at least this factor every time it is expanded. +Pathfinding.BinaryHeap.HeapNode.F heapnode.html#F +Pathfinding.BinaryHeap.HeapNode.G heapnode.html#G +Pathfinding.BinaryHeap.HeapNode.pathNodeIndex heapnode.html#pathNodeIndex +Pathfinding.BinaryHeap.HeapNode.sortKey heapnode.html#sortKey Bitpacked F and G scores. +Pathfinding.BinaryHeap.NotInHeap binaryheap.html#NotInHeap +Pathfinding.BinaryHeap.SortGScores binaryheap.html#SortGScores Sort nodes by G score if there is a tie when comparing the F score. \n\nDisabling this will improve pathfinding performance with around 2.5% but may break ties between paths that have the same length in a less desirable manner (only relevant for grid graphs). +Pathfinding.BinaryHeap.heap binaryheap.html#heap Internal backing array for the heap. +Pathfinding.BinaryHeap.isEmpty binaryheap.html#isEmpty True if the heap does not contain any elements. +Pathfinding.BinaryHeap.numberOfItems binaryheap.html#numberOfItems Number of items in the tree. +Pathfinding.BlockManager.BlockMode blockmanager.html#BlockMode +Pathfinding.BlockManager.TraversalProvider.blockManager traversalprovider.html#blockManager Holds information about which nodes are occupied. +Pathfinding.BlockManager.TraversalProvider.filterDiagonalGridConnections traversalprovider.html#filterDiagonalGridConnections +Pathfinding.BlockManager.TraversalProvider.mode traversalprovider.html#mode Affects which nodes are considered blocked. +Pathfinding.BlockManager.TraversalProvider.selector traversalprovider.html#selector Blockers for this path. \n\nThe effect depends on mode.\n\nNote that having a large selector has a performance cost.\n\n[more in online documentation] +Pathfinding.BlockManager.blocked blockmanager.html#blocked Contains info on which SingleNodeBlocker objects have blocked a particular node. +Pathfinding.BlockableChannel.Receiver.channel receiver.html#channel +Pathfinding.BlockableChannel.allReceiversBlocked blockablechannel.html#allReceiversBlocked True if blocking and all receivers are waiting for unblocking. +Pathfinding.BlockableChannel.blocked blockablechannel.html#blocked +Pathfinding.BlockableChannel.isBlocked blockablechannel.html#isBlocked If true, all calls to Receive will block until this property is set to false. +Pathfinding.BlockableChannel.isClosed blockablechannel.html#isClosed True if Close has been called. +Pathfinding.BlockableChannel.isEmpty blockablechannel.html#isEmpty True if the queue is empty. +Pathfinding.BlockableChannel.isStarving blockablechannel.html#isStarving +Pathfinding.BlockableChannel.lockObj blockablechannel.html#lockObj +Pathfinding.BlockableChannel.numReceivers blockablechannel.html#numReceivers +Pathfinding.BlockableChannel.queue blockablechannel.html#queue +Pathfinding.BlockableChannel.starving blockablechannel.html#starving +Pathfinding.BlockableChannel.waitingReceivers blockablechannel.html#waitingReceivers +Pathfinding.CloseToDestinationMode pathfinding.html#CloseToDestinationMode What to do when the character is close to the destination. +Pathfinding.Connection.IdenticalEdge connection.html#IdenticalEdge +Pathfinding.Connection.IncomingConnection connection.html#IncomingConnection +Pathfinding.Connection.NoSharedEdge connection.html#NoSharedEdge +Pathfinding.Connection.OutgoingConnection connection.html#OutgoingConnection +Pathfinding.Connection.adjacentShapeEdge connection.html#adjacentShapeEdge The edge of the shape in the other node, which this connection represents. \n\n[more in online documentation] +Pathfinding.Connection.cost connection.html#cost Cost of moving along this connection. \n\nA cost of 1000 corresponds approximately to the cost of moving one world unit. +Pathfinding.Connection.edgesAreIdentical connection.html#edgesAreIdentical True if the two nodes share an identical edge. \n\nThis is only true if the connection is between two triangle mesh nodes and the nodes share the edge which this connection represents.\n\nIn contrast to isEdgeShared, this is true only if the triangle edge is identical (but reversed) in the other node. +Pathfinding.Connection.isEdgeShared connection.html#isEdgeShared True if the two nodes share an edge. \n\nThis is only true if the connection is between two triangle mesh nodes and the nodes share the edge which this connection represents. Note that the edge does not need to be perfectly identical for this to be true, it is enough if the edge is very similar. +Pathfinding.Connection.isIncoming connection.html#isIncoming True if the connection allows movement from the other node to this node. \n\nA connection can be either outgoing, incoming, or both. Most connections are two-way, so both incoming and outgoing. +Pathfinding.Connection.isOutgoing connection.html#isOutgoing True if the connection allows movement from this node to the other node. \n\nA connection can be either outgoing, incoming, or both. Most connections are two-way, so both incoming and outgoing. +Pathfinding.Connection.node connection.html#node Node which this connection goes to. +Pathfinding.Connection.shapeEdge connection.html#shapeEdge The edge of the shape which this connection uses. \n\nThis is an index into the shape's vertices.\n\nA value of 0 corresponds to using the side for vertex 0 and vertex 1 on the node. 1 corresponds to vertex 1 and 2, etc. A value of 3 is invalid, and this will be the value if isEdgeShared is false.\n\n[more in online documentation] +Pathfinding.Connection.shapeEdgeInfo connection.html#shapeEdgeInfo Various metadata about the connection, such as the side of the node shape which this connection uses. \n\n- Bits 0..1 represent shapeEdge.\n\n- Bits 2..3 represent adjacentShapeEdge.\n\n- Bit 4 represents isIncoming.\n\n- Bit 5 represents isOutgoing.\n\n- Bit 6 represents edgesAreIdentical.\n\n\n\n[more in online documentation] +Pathfinding.ConstantPath.allNodes constantpath.html#allNodes Contains all nodes the path found. \n\nThis list will be sorted by G score (cost/distance to reach the node). +Pathfinding.ConstantPath.endingCondition constantpath.html#endingCondition Determines when the path calculation should stop. \n\nThis is set up automatically in the constructor to an instance of the Pathfinding.EndingConditionDistance class with a <b>maxGScore</b> is specified in the constructor.\n\n[more in online documentation] +Pathfinding.ConstantPath.originalStartPoint constantpath.html#originalStartPoint +Pathfinding.ConstantPath.startNode constantpath.html#startNode +Pathfinding.ConstantPath.startPoint constantpath.html#startPoint +Pathfinding.CustomGraphEditorAttribute.displayName customgrapheditorattribute.html#displayName Name displayed in the inpector. +Pathfinding.CustomGraphEditorAttribute.editorType customgrapheditorattribute.html#editorType Type of the editor for the graph. +Pathfinding.CustomGraphEditorAttribute.graphType customgrapheditorattribute.html#graphType Graph type which this is an editor for. +Pathfinding.DistanceMetric.Euclidean distancemetric.html#Euclidean Returns a DistanceMetric which will find the closest node in euclidean 3D space. \n\n <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.DistanceMetric.distanceScaleAlongProjectionDirection distancemetric.html#distanceScaleAlongProjectionDirection Distance scaling along the projectionAxis. \n\n[more in online documentation] +Pathfinding.DistanceMetric.isProjectedDistance distancemetric.html#isProjectedDistance True when using the ClosestAsSeenFromAbove or ClosestAsSeenFromAboveSoft modes. +Pathfinding.DistanceMetric.projectionAxis distancemetric.html#projectionAxis Normal of the plane on which nodes will be projected before finding the closest point on them. \n\nWhen zero, this has no effect.\n\nWhen set to the special value (inf, inf, inf) then the graph's natural up direction will be used.\n\nOften you do not want to find the closest point on a node in 3D space, but rather find for example the closest point on the node directly below the agent.\n\nThis allows you to project the nodes onto a plane before finding the closest point on them. For example, if you set this to Vector3.up, then the nodes will be projected onto the XZ plane. Running a GetNearest query will then find the closest node as seen from above.\n\n <b>[image in online documentation]</b>\n\nThis is more flexible, however. You can set the distanceScaleAlongProjectionDirection to any value (though usually somewhere between 0 and 1). With a value of 0, the closest node will be found as seen from above. When the distance is greater than 0, moving along the <b>projectionAxis</b> from the query point will only cost distanceScaleAlongProjectionDirection times the regular distance, but moving sideways will cost the normal amount.\n\n <b>[image in online documentation]</b>\n\nA nice value to use is 0.2 for distanceScaleAlongProjectionDirection. This will make moving upwards or downwards (along the projection direction) only appear like 20% the original distance to the nearest node search. This allows you to find the closest position directly under the agent, if there is a navmesh directly under the agent, but also to search not directly below the agent if that is necessary.\n\n[more in online documentation] +Pathfinding.DynamicGridObstacle.bounds dynamicgridobstacle.html#bounds +Pathfinding.DynamicGridObstacle.checkTime dynamicgridobstacle.html#checkTime Time in seconds between bounding box checks. \n\nIf AstarPath.batchGraphUpdates is enabled, it is not beneficial to have a checkTime much lower than AstarPath.graphUpdateBatchingInterval because that will just add extra unnecessary graph updates.\n\nIn real time seconds (based on Time.realtimeSinceStartup). +Pathfinding.DynamicGridObstacle.coll dynamicgridobstacle.html#coll Collider to get bounds information from. +Pathfinding.DynamicGridObstacle.coll2D dynamicgridobstacle.html#coll2D 2D Collider to get bounds information from +Pathfinding.DynamicGridObstacle.colliderEnabled dynamicgridobstacle.html#colliderEnabled +Pathfinding.DynamicGridObstacle.lastCheckTime dynamicgridobstacle.html#lastCheckTime +Pathfinding.DynamicGridObstacle.pendingGraphUpdates dynamicgridobstacle.html#pendingGraphUpdates +Pathfinding.DynamicGridObstacle.prevBounds dynamicgridobstacle.html#prevBounds Bounds of the collider the last time the graphs were updated. +Pathfinding.DynamicGridObstacle.prevEnabled dynamicgridobstacle.html#prevEnabled True if the collider was enabled last time the graphs were updated. +Pathfinding.DynamicGridObstacle.prevRotation dynamicgridobstacle.html#prevRotation Rotation of the collider the last time the graphs were updated. +Pathfinding.DynamicGridObstacle.tr dynamicgridobstacle.html#tr Cached transform component. +Pathfinding.DynamicGridObstacle.updateError dynamicgridobstacle.html#updateError The minimum change in world units along one of the axis of the bounding box of the collider to trigger a graph update. +Pathfinding.ECS.AIMoveSystem.MarkerMovementOverride aimovesystem.html#MarkerMovementOverride +Pathfinding.ECS.AIMoveSystem.MovementStateTypeHandleRO aimovesystem.html#MovementStateTypeHandleRO +Pathfinding.ECS.AIMoveSystem.ResolvedMovementHandleRO aimovesystem.html#ResolvedMovementHandleRO +Pathfinding.ECS.AIMoveSystem.entityQueryGizmos aimovesystem.html#entityQueryGizmos +Pathfinding.ECS.AIMoveSystem.entityQueryMove aimovesystem.html#entityQueryMove +Pathfinding.ECS.AIMoveSystem.entityQueryMovementOverride aimovesystem.html#entityQueryMovementOverride +Pathfinding.ECS.AIMoveSystem.entityQueryPrepareMovement aimovesystem.html#entityQueryPrepareMovement +Pathfinding.ECS.AIMoveSystem.entityQueryRotation aimovesystem.html#entityQueryRotation +Pathfinding.ECS.AIMoveSystem.entityQueryWithGravity aimovesystem.html#entityQueryWithGravity +Pathfinding.ECS.AIMoveSystem.jobRepairPathScheduler aimovesystem.html#jobRepairPathScheduler +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.CheapSimulationOnly timescaledratemanager.html#CheapSimulationOnly True if it was determined that zero substeps should be simulated. \n\nIn this case all systems will get an opportunity to run a single update, but they should avoid systems that don't have to run every single frame. +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.CheapStepDeltaTime timescaledratemanager.html#CheapStepDeltaTime +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.IsLastSubstep timescaledratemanager.html#IsLastSubstep True when this is the last substep of the current simulation. +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.Timestep timescaledratemanager.html#Timestep +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.cheapSimulationOnly timescaledratemanager.html#cheapSimulationOnly +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.cheapTimeData timescaledratemanager.html#cheapTimeData +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.cheapTimeDataQueue timescaledratemanager.html#cheapTimeDataQueue +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.inGroup timescaledratemanager.html#inGroup +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.isLastSubstep timescaledratemanager.html#isLastSubstep +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.lastCheapSimulation timescaledratemanager.html#lastCheapSimulation +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.lastFullSimulation timescaledratemanager.html#lastFullSimulation +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.maximumDt timescaledratemanager.html#maximumDt +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.numUpdatesThisFrame timescaledratemanager.html#numUpdatesThisFrame +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.stepDt timescaledratemanager.html#stepDt +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.timeDataQueue timescaledratemanager.html#timeDataQueue +Pathfinding.ECS.AIMovementSystemGroup.TimeScaledRateManager.updateIndex timescaledratemanager.html#updateIndex +Pathfinding.ECS.AgentCylinderShape.height agentcylindershape.html#height Height of the agent in world units. +Pathfinding.ECS.AgentCylinderShape.radius agentcylindershape.html#radius Radius of the agent in world units. +Pathfinding.ECS.AgentMovementPlane.value agentmovementplane.html#value The movement plane for the agent. \n\nThe movement plane determines what the "up" direction of the agent is. For most typical 3D games, this will be aligned with the Y axis, but there are games in which the agent needs to navigate on walls, or on spherical worlds. For those games this movement plane will track the plane in which the agent is currently moving.\n\n[more in online documentation] +Pathfinding.ECS.AgentMovementPlaneSource.value agentmovementplanesource.html#value +Pathfinding.ECS.AgentOffMeshLinkTraversal.firstPosition agentoffmeshlinktraversal.html#firstPosition The start point of the off-mesh link from the agent's perspective. \n\nThis is the point where the agent starts traversing the off-mesh link, regardless of if the link is traversed from the start to end or from end to start. \n\n[more in online documentation] +Pathfinding.ECS.AgentOffMeshLinkTraversal.isReverse agentoffmeshlinktraversal.html#isReverse True if the agent is traversing the off-mesh link from original link's end to its start point. \n\n[more in online documentation] +Pathfinding.ECS.AgentOffMeshLinkTraversal.relativeEnd agentoffmeshlinktraversal.html#relativeEnd The end point of the off-mesh link from the agent's perspective. \n\nThis is the point where the agent will finish traversing the off-mesh link, regardless of if the link is traversed from start to end or from end to start. +Pathfinding.ECS.AgentOffMeshLinkTraversal.relativeStart agentoffmeshlinktraversal.html#relativeStart The start point of the off-mesh link from the agent's perspective. \n\nThis is the point where the agent starts traversing the off-mesh link, regardless of if the link is traversed from the start to end or from end to start. +Pathfinding.ECS.AgentOffMeshLinkTraversal.secondPosition agentoffmeshlinktraversal.html#secondPosition The end point of the off-mesh link from the agent's perspective. \n\nThis is the point where the agent will finish traversing the off-mesh link, regardless of if the link is traversed from start to end or from end to start. \n\n[more in online documentation] +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.backupRotationSmoothing agentoffmeshlinktraversalcontext.html#backupRotationSmoothing +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.concreteLink agentoffmeshlinktraversalcontext.html#concreteLink The off-mesh link that is being traversed. \n\n[more in online documentation] +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.deltaTime agentoffmeshlinktraversalcontext.html#deltaTime Delta time since the last link simulation. \n\nDuring high time scales, the simulation may run multiple substeps per frame.\n\nThis is <b>not</b> the same as Time.deltaTime. Inside the link coroutine, you should always use this field instead of Time.deltaTime. +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.disabledRVO agentoffmeshlinktraversalcontext.html#disabledRVO +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.entity agentoffmeshlinktraversalcontext.html#entity The entity that is traversing the off-mesh link. +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.gameObject agentoffmeshlinktraversalcontext.html#gameObject GameObject associated with the agent. \n\nIn most cases, an agent is associated with an agent, but this is not always the case. For example, if you have created an entity without using the FollowerEntity component, this property may return null.\n\n[more in online documentation] +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.gameObjectCache agentoffmeshlinktraversalcontext.html#gameObjectCache +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.link agentoffmeshlinktraversalcontext.html#link Information about the off-mesh link that the agent is traversing. +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.linkInfo agentoffmeshlinktraversalcontext.html#linkInfo Information about the off-mesh link that the agent is traversing. \n\n[more in online documentation] +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.linkInfoPtr agentoffmeshlinktraversalcontext.html#linkInfoPtr +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.managedState agentoffmeshlinktraversalcontext.html#managedState Some internal state of the agent. +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.movementControl agentoffmeshlinktraversalcontext.html#movementControl How the agent should move. \n\nThe agent will move according to this data, every frame. +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.movementControlPtr agentoffmeshlinktraversalcontext.html#movementControlPtr +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.movementPlane agentoffmeshlinktraversalcontext.html#movementPlane The plane in which the agent is moving. \n\nIn a 3D game, this will typically be the XZ plane, but in a 2D game it will typically be the XY plane. Games on spherical planets could have planes that are aligned with the surface of the planet. +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.movementPlanePtr agentoffmeshlinktraversalcontext.html#movementPlanePtr +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.movementSettings agentoffmeshlinktraversalcontext.html#movementSettings The movement settings for the agent. +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.movementSettingsPtr agentoffmeshlinktraversalcontext.html#movementSettingsPtr +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.transform agentoffmeshlinktraversalcontext.html#transform ECS LocalTransform component attached to the agent. +Pathfinding.ECS.AgentOffMeshLinkTraversalContext.transformPtr agentoffmeshlinktraversalcontext.html#transformPtr +Pathfinding.ECS.AutoRepathPolicy.Default autorepathpolicy.html#Default +Pathfinding.ECS.AutoRepathPolicy.Sensitivity autorepathpolicy.html#Sensitivity How sensitive the agent should be to changes in its destination for Mode.Dynamic. \n\nA higher value means the destination has to move less for the path to be recalculated.\n\n[more in online documentation] +Pathfinding.ECS.AutoRepathPolicy.lastDestination autorepathpolicy.html#lastDestination +Pathfinding.ECS.AutoRepathPolicy.lastRepathTime autorepathpolicy.html#lastRepathTime +Pathfinding.ECS.AutoRepathPolicy.mode autorepathpolicy.html#mode Policy to use when recalculating paths. \n\n[more in online documentation] +Pathfinding.ECS.AutoRepathPolicy.period autorepathpolicy.html#period Number of seconds between each automatic path recalculation for Mode.EveryNSeconds, and the maximum interval for Mode.Dynamic. +Pathfinding.ECS.ComponentRef.ptr componentref.html#ptr +Pathfinding.ECS.ComponentRef.value componentref.html#value +Pathfinding.ECS.DestinationPoint.destination destinationpoint.html#destination The destination point that the agent is moving towards. \n\nThis is the point that the agent is trying to reach, but it may not always be possible to reach it.\n\n[more in online documentation] +Pathfinding.ECS.DestinationPoint.facingDirection destinationpoint.html#facingDirection The direction the agent should face when it reaches the destination. \n\nIf zero, the agent will not try to face any particular direction when reaching the destination. +Pathfinding.ECS.EntityAccess.handle entityaccess.html#handle +Pathfinding.ECS.EntityAccess.lastSystemVersion entityaccess.html#lastSystemVersion +Pathfinding.ECS.EntityAccess.readOnly entityaccess.html#readOnly +Pathfinding.ECS.EntityAccess.this[EntityStorageInfo storage] entityaccess.html#thisEntityStorageInfostorage +Pathfinding.ECS.EntityAccess.worldSequenceNumber entityaccess.html#worldSequenceNumber +Pathfinding.ECS.EntityAccessHelper.GlobalSystemVersionOffset entityaccesshelper.html#GlobalSystemVersionOffset +Pathfinding.ECS.EntityStorageCache.entity entitystoragecache.html#entity +Pathfinding.ECS.EntityStorageCache.lastWorldHash entitystoragecache.html#lastWorldHash +Pathfinding.ECS.EntityStorageCache.storage entitystoragecache.html#storage +Pathfinding.ECS.FallbackResolveMovementSystem.entityQuery fallbackresolvemovementsystem.html#entityQuery +Pathfinding.ECS.FollowerControlSystem.JobRecalculatePaths.index jobrecalculatepaths.html#index +Pathfinding.ECS.FollowerControlSystem.JobRecalculatePaths.shouldRecalculatePath jobrecalculatepaths.html#shouldRecalculatePath +Pathfinding.ECS.FollowerControlSystem.JobRecalculatePaths.time jobrecalculatepaths.html#time +Pathfinding.ECS.FollowerControlSystem.JobShouldRecalculatePaths.index jobshouldrecalculatepaths.html#index +Pathfinding.ECS.FollowerControlSystem.JobShouldRecalculatePaths.shouldRecalculatePath jobshouldrecalculatepaths.html#shouldRecalculatePath +Pathfinding.ECS.FollowerControlSystem.JobShouldRecalculatePaths.time jobshouldrecalculatepaths.html#time +Pathfinding.ECS.FollowerControlSystem.MarkerMovementOverrideAfterControl followercontrolsystem.html#MarkerMovementOverrideAfterControl +Pathfinding.ECS.FollowerControlSystem.MarkerMovementOverrideBeforeControl followercontrolsystem.html#MarkerMovementOverrideBeforeControl +Pathfinding.ECS.FollowerControlSystem.entityQueryControl followercontrolsystem.html#entityQueryControl +Pathfinding.ECS.FollowerControlSystem.entityQueryControlManaged followercontrolsystem.html#entityQueryControlManaged +Pathfinding.ECS.FollowerControlSystem.entityQueryControlManaged2 followercontrolsystem.html#entityQueryControlManaged2 +Pathfinding.ECS.FollowerControlSystem.entityQueryOffMeshLink followercontrolsystem.html#entityQueryOffMeshLink +Pathfinding.ECS.FollowerControlSystem.entityQueryOffMeshLinkCleanup followercontrolsystem.html#entityQueryOffMeshLinkCleanup +Pathfinding.ECS.FollowerControlSystem.entityQueryPrepare followercontrolsystem.html#entityQueryPrepare +Pathfinding.ECS.FollowerControlSystem.jobRepairPathScheduler followercontrolsystem.html#jobRepairPathScheduler +Pathfinding.ECS.FollowerControlSystem.redrawScope followercontrolsystem.html#redrawScope +Pathfinding.ECS.GravityState.verticalVelocity gravitystate.html#verticalVelocity Current vertical velocity of the agent. \n\nThis is the velocity that the agent is moving with due to gravity. It is not necessarily the same as the Y component of the estimated velocity. +Pathfinding.ECS.JobAlignAgentWithMovementDirection.dt jobalignagentwithmovementdirection.html#dt +Pathfinding.ECS.JobApplyGravity.draw jobapplygravity.html#draw +Pathfinding.ECS.JobApplyGravity.dt jobapplygravity.html#dt +Pathfinding.ECS.JobApplyGravity.raycastCommands jobapplygravity.html#raycastCommands +Pathfinding.ECS.JobApplyGravity.raycastHits jobapplygravity.html#raycastHits +Pathfinding.ECS.JobControl.MarkerConvertObstacles jobcontrol.html#MarkerConvertObstacles +Pathfinding.ECS.JobControl.draw jobcontrol.html#draw +Pathfinding.ECS.JobControl.dt jobcontrol.html#dt +Pathfinding.ECS.JobControl.edgesScratch jobcontrol.html#edgesScratch +Pathfinding.ECS.JobControl.navmeshEdgeData jobcontrol.html#navmeshEdgeData +Pathfinding.ECS.JobDrawFollowerGizmos.AgentCylinderShapeHandleRO jobdrawfollowergizmos.html#AgentCylinderShapeHandleRO +Pathfinding.ECS.JobDrawFollowerGizmos.AgentMovementPlaneHandleRO jobdrawfollowergizmos.html#AgentMovementPlaneHandleRO +Pathfinding.ECS.JobDrawFollowerGizmos.LocalTransformTypeHandleRO jobdrawfollowergizmos.html#LocalTransformTypeHandleRO +Pathfinding.ECS.JobDrawFollowerGizmos.ManagedStateHandleRW jobdrawfollowergizmos.html#ManagedStateHandleRW +Pathfinding.ECS.JobDrawFollowerGizmos.MovementSettingsHandleRO jobdrawfollowergizmos.html#MovementSettingsHandleRO +Pathfinding.ECS.JobDrawFollowerGizmos.MovementStateHandleRO jobdrawfollowergizmos.html#MovementStateHandleRO +Pathfinding.ECS.JobDrawFollowerGizmos.ResolvedMovementHandleRO jobdrawfollowergizmos.html#ResolvedMovementHandleRO +Pathfinding.ECS.JobDrawFollowerGizmos.draw jobdrawfollowergizmos.html#draw +Pathfinding.ECS.JobDrawFollowerGizmos.entityManagerHandle jobdrawfollowergizmos.html#entityManagerHandle +Pathfinding.ECS.JobDrawFollowerGizmos.scratchBuffer1 jobdrawfollowergizmos.html#scratchBuffer1 +Pathfinding.ECS.JobDrawFollowerGizmos.scratchBuffer2 jobdrawfollowergizmos.html#scratchBuffer2 +Pathfinding.ECS.JobManagedMovementOverrideAfterControl.dt jobmanagedmovementoverrideaftercontrol.html#dt +Pathfinding.ECS.JobManagedMovementOverrideBeforeControl.dt jobmanagedmovementoverridebeforecontrol.html#dt +Pathfinding.ECS.JobManagedMovementOverrideBeforeMovement.dt jobmanagedmovementoverridebeforemovement.html#dt +Pathfinding.ECS.JobManagedOffMeshLinkTransition.commandBuffer jobmanagedoffmeshlinktransition.html#commandBuffer +Pathfinding.ECS.JobManagedOffMeshLinkTransition.deltaTime jobmanagedoffmeshlinktransition.html#deltaTime +Pathfinding.ECS.JobMoveAgent.dt jobmoveagent.html#dt +Pathfinding.ECS.JobPrepareAgentRaycasts.draw jobprepareagentraycasts.html#draw +Pathfinding.ECS.JobPrepareAgentRaycasts.dt jobprepareagentraycasts.html#dt +Pathfinding.ECS.JobPrepareAgentRaycasts.gravity jobprepareagentraycasts.html#gravity +Pathfinding.ECS.JobPrepareAgentRaycasts.raycastCommands jobprepareagentraycasts.html#raycastCommands +Pathfinding.ECS.JobPrepareAgentRaycasts.raycastQueryParameters jobprepareagentraycasts.html#raycastQueryParameters +Pathfinding.ECS.JobRepairPath.MarkerGetNextCorners jobrepairpath.html#MarkerGetNextCorners +Pathfinding.ECS.JobRepairPath.MarkerRepair jobrepairpath.html#MarkerRepair +Pathfinding.ECS.JobRepairPath.MarkerUpdateReachedEndInfo jobrepairpath.html#MarkerUpdateReachedEndInfo +Pathfinding.ECS.JobRepairPath.Scheduler.AgentCylinderShapeTypeHandleRO scheduler.html#AgentCylinderShapeTypeHandleRO +Pathfinding.ECS.JobRepairPath.Scheduler.AgentMovementPlaneTypeHandleRO scheduler.html#AgentMovementPlaneTypeHandleRO +Pathfinding.ECS.JobRepairPath.Scheduler.DestinationPointTypeHandleRO scheduler.html#DestinationPointTypeHandleRO +Pathfinding.ECS.JobRepairPath.Scheduler.LocalTransformTypeHandleRO scheduler.html#LocalTransformTypeHandleRO +Pathfinding.ECS.JobRepairPath.Scheduler.ManagedStateTypeHandleRW scheduler.html#ManagedStateTypeHandleRW +Pathfinding.ECS.JobRepairPath.Scheduler.MovementSettingsTypeHandleRO scheduler.html#MovementSettingsTypeHandleRO +Pathfinding.ECS.JobRepairPath.Scheduler.MovementStateTypeHandleRW scheduler.html#MovementStateTypeHandleRW +Pathfinding.ECS.JobRepairPath.Scheduler.ReadyToTraverseOffMeshLinkTypeHandleRW scheduler.html#ReadyToTraverseOffMeshLinkTypeHandleRW +Pathfinding.ECS.JobRepairPath.Scheduler.entityManagerHandle scheduler.html#entityManagerHandle +Pathfinding.ECS.JobRepairPath.Scheduler.onlyApplyPendingPaths scheduler.html#onlyApplyPendingPaths +Pathfinding.ECS.JobRepairPath.indicesScratch jobrepairpath.html#indicesScratch +Pathfinding.ECS.JobRepairPath.nextCornersScratch jobrepairpath.html#nextCornersScratch +Pathfinding.ECS.JobRepairPath.onlyApplyPendingPaths jobrepairpath.html#onlyApplyPendingPaths +Pathfinding.ECS.JobRepairPath.scheduler jobrepairpath.html#scheduler +Pathfinding.ECS.JobRepairPathHelpers.PathTracerInfo.endPointOfFirstPart pathtracerinfo.html#endPointOfFirstPart +Pathfinding.ECS.JobRepairPathHelpers.PathTracerInfo.isStale pathtracerinfo.html#isStale +Pathfinding.ECS.JobRepairPathHelpers.PathTracerInfo.isStaleBacking pathtracerinfo.html#isStaleBacking +Pathfinding.ECS.JobRepairPathHelpers.PathTracerInfo.partCount pathtracerinfo.html#partCount +Pathfinding.ECS.JobStartOffMeshLinkTransition.commandBuffer jobstartoffmeshlinktransition.html#commandBuffer +Pathfinding.ECS.JobSyncEntitiesToTransforms.entities jobsyncentitiestotransforms.html#entities +Pathfinding.ECS.JobSyncEntitiesToTransforms.entityPositions jobsyncentitiestotransforms.html#entityPositions +Pathfinding.ECS.JobSyncEntitiesToTransforms.movementState jobsyncentitiestotransforms.html#movementState +Pathfinding.ECS.JobSyncEntitiesToTransforms.orientationYAxisForward jobsyncentitiestotransforms.html#orientationYAxisForward +Pathfinding.ECS.JobSyncEntitiesToTransforms.syncPositionWithTransform jobsyncentitiestotransforms.html#syncPositionWithTransform +Pathfinding.ECS.JobSyncEntitiesToTransforms.syncRotationWithTransform jobsyncentitiestotransforms.html#syncRotationWithTransform +Pathfinding.ECS.ManagedAgentOffMeshLinkTraversal.context managedagentoffmeshlinktraversal.html#context Internal context used to pass component data to the coroutine. +Pathfinding.ECS.ManagedAgentOffMeshLinkTraversal.coroutine managedagentoffmeshlinktraversal.html#coroutine Coroutine which is used to traverse the link. +Pathfinding.ECS.ManagedAgentOffMeshLinkTraversal.handler managedagentoffmeshlinktraversal.html#handler +Pathfinding.ECS.ManagedAgentOffMeshLinkTraversal.stateMachine managedagentoffmeshlinktraversal.html#stateMachine +Pathfinding.ECS.ManagedEntityAccess.entityManager managedentityaccess.html#entityManager +Pathfinding.ECS.ManagedEntityAccess.handle managedentityaccess.html#handle +Pathfinding.ECS.ManagedEntityAccess.readOnly managedentityaccess.html#readOnly +Pathfinding.ECS.ManagedEntityAccess.this[EntityStorageInfo storage] managedentityaccess.html#thisEntityStorageInfostorage +Pathfinding.ECS.ManagedMovementOverride.callback managedmovementoverride.html#callback +Pathfinding.ECS.ManagedMovementOverrides.entity managedmovementoverrides.html#entity +Pathfinding.ECS.ManagedMovementOverrides.world managedmovementoverrides.html#world +Pathfinding.ECS.ManagedState.activePath managedstate.html#activePath Path that is being followed, if any. \n\nThe agent may have moved away from this path since it was calculated. So it may not be up to date. +Pathfinding.ECS.ManagedState.autoRepath managedstate.html#autoRepath Settings for when to recalculate the path. \n\n[more in online documentation] +Pathfinding.ECS.ManagedState.enableGravity managedstate.html#enableGravity True if gravity is enabled for this agent. \n\nThe agent will always fall down according to its own movement plane. The gravity applied is Physics.gravity.y.\n\nEnabling this will add the GravityState component to the entity. +Pathfinding.ECS.ManagedState.enableLocalAvoidance managedstate.html#enableLocalAvoidance True if local avoidance is enabled for this agent. \n\nEnabling this will automatically add a Pathfinding.ECS.RVO.RVOAgent component to the entity.\n\n[more in online documentation] +Pathfinding.ECS.ManagedState.onTraverseOffMeshLink managedstate.html#onTraverseOffMeshLink Callback for when the agent starts to traverse an off-mesh link. +Pathfinding.ECS.ManagedState.pathTracer managedstate.html#pathTracer Calculates in which direction to move to follow the path. +Pathfinding.ECS.ManagedState.pathfindingSettings managedstate.html#pathfindingSettings +Pathfinding.ECS.ManagedState.pendingPath managedstate.html#pendingPath Path that is being calculated, if any. +Pathfinding.ECS.ManagedState.rvoSettings managedstate.html#rvoSettings Local avoidance settings. \n\nWhen the agent has local avoidance enabled, these settings will be copied into a Pathfinding.ECS.RVO.RVOAgent component which is attached to the agent.\n\n[more in online documentation] +Pathfinding.ECS.MovementControl.endOfPath movementcontrol.html#endOfPath The end of the current path. \n\nThis informs the local avoidance system about the final desired destination for the agent. This is used to make agents stop if the destination is crowded and it cannot reach its destination.\n\nIf this is not set, agents will often move forever around a crowded destination, always trying to find some way to get closer, but never finding it. +Pathfinding.ECS.MovementControl.hierarchicalNodeIndex movementcontrol.html#hierarchicalNodeIndex The index of the hierarchical node that the agent is currently in. \n\nWill be -1 if the hierarchical node index is not known. \n\n[more in online documentation] +Pathfinding.ECS.MovementControl.maxSpeed movementcontrol.html#maxSpeed The maximum speed at which the agent may move, in meters per second. \n\nIt is recommended to keep this slightly above speed, to allow the local avoidance system to move agents around more efficiently when necessary. +Pathfinding.ECS.MovementControl.overrideLocalAvoidance movementcontrol.html#overrideLocalAvoidance If true, this agent will ignore other agents during local avoidance, but other agents will still avoid this one. \n\nThis is useful for example for a player character which should not avoid other agents, but other agents should avoid the player. +Pathfinding.ECS.MovementControl.rotationSpeed movementcontrol.html#rotationSpeed The speed at which the agent should rotate towards targetRotation + targetRotationOffset, in radians per second. +Pathfinding.ECS.MovementControl.speed movementcontrol.html#speed The speed at which the agent should move towards targetPoint, in meters per second. +Pathfinding.ECS.MovementControl.targetPoint movementcontrol.html#targetPoint The point the agent should move towards. +Pathfinding.ECS.MovementControl.targetRotation movementcontrol.html#targetRotation The desired rotation of the agent, in radians, relative to the current movement plane. \n\n[more in online documentation] +Pathfinding.ECS.MovementControl.targetRotationHint movementcontrol.html#targetRotationHint The desired rotation of the agent, in radians, over a longer time horizon, relative to the current movement plane. \n\nThe targetRotation is usually only over a very short time-horizon, usually a single simulation time step. This variable is used to provide a hint of where the agent wants to rotate to over a slightly longer time scale (on the order of a second or so). It is not used to control movement directly, but it may be used to guide animations, or rotation smoothing.\n\nIf no better hint is available, this should be set to the same value as targetRotation.\n\n[more in online documentation] +Pathfinding.ECS.MovementControl.targetRotationOffset movementcontrol.html#targetRotationOffset Additive modifier to targetRotation, in radians. \n\nThis is used by the local avoidance system to rotate the agent, without this causing a feedback loop. This extra rotation will be ignored by the control system which decides how the agent *wants* to move. It will instead be directly applied to the agent. +Pathfinding.ECS.MovementPlaneFromGraphSystem.JobMovementPlaneFromGraph.movementPlanes jobmovementplanefromgraph.html#movementPlanes +Pathfinding.ECS.MovementPlaneFromGraphSystem.JobMovementPlaneFromNavmeshNormal.dt jobmovementplanefromnavmeshnormal.html#dt +Pathfinding.ECS.MovementPlaneFromGraphSystem.JobMovementPlaneFromNavmeshNormal.que jobmovementplanefromnavmeshnormal.html#que +Pathfinding.ECS.MovementPlaneFromGraphSystem.JobMovementPlaneFromNavmeshNormal.sphereSamplePoints jobmovementplanefromnavmeshnormal.html#sphereSamplePoints +Pathfinding.ECS.MovementPlaneFromGraphSystem.JobMovementPlaneFromNavmeshNormal.vertices jobmovementplanefromnavmeshnormal.html#vertices +Pathfinding.ECS.MovementPlaneFromGraphSystem.entityQueryGraph movementplanefromgraphsystem.html#entityQueryGraph +Pathfinding.ECS.MovementPlaneFromGraphSystem.entityQueryNormal movementplanefromgraphsystem.html#entityQueryNormal +Pathfinding.ECS.MovementPlaneFromGraphSystem.graphNodeQueue movementplanefromgraphsystem.html#graphNodeQueue +Pathfinding.ECS.MovementPlaneFromGraphSystem.sphereSamplePoints movementplanefromgraphsystem.html#sphereSamplePoints +Pathfinding.ECS.MovementPlaneSource ecs.html#MovementPlaneSource How to calculate which direction is "up" for the agent. +Pathfinding.ECS.MovementSettings.debugFlags movementsettings.html#debugFlags Flags for enabling debug rendering in the scene view. +Pathfinding.ECS.MovementSettings.follower movementsettings.html#follower Additional movement settings. +Pathfinding.ECS.MovementSettings.groundMask movementsettings.html#groundMask Layer mask to use for ground placement. \n\nMake sure this does not include the layer of any colliders attached to this gameobject.\n\n[more in online documentation] +Pathfinding.ECS.MovementSettings.isStopped movementsettings.html#isStopped Gets or sets if the agent should stop moving. \n\nIf this is set to true the agent will immediately start to slow down as quickly as it can to come to a full stop. The agent will still react to local avoidance and gravity (if applicable), but it will not try to move in any particular direction.\n\nThe current path of the agent will not be cleared, so when this is set to false again the agent will continue moving along the previous path.\n\nThis is a purely user-controlled parameter, so for example it is not set automatically when the agent stops moving because it has reached the target. Use reachedEndOfPath for that.\n\nIf this property is set to true while the agent is traversing an off-mesh link (RichAI script only), then the agent will continue traversing the link and stop once it has completed it.\n\n[more in online documentation]\nThe steeringTarget property will continue to indicate the point which the agent would move towards if it would not be stopped. +Pathfinding.ECS.MovementSettings.movementPlaneSource movementsettings.html#movementPlaneSource How to calculate which direction is "up" for the agent. \n\n[more in online documentation] +Pathfinding.ECS.MovementSettings.positionSmoothing movementsettings.html#positionSmoothing +Pathfinding.ECS.MovementSettings.rotationSmoothing movementsettings.html#rotationSmoothing How much to smooth the visual rotation of the agent. \n\nThis does not affect movement, but smoothes out how the agent rotates visually.\n\nRecommended values are between 0.0 and 0.5. A value of zero will disable smoothing completely.\n\nThe smoothing is done primarily using an exponential moving average, but with a small linear term to make the rotation converge faster when the agent is almost facing the desired direction.\n\nAdding smoothing will make the visual rotation of the agent lag a bit behind the actual rotation. Too much smoothing may make the agent seem sluggish, and appear to move sideways.\n\nThe unit for this field is seconds. +Pathfinding.ECS.MovementSettings.stopDistance movementsettings.html#stopDistance How far away from the destination should the agent aim to stop, in world units. \n\nIf the agent is within this distance from the destination point it will be considered to have reached the destination.\n\nEven if you want the agent to stop precisely at a given point, it is recommended to keep this slightly above zero. If it is exactly zero, the agent may have a hard time deciding that it has actually reached the end of the path, due to floating point errors and such.\n\n[more in online documentation] +Pathfinding.ECS.MovementState.ReachedDestinationFlag movementstate.html#ReachedDestinationFlag +Pathfinding.ECS.MovementState.ReachedEndOfPartFlag movementstate.html#ReachedEndOfPartFlag +Pathfinding.ECS.MovementState.ReachedEndOfPathFlag movementstate.html#ReachedEndOfPathFlag +Pathfinding.ECS.MovementState.TraversingLastPartFlag movementstate.html#TraversingLastPartFlag +Pathfinding.ECS.MovementState.closestOnNavmesh movementstate.html#closestOnNavmesh The closest point on the navmesh to the agent. \n\nThe agent will be snapped to this point. +Pathfinding.ECS.MovementState.endOfPath movementstate.html#endOfPath The end of the current path. \n\nNote that the agent may be heading towards an off-mesh link which is not the same as this point. +Pathfinding.ECS.MovementState.flags movementstate.html#flags Bitmask for various flags. +Pathfinding.ECS.MovementState.followerState movementstate.html#followerState State of the PID controller for the movement. +Pathfinding.ECS.MovementState.graphIndex movementstate.html#graphIndex The index of the graph that the agent is currently traversing. \n\nWill be GraphNode.InvalidGraphIndex if the agent has no path, or the node that the agent is traversing has been destroyed. +Pathfinding.ECS.MovementState.hierarchicalNodeIndex movementstate.html#hierarchicalNodeIndex The index of the hierarchical node that the agent is currently in. \n\nWill be -1 if the hierarchical node index is not known.\n\nThis field is valid during all system updates in the AIMovementSystemGroup. It is not guaranteed to be valid after that group has finished running, as graph updates may have changed the graph.\n\n[more in online documentation] +Pathfinding.ECS.MovementState.isOnValidNode movementstate.html#isOnValidNode True if the agent is currently on a valid node. \n\nThis is true if the agent has a path, and the node that the agent is traversing is walkable and not destroyed.\n\nIf false, the hierarchicalNodeIndex and graphIndex fields are invalid. +Pathfinding.ECS.MovementState.nextCorner movementstate.html#nextCorner The next corner in the path. +Pathfinding.ECS.MovementState.pathTracerVersion movementstate.html#pathTracerVersion Version number of PathTracer.version when the movement state was last updated. \n\nIn particular, closestOnNavmesh, nextCorner, endOfPath, remainingDistanceToEndOfPart, reachedDestination and reachedEndOfPath will only be considered up to date if this is equal to the current version number of the path tracer. +Pathfinding.ECS.MovementState.positionOffset movementstate.html#positionOffset Offset from the agent's internal position to its visual position. \n\nThis is used when position smoothing is enabled. Otherwise it is zero. +Pathfinding.ECS.MovementState.reachedDestination movementstate.html#reachedDestination True if the agent has reached its destination. \n\nThe destination will be considered reached if all of these conditions are met:\n- The agent has a path\n\n- The path is not stale\n\n- The destination is not significantly below the agent's feet.\n\n- The destination is not significantly above the agent's head.\n\n- The agent is on the last part of the path (there are no more remaining off-mesh links).\n\n- The remaining distance to the end of the path + the distance from the end of the path to the destination is less than MovementSettings.stopDistance. +Pathfinding.ECS.MovementState.reachedDestinationAndOrientation movementstate.html#reachedDestinationAndOrientation True if the agent has reached its destination and is facing the desired orientation. \n\nThis will become true if all of these conditions are met:\n- reachedDestination is true\n\n- The agent is facing the desired facing direction as specified in DestinationPoint.facingDirection. +Pathfinding.ECS.MovementState.reachedDestinationAndOrientationFlag movementstate.html#reachedDestinationAndOrientationFlag +Pathfinding.ECS.MovementState.reachedEndOfPart movementstate.html#reachedEndOfPart True if the agent has reached the end of the current part in the path. \n\nThe end of the current part will be considered reached if all of these conditions are met:\n- The agent has a path\n\n- The path is not stale\n\n- The end of the current part is not significantly below the agent's feet.\n\n- The end of the current part is not significantly above the agent's head.\n\n- The remaining distance to the end of the part is not significantly larger than the agent's radius. +Pathfinding.ECS.MovementState.reachedEndOfPath movementstate.html#reachedEndOfPath True if the agent has reached the end of the path. \n\nThe end of the path will be considered reached if all of these conditions are met:\n- The agent has a path\n\n- The path is not stale\n\n- The end of the path is not significantly below the agent's feet.\n\n- The end of the path is not significantly above the agent's head.\n\n- The agent is on the last part of the path (there are no more remaining off-mesh links).\n\n- The remaining distance to the end of the path is less than MovementSettings.stopDistance. +Pathfinding.ECS.MovementState.reachedEndOfPathAndOrientation movementstate.html#reachedEndOfPathAndOrientation True if the agent has reached its destination and is facing the desired orientation. \n\nThis will become true if all of these conditions are met:\n- reachedEndOfPath is true\n\n- The agent is facing the desired facing direction as specified in DestinationPoint.facingDirection. +Pathfinding.ECS.MovementState.reachedEndOfPathAndOrientationFlag movementstate.html#reachedEndOfPathAndOrientationFlag +Pathfinding.ECS.MovementState.remainingDistanceToEndOfPart movementstate.html#remainingDistanceToEndOfPart The remaining distance until the end of the path, or the next off-mesh link. +Pathfinding.ECS.MovementState.rotationOffset movementstate.html#rotationOffset The current additional rotation that is applied to the agent. \n\nThis is used by the local avoidance system to rotate the agent, without this causing a feedback loop.\n\n[more in online documentation] +Pathfinding.ECS.MovementState.rotationOffset2 movementstate.html#rotationOffset2 An additional, purely visual, rotation offset. \n\nThis is used for rotation smoothing, but does not affect the movement of the agent. +Pathfinding.ECS.MovementState.traversingLastPart movementstate.html#traversingLastPart True if the agent is traversing the last part of the path. \n\nIf false, the agent will have to traverse at least one off-mesh link before it gets to its destination. +Pathfinding.ECS.MovementStatistics.estimatedVelocity movementstatistics.html#estimatedVelocity The estimated velocity that the agent is moving with. \n\nThis includes all form of movement, including local avoidance and gravity. +Pathfinding.ECS.MovementStatistics.lastPosition movementstatistics.html#lastPosition The position of the agent at the end of the last movement simulation step. +Pathfinding.ECS.MovementTarget.isReached movementtarget.html#isReached +Pathfinding.ECS.MovementTarget.reached movementtarget.html#reached +Pathfinding.ECS.PollPendingPathsSystem.anyPendingPaths pollpendingpathssystem.html#anyPendingPaths +Pathfinding.ECS.PollPendingPathsSystem.entityQueryPrepare pollpendingpathssystem.html#entityQueryPrepare +Pathfinding.ECS.PollPendingPathsSystem.jobRepairPathScheduler pollpendingpathssystem.html#jobRepairPathScheduler +Pathfinding.ECS.PollPendingPathsSystem.onPathsCalculated pollpendingpathssystem.html#onPathsCalculated +Pathfinding.ECS.RVO.AgentIndex.DeletedBit agentindex.html#DeletedBit +Pathfinding.ECS.RVO.AgentIndex.Index agentindex.html#Index +Pathfinding.ECS.RVO.AgentIndex.IndexMask agentindex.html#IndexMask +Pathfinding.ECS.RVO.AgentIndex.Valid agentindex.html#Valid +Pathfinding.ECS.RVO.AgentIndex.Version agentindex.html#Version +Pathfinding.ECS.RVO.AgentIndex.VersionMask agentindex.html#VersionMask +Pathfinding.ECS.RVO.AgentIndex.VersionOffset agentindex.html#VersionOffset +Pathfinding.ECS.RVO.AgentIndex.packedAgentIndex agentindex.html#packedAgentIndex +Pathfinding.ECS.RVO.RVOAgent.Default rvoagent.html#Default Good default settings for an RVO agent. +Pathfinding.ECS.RVO.RVOAgent.agentTimeHorizon rvoagent.html#agentTimeHorizon How far into the future to look for collisions with other agents (in seconds) +Pathfinding.ECS.RVO.RVOAgent.collidesWith rvoagent.html#collidesWith Layer mask specifying which layers this agent will avoid. \n\nYou can set it as CollidesWith = RVOLayer.DefaultAgent | RVOLayer.Layer3 | RVOLayer.Layer6 ...\n\nThis can be very useful in games which have multiple teams of some sort. For example you usually want the agents in one team to avoid each other, but you do not want them to avoid the enemies.\n\nThis field only affects which other agents that this agent will avoid, it does not affect how other agents react to this agent.\n\n[more in online documentation] +Pathfinding.ECS.RVO.RVOAgent.debug rvoagent.html#debug Enables drawing debug information in the scene view. +Pathfinding.ECS.RVO.RVOAgent.flowFollowingStrength rvoagent.html#flowFollowingStrength +Pathfinding.ECS.RVO.RVOAgent.layer rvoagent.html#layer Specifies the avoidance layer for this agent. \n\nThe collidesWith mask on other agents will determine if they will avoid this agent. +Pathfinding.ECS.RVO.RVOAgent.locked rvoagent.html#locked A locked unit cannot move. \n\nOther units will still avoid it but avoidance quality is not the best. +Pathfinding.ECS.RVO.RVOAgent.maxNeighbours rvoagent.html#maxNeighbours Max number of other agents to take into account. \n\nA smaller value can reduce CPU load, a higher value can lead to better local avoidance quality. +Pathfinding.ECS.RVO.RVOAgent.obstacleTimeHorizon rvoagent.html#obstacleTimeHorizon How far into the future to look for collisions with obstacles (in seconds) +Pathfinding.ECS.RVO.RVOAgent.priority rvoagent.html#priority How strongly other agents will avoid this agent. \n\nUsually a value between 0 and 1. Agents with similar priorities will avoid each other with an equal strength. If an agent sees another agent with a higher priority than itself it will avoid that agent more strongly. In the extreme case (e.g this agent has a priority of 0 and the other agent has a priority of 1) it will treat the other agent as being a moving obstacle. Similarly if an agent sees another agent with a lower priority than itself it will avoid that agent less.\n\nIn general the avoidance strength for this agent is: <b>[code in online documentation]</b> +Pathfinding.ECS.RVO.RVOAgent.priorityMultiplier rvoagent.html#priorityMultiplier Priority multiplier. \n\nThis functions identically to the priority, however it is not exposed in the Unity inspector. It is primarily used by the Pathfinding.RVO.RVODestinationCrowdedBehavior. +Pathfinding.ECS.RVO.RVOSystem.JobCopyFromEntitiesToRVOSimulator.agentData jobcopyfromentitiestorvosimulator.html#agentData +Pathfinding.ECS.RVO.RVOSystem.JobCopyFromEntitiesToRVOSimulator.agentOffMeshLinkTraversalLookup jobcopyfromentitiestorvosimulator.html#agentOffMeshLinkTraversalLookup +Pathfinding.ECS.RVO.RVOSystem.JobCopyFromEntitiesToRVOSimulator.agentOutputData jobcopyfromentitiestorvosimulator.html#agentOutputData +Pathfinding.ECS.RVO.RVOSystem.JobCopyFromEntitiesToRVOSimulator.dt jobcopyfromentitiestorvosimulator.html#dt +Pathfinding.ECS.RVO.RVOSystem.JobCopyFromEntitiesToRVOSimulator.movementPlaneMode jobcopyfromentitiestorvosimulator.html#movementPlaneMode +Pathfinding.ECS.RVO.RVOSystem.JobCopyFromRVOSimulatorToEntities.MaximumCirclePackingDensity jobcopyfromrvosimulatortoentities.html#MaximumCirclePackingDensity See <a href="https://en.wikipedia.org/wiki/Circle_packing">https://en.wikipedia.org/wiki/Circle_packing</a>. +Pathfinding.ECS.RVO.RVOSystem.JobCopyFromRVOSimulatorToEntities.agentData jobcopyfromrvosimulatortoentities.html#agentData +Pathfinding.ECS.RVO.RVOSystem.JobCopyFromRVOSimulatorToEntities.agentOutputData jobcopyfromrvosimulatortoentities.html#agentOutputData +Pathfinding.ECS.RVO.RVOSystem.JobCopyFromRVOSimulatorToEntities.quadtree jobcopyfromrvosimulatortoentities.html#quadtree +Pathfinding.ECS.RVO.RVOSystem.agentOffMeshLinkTraversalLookup rvosystem.html#agentOffMeshLinkTraversalLookup +Pathfinding.ECS.RVO.RVOSystem.entityQuery rvosystem.html#entityQuery +Pathfinding.ECS.RVO.RVOSystem.lastSimulator rvosystem.html#lastSimulator Keeps track of the last simulator that this RVOSystem saw. \n\nThis is a weak GCHandle to allow it to be stored in an ISystem. +Pathfinding.ECS.RVO.RVOSystem.shouldBeAddedToSimulation rvosystem.html#shouldBeAddedToSimulation +Pathfinding.ECS.RVO.RVOSystem.shouldBeRemovedFromSimulation rvosystem.html#shouldBeRemovedFromSimulation +Pathfinding.ECS.RVO.RVOSystem.withAgentIndex rvosystem.html#withAgentIndex +Pathfinding.ECS.ResolvedMovement.rotationSpeed resolvedmovement.html#rotationSpeed The speed at which the agent should rotate towards targetRotation + targetRotationOffset, in radians per second. +Pathfinding.ECS.ResolvedMovement.speed resolvedmovement.html#speed The speed at which the agent should move towards targetPoint, in meters per second. +Pathfinding.ECS.ResolvedMovement.targetPoint resolvedmovement.html#targetPoint The point the agent should move towards. +Pathfinding.ECS.ResolvedMovement.targetRotation resolvedmovement.html#targetRotation The desired rotation of the agent, in radians, relative to the current movement plane. \n\n[more in online documentation] +Pathfinding.ECS.ResolvedMovement.targetRotationHint resolvedmovement.html#targetRotationHint The desired rotation of the agent, in radians, over a longer time horizon, relative to the current movement plane. \n\nThe targetRotation is usually only over a very short time-horizon, usually a single simulation time step. This variable is used to provide a hint of where the agent wants to rotate to over a slightly longer time scale (on the order of a second or so). It is not used to control movement directly, but it may be used to guide animations, or rotation smoothing.\n\nIf no better hint is available, this should be set to the same value as targetRotation.\n\n[more in online documentation] +Pathfinding.ECS.ResolvedMovement.targetRotationOffset resolvedmovement.html#targetRotationOffset Additive modifier to targetRotation, in radians. \n\nThis is used by the local avoidance system to rotate the agent, without this causing a feedback loop. This extra rotation will be ignored by the control system which decides how the agent *wants* to move. It will instead be directly applied to the agent. +Pathfinding.ECS.ResolvedMovement.turningRadiusMultiplier resolvedmovement.html#turningRadiusMultiplier +Pathfinding.ECS.SyncTransformsToEntitiesSystem.SyncTransformsToEntitiesJob.entities synctransformstoentitiesjob.html#entities +Pathfinding.ECS.SyncTransformsToEntitiesSystem.SyncTransformsToEntitiesJob.entityPositions synctransformstoentitiesjob.html#entityPositions +Pathfinding.ECS.SyncTransformsToEntitiesSystem.SyncTransformsToEntitiesJob.movementState synctransformstoentitiesjob.html#movementState +Pathfinding.ECS.SyncTransformsToEntitiesSystem.SyncTransformsToEntitiesJob.orientationYAxisForward synctransformstoentitiesjob.html#orientationYAxisForward +Pathfinding.ECS.SyncTransformsToEntitiesSystem.SyncTransformsToEntitiesJob.syncPositionWithTransform synctransformstoentitiesjob.html#syncPositionWithTransform +Pathfinding.ECS.SyncTransformsToEntitiesSystem.SyncTransformsToEntitiesJob.syncRotationWithTransform synctransformstoentitiesjob.html#syncRotationWithTransform +Pathfinding.ECS.SyncTransformsToEntitiesSystem.YAxisForwardToZAxisForward synctransformstoentitiessystem.html#YAxisForwardToZAxisForward +Pathfinding.ECS.SyncTransformsToEntitiesSystem.ZAxisForwardToYAxisForward synctransformstoentitiessystem.html#ZAxisForwardToYAxisForward +Pathfinding.EditorBase.cachedTooltips editorbase.html#cachedTooltips +Pathfinding.EditorBase.cachedURLs editorbase.html#cachedURLs +Pathfinding.EditorBase.content editorbase.html#content +Pathfinding.EditorBase.getDocumentationURL editorbase.html#getDocumentationURL +Pathfinding.EditorBase.noOptions editorbase.html#noOptions +Pathfinding.EditorBase.props editorbase.html#props +Pathfinding.EditorBase.remainingUnhandledProperties editorbase.html#remainingUnhandledProperties +Pathfinding.EditorBase.showInDocContent editorbase.html#showInDocContent +Pathfinding.EditorGUILayoutx.dummyList editorguilayoutx.html#dummyList +Pathfinding.EditorGUILayoutx.lastUpdateTick editorguilayoutx.html#lastUpdateTick +Pathfinding.EditorGUILayoutx.layerNames editorguilayoutx.html#layerNames +Pathfinding.EditorResourceHelper.GizmoLineMaterial editorresourcehelper.html#GizmoLineMaterial +Pathfinding.EditorResourceHelper.GizmoSurfaceMaterial editorresourcehelper.html#GizmoSurfaceMaterial +Pathfinding.EditorResourceHelper.HandlesAALineTexture editorresourcehelper.html#HandlesAALineTexture +Pathfinding.EditorResourceHelper.editorAssets editorresourcehelper.html#editorAssets Path to the editor assets folder for the A* Pathfinding Project. \n\nIf this path turns out to be incorrect, the script will try to find the correct path \n\n[more in online documentation] +Pathfinding.EditorResourceHelper.handlesAALineTex editorresourcehelper.html#handlesAALineTex +Pathfinding.EditorResourceHelper.lineMat editorresourcehelper.html#lineMat +Pathfinding.EditorResourceHelper.surfaceMat editorresourcehelper.html#surfaceMat +Pathfinding.EndingConditionDistance.maxGScore endingconditiondistance.html#maxGScore Max G score a node may have. +Pathfinding.EndingConditionProximity.maxDistance endingconditionproximity.html#maxDistance Maximum world distance to the target node before terminating the path. +Pathfinding.Examples.AnimationLinkTraverser.ai animationlinktraverser.html#ai +Pathfinding.Examples.AnimationLinkTraverser.anim animationlinktraverser.html#anim +Pathfinding.Examples.Astar3DButton.node astar3dbutton.html#node +Pathfinding.Examples.BezierMover.averageCurvature beziermover.html#averageCurvature +Pathfinding.Examples.BezierMover.points beziermover.html#points +Pathfinding.Examples.BezierMover.speed beziermover.html#speed +Pathfinding.Examples.BezierMover.tiltAmount beziermover.html#tiltAmount +Pathfinding.Examples.BezierMover.tiltSmoothing beziermover.html#tiltSmoothing +Pathfinding.Examples.BezierMover.time beziermover.html#time +Pathfinding.Examples.DocumentationButton.UrlBase documentationbutton.html#UrlBase +Pathfinding.Examples.DocumentationButton.page documentationbutton.html#page +Pathfinding.Examples.DoorController.bounds doorcontroller.html#bounds +Pathfinding.Examples.DoorController.closedtag doorcontroller.html#closedtag +Pathfinding.Examples.DoorController.open doorcontroller.html#open +Pathfinding.Examples.DoorController.opentag doorcontroller.html#opentag +Pathfinding.Examples.DoorController.updateGraphsWithGUO doorcontroller.html#updateGraphsWithGUO +Pathfinding.Examples.DoorController.yOffset doorcontroller.html#yOffset +Pathfinding.Examples.GroupController.adjustCamera groupcontroller.html#adjustCamera +Pathfinding.Examples.GroupController.cam groupcontroller.html#cam +Pathfinding.Examples.GroupController.end groupcontroller.html#end +Pathfinding.Examples.GroupController.rad2Deg groupcontroller.html#rad2Deg Radians to degrees constant. +Pathfinding.Examples.GroupController.selection groupcontroller.html#selection +Pathfinding.Examples.GroupController.selectionBox groupcontroller.html#selectionBox +Pathfinding.Examples.GroupController.sim groupcontroller.html#sim +Pathfinding.Examples.GroupController.start groupcontroller.html#start +Pathfinding.Examples.GroupController.wasDown groupcontroller.html#wasDown +Pathfinding.Examples.HexagonTrigger.anim hexagontrigger.html#anim +Pathfinding.Examples.HexagonTrigger.visible hexagontrigger.html#visible +Pathfinding.Examples.HighlightOnHover.highlight highlightonhover.html#highlight +Pathfinding.Examples.Interactable.ActivateParticleSystem.particleSystem activateparticlesystem.html#particleSystem +Pathfinding.Examples.Interactable.AnimatorPlay.animator animatorplay.html#animator +Pathfinding.Examples.Interactable.AnimatorPlay.normalizedTime animatorplay.html#normalizedTime +Pathfinding.Examples.Interactable.AnimatorPlay.stateName animatorplay.html#stateName +Pathfinding.Examples.Interactable.AnimatorSetBoolAction.animator animatorsetboolaction.html#animator +Pathfinding.Examples.Interactable.AnimatorSetBoolAction.propertyName animatorsetboolaction.html#propertyName +Pathfinding.Examples.Interactable.AnimatorSetBoolAction.value animatorsetboolaction.html#value +Pathfinding.Examples.Interactable.CallFunction.function callfunction.html#function +Pathfinding.Examples.Interactable.CoroutineAction interactable.html#CoroutineAction +Pathfinding.Examples.Interactable.DelayAction.delay delayaction.html#delay +Pathfinding.Examples.Interactable.InstantiatePrefab.position instantiateprefab.html#position +Pathfinding.Examples.Interactable.InstantiatePrefab.prefab instantiateprefab.html#prefab +Pathfinding.Examples.Interactable.InteractAction.interactable interactaction.html#interactable +Pathfinding.Examples.Interactable.MoveToAction.destination movetoaction.html#destination +Pathfinding.Examples.Interactable.MoveToAction.useRotation movetoaction.html#useRotation +Pathfinding.Examples.Interactable.MoveToAction.waitUntilReached movetoaction.html#waitUntilReached +Pathfinding.Examples.Interactable.SetObjectActiveAction.active setobjectactiveaction.html#active +Pathfinding.Examples.Interactable.SetObjectActiveAction.target setobjectactiveaction.html#target +Pathfinding.Examples.Interactable.SetTransformAction.setPosition settransformaction.html#setPosition +Pathfinding.Examples.Interactable.SetTransformAction.setRotation settransformaction.html#setRotation +Pathfinding.Examples.Interactable.SetTransformAction.setScale settransformaction.html#setScale +Pathfinding.Examples.Interactable.SetTransformAction.source settransformaction.html#source +Pathfinding.Examples.Interactable.SetTransformAction.transform settransformaction.html#transform +Pathfinding.Examples.Interactable.TeleportAgentAction.destination teleportagentaction.html#destination +Pathfinding.Examples.Interactable.TeleportAgentOnLinkAction.Destination teleportagentonlinkaction.html#Destination +Pathfinding.Examples.Interactable.TeleportAgentOnLinkAction.destination teleportagentonlinkaction.html#destination +Pathfinding.Examples.Interactable.actions interactable.html#actions +Pathfinding.Examples.InteractableEditor.actions interactableeditor.html#actions +Pathfinding.Examples.LightweightRVO.LightweightAgentData.color lightweightagentdata.html#color +Pathfinding.Examples.LightweightRVO.LightweightAgentData.maxSpeed lightweightagentdata.html#maxSpeed +Pathfinding.Examples.LightweightRVO.LightweightRVOControlSystem.AlignAgentWithMovementDirectionJob.deltaTime alignagentwithmovementdirectionjob.html#deltaTime +Pathfinding.Examples.LightweightRVO.LightweightRVOControlSystem.AlignAgentWithMovementDirectionJob.rotationSpeed alignagentwithmovementdirectionjob.html#rotationSpeed +Pathfinding.Examples.LightweightRVO.LightweightRVOControlSystem.JobControlAgents.debug jobcontrolagents.html#debug +Pathfinding.Examples.LightweightRVO.LightweightRVOControlSystem.JobControlAgents.deltaTime jobcontrolagents.html#deltaTime +Pathfinding.Examples.LightweightRVO.LightweightRVOControlSystem.debug lightweightrvocontrolsystem.html#debug Determines what kind of debug info the RVO system should render as gizmos. +Pathfinding.Examples.LightweightRVO.LightweightRVOControlSystem.entityQueryControl lightweightrvocontrolsystem.html#entityQueryControl +Pathfinding.Examples.LightweightRVO.LightweightRVOControlSystem.entityQueryDirection lightweightrvocontrolsystem.html#entityQueryDirection +Pathfinding.Examples.LightweightRVO.LightweightRVOMoveSystem.JobMoveAgents.deltaTime jobmoveagents.html#deltaTime +Pathfinding.Examples.LightweightRVO.LightweightRVOMoveSystem.entityQuery lightweightrvomovesystem.html#entityQuery +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.JobGenerateMesh.renderingOffset jobgeneratemesh.html#renderingOffset +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.JobGenerateMesh.tris jobgeneratemesh.html#tris +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.JobGenerateMesh.verts jobgeneratemesh.html#verts +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.Vertex.color vertex.html#color +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.Vertex.position vertex.html#position +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.Vertex.uv vertex.html#uv +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.entityQuery lightweightrvorendersystem.html#entityQuery +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.material lightweightrvorendersystem.html#material Material for rendering. +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.mesh lightweightrvorendersystem.html#mesh Mesh for rendering. +Pathfinding.Examples.LightweightRVO.LightweightRVORenderSystem.renderingOffset lightweightrvorendersystem.html#renderingOffset Offset with which to render the mesh from the agent's original positions. +Pathfinding.Examples.LightweightRVO.RVOExampleType lightweightrvo.html#RVOExampleType +Pathfinding.Examples.LightweightRVO.agentCount lightweightrvo.html#agentCount Number of agents created at start. +Pathfinding.Examples.LightweightRVO.agentTimeHorizon lightweightrvo.html#agentTimeHorizon How far in the future too look for agents. +Pathfinding.Examples.LightweightRVO.debug lightweightrvo.html#debug Bitmas of debugging options to enable for the agents. +Pathfinding.Examples.LightweightRVO.exampleScale lightweightrvo.html#exampleScale How large is the area in which the agents are distributed when starting the simulation. +Pathfinding.Examples.LightweightRVO.material lightweightrvo.html#material +Pathfinding.Examples.LightweightRVO.maxNeighbours lightweightrvo.html#maxNeighbours Max number of neighbour agents to take into account. +Pathfinding.Examples.LightweightRVO.maxSpeed lightweightrvo.html#maxSpeed Max speed for an agent. +Pathfinding.Examples.LightweightRVO.obstacleTimeHorizon lightweightrvo.html#obstacleTimeHorizon How far in the future too look for obstacles. +Pathfinding.Examples.LightweightRVO.radius lightweightrvo.html#radius Agent radius. +Pathfinding.Examples.LightweightRVO.renderingOffset lightweightrvo.html#renderingOffset Offset from the agent position the actual drawn postition. \n\nUsed to get rid of z-buffer issues +Pathfinding.Examples.LightweightRVO.type lightweightrvo.html#type How the agents are distributed when starting the simulation. +Pathfinding.Examples.LocalSpaceRichAI.graph localspacerichai.html#graph Root of the object we are moving on. +Pathfinding.Examples.ManualRVOAgent.rvo manualrvoagent.html#rvo +Pathfinding.Examples.ManualRVOAgent.speed manualrvoagent.html#speed +Pathfinding.Examples.MecanimBridge.InputMagnitudeKey mecanimbridge.html#InputMagnitudeKey +Pathfinding.Examples.MecanimBridge.InputMagnitudeKeyHash mecanimbridge.html#InputMagnitudeKeyHash +Pathfinding.Examples.MecanimBridge.NormalizedSpeedKey mecanimbridge.html#NormalizedSpeedKey +Pathfinding.Examples.MecanimBridge.NormalizedSpeedKeyHash mecanimbridge.html#NormalizedSpeedKeyHash +Pathfinding.Examples.MecanimBridge.XAxisKey mecanimbridge.html#XAxisKey +Pathfinding.Examples.MecanimBridge.XAxisKeyHash mecanimbridge.html#XAxisKeyHash +Pathfinding.Examples.MecanimBridge.YAxisKey mecanimbridge.html#YAxisKey +Pathfinding.Examples.MecanimBridge.YAxisKeyHash mecanimbridge.html#YAxisKeyHash +Pathfinding.Examples.MecanimBridge.ai mecanimbridge.html#ai Cached reference to the movement script. +Pathfinding.Examples.MecanimBridge.angularVelocitySmoothing mecanimbridge.html#angularVelocitySmoothing Smoothing factor for the angular velocity, in seconds. \n\n[more in online documentation] +Pathfinding.Examples.MecanimBridge.anim mecanimbridge.html#anim Cached Animator component. +Pathfinding.Examples.MecanimBridge.footTransforms mecanimbridge.html#footTransforms Cached reference to the left and right feet. +Pathfinding.Examples.MecanimBridge.naturalSpeed mecanimbridge.html#naturalSpeed +Pathfinding.Examples.MecanimBridge.prevFootPos mecanimbridge.html#prevFootPos Position of the left and right feet during the previous frame. +Pathfinding.Examples.MecanimBridge.smoothedRotationSpeed mecanimbridge.html#smoothedRotationSpeed +Pathfinding.Examples.MecanimBridge.smoothedVelocity mecanimbridge.html#smoothedVelocity +Pathfinding.Examples.MecanimBridge.tr mecanimbridge.html#tr Cached Transform component. +Pathfinding.Examples.MecanimBridge.velocitySmoothing mecanimbridge.html#velocitySmoothing Smoothing factor for the velocity, in seconds. +Pathfinding.Examples.MecanimBridge2D.RotationMode mecanimbridge2d.html#RotationMode +Pathfinding.Examples.MecanimBridge2D.ai mecanimbridge2d.html#ai Cached reference to the movement script. +Pathfinding.Examples.MecanimBridge2D.anim mecanimbridge2d.html#anim Cached Animator component. +Pathfinding.Examples.MecanimBridge2D.naturalSpeed mecanimbridge2d.html#naturalSpeed The natural movement speed is the speed that the animations are designed for. \n\nOne can for example configure the animator to speed up the animation if the agent moves faster than this, or slow it down if the agent moves slower than this. +Pathfinding.Examples.MecanimBridge2D.rotationMode mecanimbridge2d.html#rotationMode How the agent's rotation is handled. \n\n[more in online documentation] +Pathfinding.Examples.MecanimBridge2D.smoothedVelocity mecanimbridge2d.html#smoothedVelocity +Pathfinding.Examples.MecanimBridge2D.velocitySmoothing mecanimbridge2d.html#velocitySmoothing How much to smooth the velocity of the agent. \n\nThe velocity will be smoothed out over approximately this number of seconds. A value of zero indicates no smoothing. +Pathfinding.Examples.MineBotAI.anim minebotai.html#anim Animation component. \n\nShould hold animations "awake" and "forward" +Pathfinding.Examples.MineBotAI.animationSpeed minebotai.html#animationSpeed Speed relative to velocity with which to play animations. +Pathfinding.Examples.MineBotAI.endOfPathEffect minebotai.html#endOfPathEffect Effect which will be instantiated when end of path is reached. \n\n[more in online documentation] +Pathfinding.Examples.MineBotAI.sleepVelocity minebotai.html#sleepVelocity Minimum velocity for moving. +Pathfinding.Examples.MineBotAnimation.NormalizedSpeedKey minebotanimation.html#NormalizedSpeedKey +Pathfinding.Examples.MineBotAnimation.NormalizedSpeedKeyHash minebotanimation.html#NormalizedSpeedKeyHash +Pathfinding.Examples.MineBotAnimation.ai minebotanimation.html#ai +Pathfinding.Examples.MineBotAnimation.anim minebotanimation.html#anim Animator component. +Pathfinding.Examples.MineBotAnimation.endOfPathEffect minebotanimation.html#endOfPathEffect Effect which will be instantiated when end of path is reached. \n\n[more in online documentation] +Pathfinding.Examples.MineBotAnimation.isAtEndOfPath minebotanimation.html#isAtEndOfPath +Pathfinding.Examples.MineBotAnimation.lastTarget minebotanimation.html#lastTarget Point for the last spawn of endOfPathEffect. +Pathfinding.Examples.MineBotAnimation.naturalSpeed minebotanimation.html#naturalSpeed The natural movement speed is the speed that the animations are designed for. \n\nOne can for example configure the animator to speed up the animation if the agent moves faster than this, or slow it down if the agent moves slower than this. +Pathfinding.Examples.MineBotAnimation.tr minebotanimation.html#tr +Pathfinding.Examples.ObjectPlacer.alignToSurface objectplacer.html#alignToSurface Align created objects to the surface normal where it is created. +Pathfinding.Examples.ObjectPlacer.direct objectplacer.html#direct Flush Graph Updates directly after placing. \n\nSlower, but updates are applied immidiately +Pathfinding.Examples.ObjectPlacer.go objectplacer.html#go GameObject to place. \n\nWhen using a Grid Graph you need to make sure the object's layer is included in the collision mask in the GridGraph settings. +Pathfinding.Examples.ObjectPlacer.issueGUOs objectplacer.html#issueGUOs Issue a graph update object after placement. +Pathfinding.Examples.ObjectPlacer.lastPlacedTime objectplacer.html#lastPlacedTime +Pathfinding.Examples.ObjectPlacer.offset objectplacer.html#offset Global offset of the placed object relative to the mouse cursor. +Pathfinding.Examples.ObjectPlacer.randomizeRotation objectplacer.html#randomizeRotation Randomize rotation of the placed object. +Pathfinding.Examples.PathTypesDemo.DemoMode pathtypesdemo.html#DemoMode +Pathfinding.Examples.PathTypesDemo.activeDemo pathtypesdemo.html#activeDemo +Pathfinding.Examples.PathTypesDemo.aimStrength pathtypesdemo.html#aimStrength +Pathfinding.Examples.PathTypesDemo.constantPathMeshGo pathtypesdemo.html#constantPathMeshGo +Pathfinding.Examples.PathTypesDemo.end pathtypesdemo.html#end Target point of paths. +Pathfinding.Examples.PathTypesDemo.lastFloodPath pathtypesdemo.html#lastFloodPath +Pathfinding.Examples.PathTypesDemo.lastPath pathtypesdemo.html#lastPath +Pathfinding.Examples.PathTypesDemo.lastRender pathtypesdemo.html#lastRender +Pathfinding.Examples.PathTypesDemo.lineMat pathtypesdemo.html#lineMat Material used for rendering paths. +Pathfinding.Examples.PathTypesDemo.lineWidth pathtypesdemo.html#lineWidth +Pathfinding.Examples.PathTypesDemo.multipoints pathtypesdemo.html#multipoints +Pathfinding.Examples.PathTypesDemo.onlyShortestPath pathtypesdemo.html#onlyShortestPath +Pathfinding.Examples.PathTypesDemo.pathOffset pathtypesdemo.html#pathOffset Offset from the real path to where it is rendered. \n\nUsed to avoid z-fighting +Pathfinding.Examples.PathTypesDemo.searchLength pathtypesdemo.html#searchLength +Pathfinding.Examples.PathTypesDemo.spread pathtypesdemo.html#spread +Pathfinding.Examples.PathTypesDemo.squareMat pathtypesdemo.html#squareMat Material used for rendering result of the ConstantPath. +Pathfinding.Examples.PathTypesDemo.start pathtypesdemo.html#start Start of paths. +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.density proceduralprefab.html#density Number of objects per square world unit. +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.maxScale proceduralprefab.html#maxScale Maximum scale of prefab. +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.minScale proceduralprefab.html#minScale Minimum scale of prefab. +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.perlin proceduralprefab.html#perlin Multiply by [perlin noise]. \n\nValue from 0 to 1 indicating weight. +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.perlinOffset proceduralprefab.html#perlinOffset Some offset to avoid identical density maps. +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.perlinPower proceduralprefab.html#perlinPower Perlin will be raised to this power. \n\nA higher value gives more distinct edges +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.perlinScale proceduralprefab.html#perlinScale Perlin noise scale. \n\nA higher value spreads out the maximums and minimums of the density. +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.prefab proceduralprefab.html#prefab Prefab to use. +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.random proceduralprefab.html#random Multiply by [random]. \n\nValue from 0 to 1 indicating weight. +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.randomRotation proceduralprefab.html#randomRotation +Pathfinding.Examples.ProceduralWorld.ProceduralPrefab.singleFixed proceduralprefab.html#singleFixed If checked, a single object will be created in the center of each tile. +Pathfinding.Examples.ProceduralWorld.ProceduralTile.destroyed proceduraltile.html#destroyed +Pathfinding.Examples.ProceduralWorld.ProceduralTile.ie proceduraltile.html#ie +Pathfinding.Examples.ProceduralWorld.ProceduralTile.rnd proceduraltile.html#rnd +Pathfinding.Examples.ProceduralWorld.ProceduralTile.root proceduraltile.html#root +Pathfinding.Examples.ProceduralWorld.ProceduralTile.world proceduraltile.html#world +Pathfinding.Examples.ProceduralWorld.ProceduralTile.x proceduraltile.html#x +Pathfinding.Examples.ProceduralWorld.ProceduralTile.z proceduraltile.html#z +Pathfinding.Examples.ProceduralWorld.RotationRandomness proceduralworld.html#RotationRandomness +Pathfinding.Examples.ProceduralWorld.disableAsyncLoadWithinRange proceduralworld.html#disableAsyncLoadWithinRange +Pathfinding.Examples.ProceduralWorld.prefabs proceduralworld.html#prefabs +Pathfinding.Examples.ProceduralWorld.range proceduralworld.html#range How far away to generate tiles. +Pathfinding.Examples.ProceduralWorld.staticBatching proceduralworld.html#staticBatching Enable static batching on generated tiles. \n\nWill improve overall FPS, but might cause FPS drops on some frames when static batching is done +Pathfinding.Examples.ProceduralWorld.subTiles proceduralworld.html#subTiles +Pathfinding.Examples.ProceduralWorld.target proceduralworld.html#target +Pathfinding.Examples.ProceduralWorld.tileGenerationQueue proceduralworld.html#tileGenerationQueue +Pathfinding.Examples.ProceduralWorld.tileSize proceduralworld.html#tileSize World size of tiles. +Pathfinding.Examples.ProceduralWorld.tiles proceduralworld.html#tiles All tiles. +Pathfinding.Examples.RTS.BTContext.animator btcontext.html#animator +Pathfinding.Examples.RTS.BTContext.transform btcontext.html#transform +Pathfinding.Examples.RTS.BTContext.unit btcontext.html#unit +Pathfinding.Examples.RTS.BTMove.destination btmove.html#destination +Pathfinding.Examples.RTS.BTNode.lastStatus btnode.html#lastStatus +Pathfinding.Examples.RTS.BTSelector.childIndex btselector.html#childIndex +Pathfinding.Examples.RTS.BTSelector.children btselector.html#children +Pathfinding.Examples.RTS.BTSequence.childIndex btsequence.html#childIndex +Pathfinding.Examples.RTS.BTSequence.children btsequence.html#children +Pathfinding.Examples.RTS.BTTransparent.child bttransparent.html#child +Pathfinding.Examples.RTS.Binding.getter binding.html#getter +Pathfinding.Examples.RTS.Binding.setter binding.html#setter +Pathfinding.Examples.RTS.Binding.val binding.html#val +Pathfinding.Examples.RTS.Binding.value binding.html#value +Pathfinding.Examples.RTS.Condition.predicate condition.html#predicate +Pathfinding.Examples.RTS.FindClosestUnit.reserve findclosestunit.html#reserve +Pathfinding.Examples.RTS.FindClosestUnit.target findclosestunit.html#target +Pathfinding.Examples.RTS.FindClosestUnit.type findclosestunit.html#type +Pathfinding.Examples.RTS.Harvest.duration harvest.html#duration +Pathfinding.Examples.RTS.Harvest.resource harvest.html#resource +Pathfinding.Examples.RTS.Harvest.time harvest.html#time +Pathfinding.Examples.RTS.MovementMode rts.html#MovementMode +Pathfinding.Examples.RTS.Once.child once.html#child +Pathfinding.Examples.RTS.RTSAudio.Source.available source.html#available +Pathfinding.Examples.RTS.RTSAudio.Source.source source.html#source +Pathfinding.Examples.RTS.RTSAudio.sources rtsaudio.html#sources +Pathfinding.Examples.RTS.RTSBuildingBarracks.UnitItem.buildingTime unititem.html#buildingTime +Pathfinding.Examples.RTS.RTSBuildingBarracks.UnitItem.cost unititem.html#cost +Pathfinding.Examples.RTS.RTSBuildingBarracks.UnitItem.menuItem unititem.html#menuItem +Pathfinding.Examples.RTS.RTSBuildingBarracks.UnitItem.prefab unititem.html#prefab +Pathfinding.Examples.RTS.RTSBuildingBarracks.items rtsbuildingbarracks.html#items +Pathfinding.Examples.RTS.RTSBuildingBarracks.maxQueueSize rtsbuildingbarracks.html#maxQueueSize +Pathfinding.Examples.RTS.RTSBuildingBarracks.menu rtsbuildingbarracks.html#menu +Pathfinding.Examples.RTS.RTSBuildingBarracks.queue rtsbuildingbarracks.html#queue +Pathfinding.Examples.RTS.RTSBuildingBarracks.queueProgressFraction rtsbuildingbarracks.html#queueProgressFraction +Pathfinding.Examples.RTS.RTSBuildingBarracks.queueStartTime rtsbuildingbarracks.html#queueStartTime +Pathfinding.Examples.RTS.RTSBuildingBarracks.rallyPoint rtsbuildingbarracks.html#rallyPoint +Pathfinding.Examples.RTS.RTSBuildingBarracks.spawnPoint rtsbuildingbarracks.html#spawnPoint +Pathfinding.Examples.RTS.RTSBuildingBarracks.unit rtsbuildingbarracks.html#unit +Pathfinding.Examples.RTS.RTSBuildingButton.cost rtsbuildingbutton.html#cost +Pathfinding.Examples.RTS.RTSBuildingButton.prefab rtsbuildingbutton.html#prefab +Pathfinding.Examples.RTS.RTSBuildingQueueUI.UIItem.QueItem.icon queitem.html#icon +Pathfinding.Examples.RTS.RTSBuildingQueueUI.UIItem.QueItem.progress queitem.html#progress +Pathfinding.Examples.RTS.RTSBuildingQueueUI.UIItem.QueItem.root queitem.html#root +Pathfinding.Examples.RTS.RTSBuildingQueueUI.UIItem.parent uiitem.html#parent +Pathfinding.Examples.RTS.RTSBuildingQueueUI.UIItem.queItems uiitem.html#queItems +Pathfinding.Examples.RTS.RTSBuildingQueueUI.building rtsbuildingqueueui.html#building +Pathfinding.Examples.RTS.RTSBuildingQueueUI.item rtsbuildingqueueui.html#item +Pathfinding.Examples.RTS.RTSBuildingQueueUI.prefab rtsbuildingqueueui.html#prefab +Pathfinding.Examples.RTS.RTSBuildingQueueUI.screenOffset rtsbuildingqueueui.html#screenOffset +Pathfinding.Examples.RTS.RTSBuildingQueueUI.worldOffset rtsbuildingqueueui.html#worldOffset +Pathfinding.Examples.RTS.RTSHarvestableResource.harvestable rtsharvestableresource.html#harvestable +Pathfinding.Examples.RTS.RTSHarvestableResource.resourceType rtsharvestableresource.html#resourceType +Pathfinding.Examples.RTS.RTSHarvestableResource.value rtsharvestableresource.html#value +Pathfinding.Examples.RTS.RTSHarvester.animator rtsharvester.html#animator +Pathfinding.Examples.RTS.RTSHarvester.behave rtsharvester.html#behave +Pathfinding.Examples.RTS.RTSHarvester.ctx rtsharvester.html#ctx +Pathfinding.Examples.RTS.RTSHarvester.unit rtsharvester.html#unit +Pathfinding.Examples.RTS.RTSManager.PlayerCount rtsmanager.html#PlayerCount +Pathfinding.Examples.RTS.RTSManager.audioManager rtsmanager.html#audioManager +Pathfinding.Examples.RTS.RTSManager.instance rtsmanager.html#instance +Pathfinding.Examples.RTS.RTSManager.players rtsmanager.html#players +Pathfinding.Examples.RTS.RTSManager.units rtsmanager.html#units +Pathfinding.Examples.RTS.RTSPlayer.index rtsplayer.html#index +Pathfinding.Examples.RTS.RTSPlayer.resources rtsplayer.html#resources +Pathfinding.Examples.RTS.RTSPlayerResources.resources rtsplayerresources.html#resources +Pathfinding.Examples.RTS.RTSResourceDeterioration.initialResources rtsresourcedeterioration.html#initialResources +Pathfinding.Examples.RTS.RTSResourceDeterioration.maxOffset rtsresourcedeterioration.html#maxOffset +Pathfinding.Examples.RTS.RTSResourceDeterioration.offsetRoot rtsresourcedeterioration.html#offsetRoot +Pathfinding.Examples.RTS.RTSResourceDeterioration.resource rtsresourcedeterioration.html#resource +Pathfinding.Examples.RTS.RTSResourceView.Item.label item2.html#label +Pathfinding.Examples.RTS.RTSResourceView.Item.name item2.html#name +Pathfinding.Examples.RTS.RTSResourceView.Item.resource item2.html#resource +Pathfinding.Examples.RTS.RTSResourceView.Item.smoothedValue item2.html#smoothedValue +Pathfinding.Examples.RTS.RTSResourceView.adjustmentSpeed rtsresourceview.html#adjustmentSpeed +Pathfinding.Examples.RTS.RTSResourceView.items rtsresourceview.html#items +Pathfinding.Examples.RTS.RTSResourceView.team rtsresourceview.html#team +Pathfinding.Examples.RTS.RTSTimedDestruction.time rtstimeddestruction.html#time +Pathfinding.Examples.RTS.RTSUI.Menu.itemPrefab menu.html#itemPrefab +Pathfinding.Examples.RTS.RTSUI.Menu.root menu.html#root +Pathfinding.Examples.RTS.RTSUI.MenuItem.description menuitem.html#description +Pathfinding.Examples.RTS.RTSUI.MenuItem.icon menuitem.html#icon +Pathfinding.Examples.RTS.RTSUI.MenuItem.label menuitem.html#label +Pathfinding.Examples.RTS.RTSUI.State rtsui.html#State +Pathfinding.Examples.RTS.RTSUI.active rtsui.html#active +Pathfinding.Examples.RTS.RTSUI.activeMenu rtsui.html#activeMenu +Pathfinding.Examples.RTS.RTSUI.buildingInfo rtsui.html#buildingInfo +Pathfinding.Examples.RTS.RTSUI.buildingPreview rtsui.html#buildingPreview +Pathfinding.Examples.RTS.RTSUI.click rtsui.html#click +Pathfinding.Examples.RTS.RTSUI.clickFallback rtsui.html#clickFallback +Pathfinding.Examples.RTS.RTSUI.dragStart rtsui.html#dragStart +Pathfinding.Examples.RTS.RTSUI.groundMask rtsui.html#groundMask +Pathfinding.Examples.RTS.RTSUI.hasSelected rtsui.html#hasSelected +Pathfinding.Examples.RTS.RTSUI.ignoreFrame rtsui.html#ignoreFrame +Pathfinding.Examples.RTS.RTSUI.menuItemPrefab rtsui.html#menuItemPrefab +Pathfinding.Examples.RTS.RTSUI.menuRoot rtsui.html#menuRoot +Pathfinding.Examples.RTS.RTSUI.notEnoughResources rtsui.html#notEnoughResources +Pathfinding.Examples.RTS.RTSUI.selectionBox rtsui.html#selectionBox +Pathfinding.Examples.RTS.RTSUI.state rtsui.html#state +Pathfinding.Examples.RTS.RTSUI.worldSpaceUI rtsui.html#worldSpaceUI +Pathfinding.Examples.RTS.RTSUnit.OnUpdateDelegate rtsunit.html#OnUpdateDelegate +Pathfinding.Examples.RTS.RTSUnit.Type rtsunit.html#Type +Pathfinding.Examples.RTS.RTSUnit.ai rtsunit.html#ai +Pathfinding.Examples.RTS.RTSUnit.attackTarget rtsunit.html#attackTarget +Pathfinding.Examples.RTS.RTSUnit.deathEffect rtsunit.html#deathEffect +Pathfinding.Examples.RTS.RTSUnit.detectionRange rtsunit.html#detectionRange +Pathfinding.Examples.RTS.RTSUnit.health rtsunit.html#health +Pathfinding.Examples.RTS.RTSUnit.lastDestination rtsunit.html#lastDestination +Pathfinding.Examples.RTS.RTSUnit.lastSeenAttackTarget rtsunit.html#lastSeenAttackTarget +Pathfinding.Examples.RTS.RTSUnit.locked rtsunit.html#locked +Pathfinding.Examples.RTS.RTSUnit.mSelected rtsunit.html#mSelected +Pathfinding.Examples.RTS.RTSUnit.maxHealth rtsunit.html#maxHealth +Pathfinding.Examples.RTS.RTSUnit.movementMode rtsunit.html#movementMode +Pathfinding.Examples.RTS.RTSUnit.onMakeActiveUnit rtsunit.html#onMakeActiveUnit +Pathfinding.Examples.RTS.RTSUnit.owner rtsunit.html#owner +Pathfinding.Examples.RTS.RTSUnit.position rtsunit.html#position Position at the start of the current frame. +Pathfinding.Examples.RTS.RTSUnit.radius rtsunit.html#radius +Pathfinding.Examples.RTS.RTSUnit.reachedDestination rtsunit.html#reachedDestination +Pathfinding.Examples.RTS.RTSUnit.reservedBy rtsunit.html#reservedBy +Pathfinding.Examples.RTS.RTSUnit.resource rtsunit.html#resource +Pathfinding.Examples.RTS.RTSUnit.rvo rtsunit.html#rvo +Pathfinding.Examples.RTS.RTSUnit.selected rtsunit.html#selected +Pathfinding.Examples.RTS.RTSUnit.selectionIndicator rtsunit.html#selectionIndicator +Pathfinding.Examples.RTS.RTSUnit.selectionIndicatorEnabled rtsunit.html#selectionIndicatorEnabled +Pathfinding.Examples.RTS.RTSUnit.storedCrystals rtsunit.html#storedCrystals +Pathfinding.Examples.RTS.RTSUnit.team rtsunit.html#team +Pathfinding.Examples.RTS.RTSUnit.transform rtsunit.html#transform +Pathfinding.Examples.RTS.RTSUnit.type rtsunit.html#type +Pathfinding.Examples.RTS.RTSUnit.weapon rtsunit.html#weapon +Pathfinding.Examples.RTS.RTSUnitBuilder.BuildingItem.cost buildingitem.html#cost +Pathfinding.Examples.RTS.RTSUnitBuilder.BuildingItem.menuItem buildingitem.html#menuItem +Pathfinding.Examples.RTS.RTSUnitBuilder.BuildingItem.prefab buildingitem.html#prefab +Pathfinding.Examples.RTS.RTSUnitBuilder.items rtsunitbuilder.html#items +Pathfinding.Examples.RTS.RTSUnitBuilder.menu rtsunitbuilder.html#menu +Pathfinding.Examples.RTS.RTSUnitBuilder.unit rtsunitbuilder.html#unit +Pathfinding.Examples.RTS.RTSUnitManager.activeUnit rtsunitmanager.html#activeUnit +Pathfinding.Examples.RTS.RTSUnitManager.batchSelection rtsunitmanager.html#batchSelection +Pathfinding.Examples.RTS.RTSUnitManager.cam rtsunitmanager.html#cam +Pathfinding.Examples.RTS.RTSUnitManager.mActiveUnit rtsunitmanager.html#mActiveUnit +Pathfinding.Examples.RTS.RTSUnitManager.selectedUnits rtsunitmanager.html#selectedUnits +Pathfinding.Examples.RTS.RTSUnitManager.units rtsunitmanager.html#units +Pathfinding.Examples.RTS.RTSWaveSpawner.Wave.count wave.html#count +Pathfinding.Examples.RTS.RTSWaveSpawner.Wave.delay wave.html#delay +Pathfinding.Examples.RTS.RTSWaveSpawner.Wave.health wave.html#health +Pathfinding.Examples.RTS.RTSWaveSpawner.Wave.prefab wave.html#prefab +Pathfinding.Examples.RTS.RTSWaveSpawner.Wave.spawnPoint wave.html#spawnPoint +Pathfinding.Examples.RTS.RTSWaveSpawner.target rtswavespawner.html#target +Pathfinding.Examples.RTS.RTSWaveSpawner.team rtswavespawner.html#team +Pathfinding.Examples.RTS.RTSWaveSpawner.waveCounter rtswavespawner.html#waveCounter +Pathfinding.Examples.RTS.RTSWaveSpawner.waves rtswavespawner.html#waves +Pathfinding.Examples.RTS.RTSWeapon.attackDuration rtsweapon.html#attackDuration +Pathfinding.Examples.RTS.RTSWeapon.canMoveWhileAttacking rtsweapon.html#canMoveWhileAttacking +Pathfinding.Examples.RTS.RTSWeapon.cooldown rtsweapon.html#cooldown +Pathfinding.Examples.RTS.RTSWeapon.isAttacking rtsweapon.html#isAttacking +Pathfinding.Examples.RTS.RTSWeapon.lastAttackTime rtsweapon.html#lastAttackTime +Pathfinding.Examples.RTS.RTSWeapon.range rtsweapon.html#range +Pathfinding.Examples.RTS.RTSWeapon.ranged rtsweapon.html#ranged +Pathfinding.Examples.RTS.RTSWeaponSimpleRanged.damage rtsweaponsimpleranged.html#damage +Pathfinding.Examples.RTS.RTSWeaponSimpleRanged.rotationRootY rtsweaponsimpleranged.html#rotationRootY +Pathfinding.Examples.RTS.RTSWeaponSimpleRanged.rotationSpeed rtsweaponsimpleranged.html#rotationSpeed +Pathfinding.Examples.RTS.RTSWeaponSimpleRanged.sfx rtsweaponsimpleranged.html#sfx +Pathfinding.Examples.RTS.RTSWeaponSimpleRanged.sourceEffect rtsweaponsimpleranged.html#sourceEffect +Pathfinding.Examples.RTS.RTSWeaponSimpleRanged.sourceEffectRoot rtsweaponsimpleranged.html#sourceEffectRoot +Pathfinding.Examples.RTS.RTSWeaponSimpleRanged.targetEffect rtsweaponsimpleranged.html#targetEffect +Pathfinding.Examples.RTS.RTSWeaponSimpleRanged.volume rtsweaponsimpleranged.html#volume +Pathfinding.Examples.RTS.RTSWorldSpaceUI.Item.screenOffset item3.html#screenOffset +Pathfinding.Examples.RTS.RTSWorldSpaceUI.Item.tracking item3.html#tracking +Pathfinding.Examples.RTS.RTSWorldSpaceUI.Item.transform item3.html#transform +Pathfinding.Examples.RTS.RTSWorldSpaceUI.Item.valid item3.html#valid +Pathfinding.Examples.RTS.RTSWorldSpaceUI.Item.worldOffset item3.html#worldOffset +Pathfinding.Examples.RTS.RTSWorldSpaceUI.items rtsworldspaceui.html#items +Pathfinding.Examples.RTS.RTSWorldSpaceUI.worldCamera rtsworldspaceui.html#worldCamera +Pathfinding.Examples.RTS.ResourceType rts.html#ResourceType +Pathfinding.Examples.RTS.SimpleAction.action simpleaction.html#action +Pathfinding.Examples.RTS.Status rts.html#Status +Pathfinding.Examples.RTS.Value.Bound value.html#Bound +Pathfinding.Examples.RTS.Value.binding value.html#binding +Pathfinding.Examples.RTS.Value.val value.html#val +Pathfinding.Examples.RTS.Value.value value.html#value +Pathfinding.Examples.RTSTiltInMovementDirection.accelerationFraction rtstiltinmovementdirection.html#accelerationFraction +Pathfinding.Examples.RTSTiltInMovementDirection.ai rtstiltinmovementdirection.html#ai +Pathfinding.Examples.RTSTiltInMovementDirection.amount rtstiltinmovementdirection.html#amount +Pathfinding.Examples.RTSTiltInMovementDirection.lastVelocity rtstiltinmovementdirection.html#lastVelocity +Pathfinding.Examples.RTSTiltInMovementDirection.motorSound rtstiltinmovementdirection.html#motorSound +Pathfinding.Examples.RTSTiltInMovementDirection.smoothAcceleration rtstiltinmovementdirection.html#smoothAcceleration +Pathfinding.Examples.RTSTiltInMovementDirection.soundAdjustmentSpeed rtstiltinmovementdirection.html#soundAdjustmentSpeed +Pathfinding.Examples.RTSTiltInMovementDirection.soundGain rtstiltinmovementdirection.html#soundGain +Pathfinding.Examples.RTSTiltInMovementDirection.soundIdleVolume rtstiltinmovementdirection.html#soundIdleVolume +Pathfinding.Examples.RTSTiltInMovementDirection.soundPitchGain rtstiltinmovementdirection.html#soundPitchGain +Pathfinding.Examples.RTSTiltInMovementDirection.speed rtstiltinmovementdirection.html#speed +Pathfinding.Examples.RTSTiltInMovementDirection.target rtstiltinmovementdirection.html#target +Pathfinding.Examples.RVOAgentPlacer.agents rvoagentplacer.html#agents +Pathfinding.Examples.RVOAgentPlacer.goalOffset rvoagentplacer.html#goalOffset +Pathfinding.Examples.RVOAgentPlacer.mask rvoagentplacer.html#mask +Pathfinding.Examples.RVOAgentPlacer.prefab rvoagentplacer.html#prefab +Pathfinding.Examples.RVOAgentPlacer.rad2Deg rvoagentplacer.html#rad2Deg +Pathfinding.Examples.RVOAgentPlacer.repathRate rvoagentplacer.html#repathRate +Pathfinding.Examples.RVOAgentPlacer.ringSize rvoagentplacer.html#ringSize +Pathfinding.Examples.RVOExampleAgent.canSearchAgain rvoexampleagent.html#canSearchAgain +Pathfinding.Examples.RVOExampleAgent.controller rvoexampleagent.html#controller +Pathfinding.Examples.RVOExampleAgent.groundMask rvoexampleagent.html#groundMask +Pathfinding.Examples.RVOExampleAgent.maxSpeed rvoexampleagent.html#maxSpeed +Pathfinding.Examples.RVOExampleAgent.moveNextDist rvoexampleagent.html#moveNextDist +Pathfinding.Examples.RVOExampleAgent.nextRepath rvoexampleagent.html#nextRepath +Pathfinding.Examples.RVOExampleAgent.path rvoexampleagent.html#path +Pathfinding.Examples.RVOExampleAgent.rends rvoexampleagent.html#rends +Pathfinding.Examples.RVOExampleAgent.repathRate rvoexampleagent.html#repathRate +Pathfinding.Examples.RVOExampleAgent.seeker rvoexampleagent.html#seeker +Pathfinding.Examples.RVOExampleAgent.slowdownDistance rvoexampleagent.html#slowdownDistance +Pathfinding.Examples.RVOExampleAgent.target rvoexampleagent.html#target +Pathfinding.Examples.RVOExampleAgent.vectorPath rvoexampleagent.html#vectorPath +Pathfinding.Examples.RVOExampleAgent.wp rvoexampleagent.html#wp +Pathfinding.Examples.SmoothCameraFollow.damping smoothcamerafollow.html#damping +Pathfinding.Examples.SmoothCameraFollow.distance smoothcamerafollow.html#distance +Pathfinding.Examples.SmoothCameraFollow.enableRotation smoothcamerafollow.html#enableRotation +Pathfinding.Examples.SmoothCameraFollow.height smoothcamerafollow.html#height +Pathfinding.Examples.SmoothCameraFollow.rotationDamping smoothcamerafollow.html#rotationDamping +Pathfinding.Examples.SmoothCameraFollow.smoothRotation smoothcamerafollow.html#smoothRotation +Pathfinding.Examples.SmoothCameraFollow.staticOffset smoothcamerafollow.html#staticOffset +Pathfinding.Examples.SmoothCameraFollow.target smoothcamerafollow.html#target +Pathfinding.Examples.TurnBasedAI.blockManager turnbasedai.html#blockManager +Pathfinding.Examples.TurnBasedAI.blocker turnbasedai.html#blocker +Pathfinding.Examples.TurnBasedAI.movementPoints turnbasedai.html#movementPoints +Pathfinding.Examples.TurnBasedAI.targetNode turnbasedai.html#targetNode +Pathfinding.Examples.TurnBasedAI.traversalProvider turnbasedai.html#traversalProvider +Pathfinding.Examples.TurnBasedDoor.animator turnbaseddoor.html#animator +Pathfinding.Examples.TurnBasedDoor.blocker turnbaseddoor.html#blocker +Pathfinding.Examples.TurnBasedDoor.open turnbaseddoor.html#open +Pathfinding.Examples.TurnBasedManager.State turnbasedmanager.html#State +Pathfinding.Examples.TurnBasedManager.eventSystem turnbasedmanager.html#eventSystem +Pathfinding.Examples.TurnBasedManager.layerMask turnbasedmanager.html#layerMask +Pathfinding.Examples.TurnBasedManager.movementSpeed turnbasedmanager.html#movementSpeed +Pathfinding.Examples.TurnBasedManager.nodePrefab turnbasedmanager.html#nodePrefab +Pathfinding.Examples.TurnBasedManager.possibleMoves turnbasedmanager.html#possibleMoves +Pathfinding.Examples.TurnBasedManager.selected turnbasedmanager.html#selected +Pathfinding.Examples.TurnBasedManager.state turnbasedmanager.html#state +Pathfinding.FadeArea.animationSpeed fadearea.html#animationSpeed +Pathfinding.FadeArea.areaStyle fadearea.html#areaStyle +Pathfinding.FadeArea.editor fadearea.html#editor +Pathfinding.FadeArea.fancyEffects fadearea.html#fancyEffects Animate dropdowns when they open and close. +Pathfinding.FadeArea.labelStyle fadearea.html#labelStyle +Pathfinding.FadeArea.lastRect fadearea.html#lastRect +Pathfinding.FadeArea.lastUpdate fadearea.html#lastUpdate +Pathfinding.FadeArea.open fadearea.html#open Is this area open. \n\nThis is not the same as if any contents are visible, use BeginFade for that. +Pathfinding.FadeArea.value fadearea.html#value +Pathfinding.FadeArea.visible fadearea.html#visible +Pathfinding.FakeTransform.position faketransform.html#position +Pathfinding.FakeTransform.rotation faketransform.html#rotation +Pathfinding.FloodPath.TemporaryNodeBit floodpath.html#TemporaryNodeBit +Pathfinding.FloodPath.originalStartPoint floodpath.html#originalStartPoint +Pathfinding.FloodPath.parents floodpath.html#parents +Pathfinding.FloodPath.saveParents floodpath.html#saveParents If false, will not save any information. \n\nUsed by some internal parts of the system which doesn't need it. +Pathfinding.FloodPath.startNode floodpath.html#startNode +Pathfinding.FloodPath.startPoint floodpath.html#startPoint +Pathfinding.FloodPath.validationHash floodpath.html#validationHash +Pathfinding.FloodPathConstraint.path floodpathconstraint.html#path +Pathfinding.FloodPathTracer.flood floodpathtracer.html#flood Reference to the FloodPath which searched the path originally. +Pathfinding.FloodPathTracer.hasEndPoint floodpathtracer.html#hasEndPoint +Pathfinding.FollowerEntity.FollowerEntityMigrations followerentity.html#FollowerEntityMigrations +Pathfinding.FollowerEntity.ShapeGizmoColor followerentity.html#ShapeGizmoColor +Pathfinding.FollowerEntity.achetypeWorld followerentity.html#achetypeWorld +Pathfinding.FollowerEntity.agentCylinderShapeAccessRO followerentity.html#agentCylinderShapeAccessRO +Pathfinding.FollowerEntity.agentCylinderShapeAccessRW followerentity.html#agentCylinderShapeAccessRW +Pathfinding.FollowerEntity.agentOffMeshLinkTraversalRO followerentity.html#agentOffMeshLinkTraversalRO +Pathfinding.FollowerEntity.archetype followerentity.html#archetype +Pathfinding.FollowerEntity.autoRepath followerentity.html#autoRepath Policy for when the agent recalculates its path. \n\n[more in online documentation] +Pathfinding.FollowerEntity.autoRepathBacking followerentity.html#autoRepathBacking +Pathfinding.FollowerEntity.autoRepathPolicyRW followerentity.html#autoRepathPolicyRW +Pathfinding.FollowerEntity.canMove followerentity.html#canMove Enables or disables movement completely. \n\nIf you want the agent to stand still, but still react to local avoidance and use gravity: use isStopped instead.\n\nDisabling this will remove the SimulateMovement component from the entity, which prevents most systems from running for this entity.\n\n[more in online documentation] +Pathfinding.FollowerEntity.canSearch followerentity.html#canSearch Enables or disables recalculating the path at regular intervals. \n\nSetting this to false does not stop any active path requests from being calculated or stop it from continuing to follow the current path.\n\nNote that this only disables automatic path recalculations. If you call the SearchPath() method a path will still be calculated.\n\n[more in online documentation] +Pathfinding.FollowerEntity.currentNode followerentity.html#currentNode Node which the agent is currently traversing. \n\nYou can, for example, use this to make the agent use a different animation when traversing nodes with a specific tag.\n\n[more in online documentation]\nWhen traversing an off-mesh link, this will return the final non-link node in the path before the agent started traversing the link. +Pathfinding.FollowerEntity.debugFlags followerentity.html#debugFlags Enables or disables debug drawing for this agent. \n\nThis is a bitmask with multiple flags so that you can choose exactly what you want to debug.\n\n[more in online documentation] +Pathfinding.FollowerEntity.desiredVelocity followerentity.html#desiredVelocity Velocity that this agent wants to move with. \n\nIncludes gravity and local avoidance if applicable. In world units per second.\n\n[more in online documentation] +Pathfinding.FollowerEntity.desiredVelocityWithoutLocalAvoidance followerentity.html#desiredVelocityWithoutLocalAvoidance Velocity that this agent wants to move with before taking local avoidance into account. \n\nIncludes gravity. In world units per second.\n\nSetting this property will set the current velocity that the agent is trying to move with, including gravity. This can be useful if you want to make the agent come to a complete stop in a single frame or if you want to modify the velocity in some way.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation]\n\n\nIf you are not using local avoidance then this property will in almost all cases be identical to desiredVelocity plus some noise due to floating point math.\n\n[more in online documentation] +Pathfinding.FollowerEntity.destination followerentity.html#destination Position in the world that this agent should move to. \n\nIf no destination has been set yet, then (+infinity, +infinity, +infinity) will be returned.\n\nNote that setting this property does not immediately cause the agent to recalculate its path. So it may take some time before the agent starts to move towards this point. Most movement scripts have a <b>repathRate</b> field which indicates how often the agent looks for a new path. You can also call the SearchPath method to immediately start to search for a new path. Paths are calculated asynchronously so when an agent starts to search for path it may take a few frames (usually 1 or 2) until the result is available. During this time the pathPending property will return true.\n\nIf you are setting a destination and then want to know when the agent has reached that destination then you could either use reachedDestination (recommended) or check both pathPending and reachedEndOfPath. Check the documentation for the respective fields to learn about their differences.\n\n<b>[code in online documentation]</b><b>[code in online documentation]</b>\n\nIf no destination has been set yet, then (+infinity, +infinity, +infinity) will be returned.\n\nSetting this property will immediately try to repair the path if the agent already has a path. This will also immediately update properties like reachedDestination, reachedEndOfPath and remainingDistance.\n\nThe agent may do a full path recalculation if the local repair was not sufficient, but this will at earliest happen in the next simulation step.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.FollowerEntity.destinationFacingDirection followerentity.html#destinationFacingDirection Direction the agent will try to face when it reaches the destination. \n\nIf this is zero, the agent will not try to face any particular direction.\n\nThe following video shows three agents, one with no facing direction set, and then two agents with varying values of the lead in radius. <b>[video in online documentation]</b>\n\n[more in online documentation] +Pathfinding.FollowerEntity.destinationPointAccessRO followerentity.html#destinationPointAccessRO +Pathfinding.FollowerEntity.destinationPointAccessRW followerentity.html#destinationPointAccessRW +Pathfinding.FollowerEntity.enableGravity followerentity.html#enableGravity Enables or disables gravity. \n\nIf gravity is enabled, the agent will accelerate downwards, and use a raycast to check if it should stop falling.\n\n[more in online documentation] +Pathfinding.FollowerEntity.enableLocalAvoidance followerentity.html#enableLocalAvoidance True if local avoidance is enabled for this agent. \n\nEnabling this will automatically add a Pathfinding.ECS.RVO.RVOAgent component to the entity.\n\n[more in online documentation] +Pathfinding.FollowerEntity.endOfPath followerentity.html#endOfPath End point of path the agent is currently following. \n\nIf the agent has no path (or if it's not calculated yet), this will return the destination instead. If the agent has no destination it will return the agent's current position.\n\nThe end of the path is usually identical or very close to the destination, but it may differ if the path for example was blocked by a wall, so that the agent couldn't get any closer.\n\n[more in online documentation] +Pathfinding.FollowerEntity.entity followerentity.html#entity Entity which this movement script represents. \n\nAn entity will be created when this script is enabled, and destroyed when this script is disabled.\n\nCheck the class documentation to see which components it usually has, and what systems typically affect it. +Pathfinding.FollowerEntity.entityExists followerentity.html#entityExists True if this component's entity exists. \n\nThis is typically true if the component is active and enabled and the game is running.\n\n[more in online documentation] +Pathfinding.FollowerEntity.entityStorageCache followerentity.html#entityStorageCache +Pathfinding.FollowerEntity.groundMask followerentity.html#groundMask Determines which layers the agent will stand on. \n\nThe agent will use a raycast each frame to check if it should stop falling.\n\nThis layer mask should ideally not contain the agent's own layer, if the agent has a collider, as this may cause it to try to stand on top of itself. +Pathfinding.FollowerEntity.hasPath followerentity.html#hasPath True if this agent currently has a valid path that it follows. \n\nThis is true if the agent has a path and the path is not stale.\n\nA path may become stale if the graph is updated close to the agent and it hasn't had time to recalculate its path yet. +Pathfinding.FollowerEntity.height followerentity.html#height Height of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nThis value is used for various heuristics, and for visualization purposes. For example, the destination is only considered reached if the destination is not above the agent's head, and it's not more than half the agent's height below its feet.\n\nIf local lavoidance is enabled, this is also used to filter out collisions with agents and obstacles that are too far above or below the agent. +Pathfinding.FollowerEntity.indicesScratch followerentity.html#indicesScratch +Pathfinding.FollowerEntity.isStopped followerentity.html#isStopped Gets or sets if the agent should stop moving. \n\nIf this is set to true the agent will immediately start to slow down as quickly as it can to come to a full stop. The agent will still react to local avoidance and gravity (if applicable), but it will not try to move in any particular direction.\n\nThe current path of the agent will not be cleared, so when this is set to false again the agent will continue moving along the previous path.\n\nThis is a purely user-controlled parameter, so for example it is not set automatically when the agent stops moving because it has reached the target. Use reachedEndOfPath for that.\n\nIf this property is set to true while the agent is traversing an off-mesh link (RichAI script only), then the agent will continue traversing the link and stop once it has completed it.\n\n[more in online documentation]\nThe steeringTarget property will continue to indicate the point which the agent would move towards if it would not be stopped. +Pathfinding.FollowerEntity.isTraversingOffMeshLink followerentity.html#isTraversingOffMeshLink True if the agent is currently traversing an off-mesh link. \n\n[more in online documentation] +Pathfinding.FollowerEntity.localTransformAccessRO followerentity.html#localTransformAccessRO +Pathfinding.FollowerEntity.localTransformAccessRW followerentity.html#localTransformAccessRW +Pathfinding.FollowerEntity.managedState followerentity.html#managedState +Pathfinding.FollowerEntity.managedStateAccessRO followerentity.html#managedStateAccessRO +Pathfinding.FollowerEntity.managedStateAccessRW followerentity.html#managedStateAccessRW +Pathfinding.FollowerEntity.maxSpeed followerentity.html#maxSpeed Max speed in world units per second. +Pathfinding.FollowerEntity.movement followerentity.html#movement +Pathfinding.FollowerEntity.movementControlAccessRO followerentity.html#movementControlAccessRO +Pathfinding.FollowerEntity.movementControlAccessRW followerentity.html#movementControlAccessRW +Pathfinding.FollowerEntity.movementOutputAccessRW followerentity.html#movementOutputAccessRW +Pathfinding.FollowerEntity.movementOverrides followerentity.html#movementOverrides Provides callbacks during various parts of the movement calculations. \n\nWith this property you can register callbacks that will be called during various parts of the movement calculations. These can be used to modify movement of the agent.\n\nThe following example demonstrates how one can hook into one of the available phases and modify the agent's movement. In this case, the movement is modified to become wavy.\n\n <b>[video in online documentation]</b>\n\n<b>[code in online documentation]</b>\n\n- <b>BeforeControl:</b> Called before the agent's movement is calculated. At this point, the agent has a valid path, and the next corner that is moving towards has been calculated.\n\n- <b>AfterControl:</b> Called after the agent's desired movement is calculated. The agent has stored its desired movement in the MovementControl component. Local avoidance has not yet run.\n\n- <b>BeforeMovement:</b> Called right before the agent's movement is applied. At this point the agent's final movement (including local avoidance) is stored in the ResolvedMovement component, which you may modify.\n\n\n\n[more in online documentation]\nThe callbacks may be called multiple times per frame, if the fps is low, or if the time scale is high. It may also be called less than once per frame if the fps is very high. Each callback is provided with a <b>dt</b> parameter, which is the time in seconds since the last simulation step. You should prefer using this instead of Time.deltaTime.\n\n[more in online documentation] +Pathfinding.FollowerEntity.movementPlane followerentity.html#movementPlane The plane the agent is moving in. \n\nThis is typically the ground plane, which will be the XZ plane in a 3D game, and the XY plane in a 2D game. Ultimately it depends on the graph orientation.\n\nIf you are doing pathfinding on a spherical world (see Spherical Worlds), the the movement plane will be the tangent plane of the sphere at the agent's position. +Pathfinding.FollowerEntity.movementPlaneAccessRO followerentity.html#movementPlaneAccessRO +Pathfinding.FollowerEntity.movementPlaneAccessRW followerentity.html#movementPlaneAccessRW +Pathfinding.FollowerEntity.movementPlaneSource followerentity.html#movementPlaneSource How to calculate which direction is "up" for the agent. \n\nIn almost all cases, you should use the <b>Graph</b> option. This will make the agent use the graph's natural "up" direction. However, if you are using a spherical world, or a world with some other strange shape, then you may want to use the NavmeshNormal or Raycast options.\n\n[more in online documentation] +Pathfinding.FollowerEntity.movementPlaneSourceBacking followerentity.html#movementPlaneSourceBacking +Pathfinding.FollowerEntity.movementSettings followerentity.html#movementSettings Various movement settings. \n\nSome of these settings are exposed on the FollowerEntity directly. For example maxSpeed.\n\n[more in online documentation] +Pathfinding.FollowerEntity.movementSettingsAccessRO followerentity.html#movementSettingsAccessRO +Pathfinding.FollowerEntity.movementSettingsAccessRW followerentity.html#movementSettingsAccessRW +Pathfinding.FollowerEntity.movementStateAccessRO followerentity.html#movementStateAccessRO +Pathfinding.FollowerEntity.movementStateAccessRW followerentity.html#movementStateAccessRW +Pathfinding.FollowerEntity.nextCornersScratch followerentity.html#nextCornersScratch +Pathfinding.FollowerEntity.offMeshLink followerentity.html#offMeshLink The off-mesh link that the agent is currently traversing. \n\nThis will be a default OffMeshLinks.OffMeshLinkTracer if the agent is not traversing an off-mesh link (the OffMeshLinks.OffMeshLinkTracer.link field will be null).\n\n[more in online documentation] +Pathfinding.FollowerEntity.onSearchPath followerentity.html#onSearchPath Called when the agent recalculates its path. \n\nThis is called both for automatic path recalculations (see canSearch) and manual ones (see SearchPath).\n\n[more in online documentation] +Pathfinding.FollowerEntity.onTraverseOffMeshLink followerentity.html#onTraverseOffMeshLink Callback to be called when an agent starts traversing an off-mesh link. \n\nThe handler will be called when the agent starts traversing an off-mesh link. It allows you to to control the agent for the full duration of the link traversal.\n\nUse the passed context struct to get information about the link and to control the agent.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation]\nYou can alternatively set the corresponding property property on the off-mesh link ( NodeLink2.onTraverseOffMeshLink) to specify a callback for a specific off-mesh link.\n\n[more in online documentation] +Pathfinding.FollowerEntity.orientation followerentity.html#orientation Determines which direction the agent moves in. \n\nFor 3D games you most likely want the ZAxisIsForward option as that is the convention for 3D games.\n\nFor 2D games you most likely want the YAxisIsForward option as that is the convention for 2D games.\n\nWhen using ZAxisForard, the +Z axis will be the forward direction of the agent, +Y will be upwards, and +X will be the right direction.\n\nWhen using YAxisForward, the +Y axis will be the forward direction of the agent, +Z will be upwards, and +X will be the right direction.\n\n <b>[image in online documentation]</b> +Pathfinding.FollowerEntity.orientationBacking followerentity.html#orientationBacking Determines which direction the agent moves in. \n\n[more in online documentation] +Pathfinding.FollowerEntity.pathPending followerentity.html#pathPending True if a path is currently being calculated. +Pathfinding.FollowerEntity.pathfindingSettings followerentity.html#pathfindingSettings Pathfinding settings. +Pathfinding.FollowerEntity.position followerentity.html#position Position of the agent. \n\nIn world space. \n\n[more in online documentation]\nIf you want to move the agent you may use Teleport or Move. +Pathfinding.FollowerEntity.radius followerentity.html#radius Radius of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nNote that this does not affect pathfinding in any way. The graph used completely determines where the agent can move.\n\n[more in online documentation] +Pathfinding.FollowerEntity.reachedDestination followerentity.html#reachedDestination True if the ai has reached the destination. \n\nThe agent considers the destination reached when it is within stopDistance world units from the destination. Additionally, the destination must not be above the agent's head, and it must not be more than half the agent's height below its feet.\n\nIf a facing direction was specified when setting the destination, this will only return true once the agent is approximately facing the correct orientation.\n\nThis value will be updated immediately when the destination is changed.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.FollowerEntity.reachedEndOfPath followerentity.html#reachedEndOfPath True if the agent has reached the end of the current path. \n\nThe agent considers the end of the path reached when it is within stopDistance world units from the end of the path. Additionally, the end of the path must not be above the agent's head, and it must not be more than half the agent's height below its feet.\n\nIf a facing direction was specified when setting the destination, this will only return true once the agent is approximately facing the correct orientation.\n\nThis value will be updated immediately when the destination is changed.\n\n[more in online documentation] +Pathfinding.FollowerEntity.readyToTraverseOffMeshLinkRW followerentity.html#readyToTraverseOffMeshLinkRW +Pathfinding.FollowerEntity.remainingDistance followerentity.html#remainingDistance Approximate remaining distance along the current path to the end of the path. \n\nThe agent does not know the true distance at all times, so this is an approximation. It tends to be a bit lower than the true distance.\n\n[more in online documentation]\nThis value will update immediately if the destination property is changed, or if the agent is moved using the position property or the Teleport method.\n\nIf the agent has no path, or if the current path is stale (e.g. if the graph has been updated close to the agent, and it hasn't had time to recalculate its path), this will return positive infinity.\n\n[more in online documentation] +Pathfinding.FollowerEntity.resolvedMovementAccessRO followerentity.html#resolvedMovementAccessRO +Pathfinding.FollowerEntity.resolvedMovementAccessRW followerentity.html#resolvedMovementAccessRW +Pathfinding.FollowerEntity.rotation followerentity.html#rotation Rotation of the agent. \n\nIn world space.\n\nThe entity internally always treats the Z axis as forward, but this property respects the orientation field. So it will return either a rotation with the Y axis as forward, or Z axis as forward, depending on the orientation field.\n\nThis will return the agent's rotation even if updateRotation is false.\n\n[more in online documentation] +Pathfinding.FollowerEntity.rotationSmoothing followerentity.html#rotationSmoothing How much to smooth the visual rotation of the agent. \n\nThis does not affect movement, but smoothes out how the agent rotates visually.\n\nRecommended values are between 0.0 and 0.5. A value of zero will disable smoothing completely.\n\nThe smoothing is done primarily using an exponential moving average, but with a small linear term to make the rotation converge faster when the agent is almost facing the desired direction.\n\nAdding smoothing will make the visual rotation of the agent lag a bit behind the actual rotation. Too much smoothing may make the agent seem sluggish, and appear to move sideways.\n\nThe unit for this field is seconds. +Pathfinding.FollowerEntity.rvoSettings followerentity.html#rvoSettings Local avoidance settings. +Pathfinding.FollowerEntity.scratchReferenceCount followerentity.html#scratchReferenceCount +Pathfinding.FollowerEntity.shape followerentity.html#shape +Pathfinding.FollowerEntity.steeringTarget followerentity.html#steeringTarget Point on the path which the agent is currently moving towards. \n\nThis is usually a point a small distance ahead of the agent or the end of the path.\n\nIf the agent does not have a path at the moment, then the agent's current position will be returned. +Pathfinding.FollowerEntity.stopDistance followerentity.html#stopDistance How far away from the destination should the agent aim to stop, in world units. \n\nIf the agent is within this distance from the destination point it will be considered to have reached the destination.\n\nEven if you want the agent to stop precisely at a given point, it is recommended to keep this slightly above zero. If it is exactly zero, the agent may have a hard time deciding that it has actually reached the end of the path, due to floating point errors and such.\n\n[more in online documentation] +Pathfinding.FollowerEntity.tr followerentity.html#tr Cached transform component. +Pathfinding.FollowerEntity.updatePosition followerentity.html#updatePosition Determines if the character's position should be coupled to the Transform's position. \n\nIf false then all movement calculations will happen as usual, but the GameObject that this component is attached to will not move. Instead, only the position property and the internal entity's position will change.\n\nThis is useful if you want to control the movement of the character using some other means, such as root motion, but still want the AI to move freely.\n\n[more in online documentation] +Pathfinding.FollowerEntity.updateRotation followerentity.html#updateRotation Determines if the character's rotation should be coupled to the Transform's rotation. \n\nIf false then all movement calculations will happen as usual, but the GameObject that this component is attached to will not rotate. Instead, only the rotation property and the internal entity's rotation will change.\n\nYou can enable PIDMovement.DebugFlags.Rotation in debugFlags to draw a gizmos arrow in the scene view to indicate the agent's internal rotation.\n\n[more in online documentation] +Pathfinding.FollowerEntity.velocity followerentity.html#velocity Actual velocity that the agent is moving with. \n\nIn world units per second.\n\n[more in online documentation] +Pathfinding.FollowerEntityEditor.debug followerentityeditor.html#debug +Pathfinding.FollowerEntityEditor.tagPenaltiesOpen followerentityeditor.html#tagPenaltiesOpen +Pathfinding.Funnel.FunnelPortalIndexMask funnel.html#FunnelPortalIndexMask +Pathfinding.Funnel.FunnelPortals.left funnelportals.html#left +Pathfinding.Funnel.FunnelPortals.right funnelportals.html#right +Pathfinding.Funnel.FunnelState.leftFunnel funnelstate.html#leftFunnel Left side of the funnel. +Pathfinding.Funnel.FunnelState.projectionAxis funnelstate.html#projectionAxis If set to anything other than (0,0,0), then all portals will be projected on a plane with this normal. \n\nThis is used to make the funnel fit a rotated graph better. It is ideally used for grid graphs, but navmesh/recast graphs are probably better off with it set to zero.\n\nThe vector should be normalized (unless zero), in world space, and should never be changed after the first portal has been added (unless the funnel is cleared first). +Pathfinding.Funnel.FunnelState.rightFunnel funnelstate.html#rightFunnel Right side of the funnel. +Pathfinding.Funnel.FunnelState.unwrappedPortals funnelstate.html#unwrappedPortals Unwrapped version of the funnel portals in 2D space. \n\nThe input is a funnel like in the image below. It may be rotated and twisted. <b>[image in online documentation]</b><b>[image in online documentation]</b>\n\nThis array is used as a cache and the unwrapped portals are calculated on demand. Thus it may not contain all portals. +Pathfinding.Funnel.PartType funnel.html#PartType The type of a PathPart. +Pathfinding.Funnel.PathPart.endIndex pathpart.html#endIndex Index of the last node in this part. +Pathfinding.Funnel.PathPart.endPoint pathpart.html#endPoint Exact end-point of this part or off-mesh link. +Pathfinding.Funnel.PathPart.startIndex pathpart.html#startIndex Index of the first node in this part. +Pathfinding.Funnel.PathPart.startPoint pathpart.html#startPoint Exact start-point of this part or off-mesh link. +Pathfinding.Funnel.PathPart.type pathpart.html#type If this is an off-mesh link or a sequence of nodes in a single graph. +Pathfinding.Funnel.RightSideBit funnel.html#RightSideBit +Pathfinding.FunnelModifier.FunnelQuality funnelmodifier.html#FunnelQuality +Pathfinding.FunnelModifier.Order funnelmodifier.html#Order +Pathfinding.FunnelModifier.accountForGridPenalties funnelmodifier.html#accountForGridPenalties When using a grid graph, take penalties, tag penalties and ITraversalProvider penalties into account. \n\nEnabling this is quite slow. It can easily make the modifier take twice the amount of time to run. So unless you are using penalties/tags/ITraversalProvider penalties that you need to take into account when simplifying the path, you should leave this disabled. +Pathfinding.FunnelModifier.quality funnelmodifier.html#quality Determines if funnel simplification is used. \n\nWhen using the low quality setting only the funnel algorithm is used but when the high quality setting an additional step is done to simplify the path even more.\n\nOn tiled recast/navmesh graphs, but sometimes on normal ones as well, it can be good to simplify the funnel as a post-processing step to make the paths straighter.\n\nThis has a moderate performance impact during frames when a path calculation is completed. This is why it is disabled by default. For any units that you want high quality movement for you should enable it.\n\n <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.FunnelModifier.splitAtEveryPortal funnelmodifier.html#splitAtEveryPortal Insert a vertex every time the path crosses a portal instead of only at the corners of the path. \n\nThe resulting path will have exactly one vertex per portal if this is enabled. This may introduce vertices with the same position in the output (esp. in corners where many portals meet). <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.GUIUtilityx.colors guiutilityx.html#colors +Pathfinding.GlobalNodeStorage.DebugPathNode.fractionAlongEdge debugpathnode.html#fractionAlongEdge +Pathfinding.GlobalNodeStorage.DebugPathNode.g debugpathnode.html#g +Pathfinding.GlobalNodeStorage.DebugPathNode.h debugpathnode.html#h +Pathfinding.GlobalNodeStorage.DebugPathNode.parentIndex debugpathnode.html#parentIndex +Pathfinding.GlobalNodeStorage.DebugPathNode.pathID debugpathnode.html#pathID +Pathfinding.GlobalNodeStorage.IndexedStack.Count indexedstack.html#Count +Pathfinding.GlobalNodeStorage.IndexedStack.buffer indexedstack.html#buffer +Pathfinding.GlobalNodeStorage.JobAllocateNodes.allowBoundsChecks joballocatenodes2.html#allowBoundsChecks +Pathfinding.GlobalNodeStorage.JobAllocateNodes.count joballocatenodes2.html#count +Pathfinding.GlobalNodeStorage.JobAllocateNodes.createNode joballocatenodes2.html#createNode +Pathfinding.GlobalNodeStorage.JobAllocateNodes.nodeStorage joballocatenodes2.html#nodeStorage +Pathfinding.GlobalNodeStorage.JobAllocateNodes.result joballocatenodes2.html#result +Pathfinding.GlobalNodeStorage.JobAllocateNodes.variantsPerNode joballocatenodes2.html#variantsPerNode +Pathfinding.GlobalNodeStorage.MaxTemporaryNodes globalnodestorage.html#MaxTemporaryNodes +Pathfinding.GlobalNodeStorage.PathfindingThreadData.debugPathNodes pathfindingthreaddata.html#debugPathNodes +Pathfinding.GlobalNodeStorage.PathfindingThreadData.pathNodes pathfindingthreaddata.html#pathNodes +Pathfinding.GlobalNodeStorage.astar globalnodestorage.html#astar +Pathfinding.GlobalNodeStorage.destroyedNodesVersion globalnodestorage.html#destroyedNodesVersion Number of nodes that have been destroyed in total. +Pathfinding.GlobalNodeStorage.lastAllocationJob globalnodestorage.html#lastAllocationJob +Pathfinding.GlobalNodeStorage.nextNodeIndex globalnodestorage.html#nextNodeIndex Holds the next node index which has not been used by any previous node. \n\n[more in online documentation] +Pathfinding.GlobalNodeStorage.nodeIndexPools globalnodestorage.html#nodeIndexPools Holds indices for nodes that have been destroyed. \n\nTo avoid trashing a lot of memory structures when nodes are frequently deleted and created, node indices are reused.\n\nThere's one pool for each possible number of node variants (1, 2 and 3). +Pathfinding.GlobalNodeStorage.nodes globalnodestorage.html#nodes Maps from NodeIndex to node. +Pathfinding.GlobalNodeStorage.pathfindingThreadData globalnodestorage.html#pathfindingThreadData +Pathfinding.GlobalNodeStorage.reservedPathNodeData globalnodestorage.html#reservedPathNodeData The number of nodes for which path node data has been reserved. \n\nWill be at least as high as nextNodeIndex +Pathfinding.GraphDebugMode pathfinding.html#GraphDebugMode How to visualize the graphs in the editor. +Pathfinding.GraphEditor.editor grapheditor.html#editor +Pathfinding.GraphEditor.fadeArea grapheditor.html#fadeArea Stores if the graph is visible or not in the inspector. +Pathfinding.GraphEditor.infoFadeArea grapheditor.html#infoFadeArea Stores if the graph info box is visible or not in the inspector. +Pathfinding.GraphEditorBase.target grapheditorbase.html#target NavGraph this editor is exposing. +Pathfinding.GraphHitInfo.distance graphhitinfo.html#distance Distance from origin to point. +Pathfinding.GraphHitInfo.node graphhitinfo.html#node Node which contained the edge which was hit. \n\nIf the linecast did not hit anything then this will be set to the last node along the line's path (the one which contains the endpoint).\n\nFor layered grid graphs the linecast will return true (i.e: no free line of sight) if, when walking the graph, we ended up at the right X,Z coordinate for the end node, but the end node was on a different level (e.g the floor below or above in a building). In this case no node edge was really hit so this field will still be null.\n\nIf the origin was inside an unwalkable node, then this field will be set to that node.\n\nIf no node could be found which contained the origin, then this field will be set to null. +Pathfinding.GraphHitInfo.origin graphhitinfo.html#origin Start of the segment/ray. \n\nNote that the point passed to the Linecast method will be clamped to the surface on the navmesh, but it will be identical when seen from above. +Pathfinding.GraphHitInfo.point graphhitinfo.html#point Hit point. \n\nThis is typically a point on the border of the navmesh.\n\nIn case no obstacle was hit then this will be set to the endpoint of the segment.\n\nIf the origin was inside an unwalkable node, then this will be set to the origin point. +Pathfinding.GraphHitInfo.tangent graphhitinfo.html#tangent Tangent of the edge which was hit. \n\n <b>[image in online documentation]</b>\n\nIf nothing was hit, this will be Vector3.zero. +Pathfinding.GraphHitInfo.tangentOrigin graphhitinfo.html#tangentOrigin Where the tangent starts. \n\ntangentOrigin and tangent together actually describes the edge which was hit. <b>[image in online documentation]</b>\n\nIf nothing was hit, this will be Vector3.zero. +Pathfinding.GraphMask.everything graphmask.html#everything A mask containing every graph. +Pathfinding.GraphMask.value graphmask.html#value Bitmask representing the mask. +Pathfinding.GraphMaskDrawer.graphLabels graphmaskdrawer.html#graphLabels +Pathfinding.GraphModifier.EventType graphmodifier.html#EventType GraphModifier event type. +Pathfinding.GraphModifier.next graphmodifier.html#next +Pathfinding.GraphModifier.prev graphmodifier.html#prev +Pathfinding.GraphModifier.root graphmodifier.html#root All active graph modifiers. +Pathfinding.GraphModifier.uniqueID graphmodifier.html#uniqueID Unique persistent ID for this component, used for serialization. +Pathfinding.GraphModifier.usedIDs graphmodifier.html#usedIDs Maps persistent IDs to the component that uses it. +Pathfinding.GraphNode.Area graphnode.html#Area Connected component that contains the node. \n\nThis is visualized in the scene view as differently colored nodes (if the graph coloring mode is set to 'Areas'). Each area represents a set of nodes such that there is no valid path between nodes of different colors.\n\n[more in online documentation] +Pathfinding.GraphNode.Destroyed graphnode.html#Destroyed +Pathfinding.GraphNode.DestroyedNodeIndex graphnode.html#DestroyedNodeIndex +Pathfinding.GraphNode.Flags graphnode.html#Flags Holds various bitpacked variables. \n\nBit 0: Walkable Bits 1 through 17: HierarchicalNodeIndex Bit 18: IsHierarchicalNodeDirty Bits 19 through 23: Tag Bits 24 through 31: GraphIndex\n\n[more in online documentation] +Pathfinding.GraphNode.FlagsGraphMask graphnode.html#FlagsGraphMask Mask of graph index bits. \n\n[more in online documentation] +Pathfinding.GraphNode.FlagsGraphOffset graphnode.html#FlagsGraphOffset Start of graph index bits. \n\n[more in online documentation] +Pathfinding.GraphNode.FlagsHierarchicalIndexOffset graphnode.html#FlagsHierarchicalIndexOffset Start of hierarchical node index bits. \n\n[more in online documentation] +Pathfinding.GraphNode.FlagsTagMask graphnode.html#FlagsTagMask Mask of tag bits. \n\n[more in online documentation] +Pathfinding.GraphNode.FlagsTagOffset graphnode.html#FlagsTagOffset Start of tag bits. \n\n[more in online documentation] +Pathfinding.GraphNode.FlagsWalkableMask graphnode.html#FlagsWalkableMask Mask of the walkable bit. \n\n[more in online documentation] +Pathfinding.GraphNode.FlagsWalkableOffset graphnode.html#FlagsWalkableOffset Position of the walkable bit. \n\n[more in online documentation] +Pathfinding.GraphNode.Graph graphnode.html#Graph Graph which this node belongs to. \n\nIf you know the node belongs to a particular graph type, you can cast it to that type: <b>[code in online documentation]</b>\n\nWill return null if the node has been destroyed. +Pathfinding.GraphNode.GraphIndex graphnode.html#GraphIndex Graph which contains this node. \n\n[more in online documentation] +Pathfinding.GraphNode.HierarchicalDirtyMask graphnode.html#HierarchicalDirtyMask Mask of the IsHierarchicalNodeDirty bit. \n\n[more in online documentation] +Pathfinding.GraphNode.HierarchicalDirtyOffset graphnode.html#HierarchicalDirtyOffset Start of IsHierarchicalNodeDirty bits. \n\n[more in online documentation] +Pathfinding.GraphNode.HierarchicalIndexMask graphnode.html#HierarchicalIndexMask Mask of hierarchical node index bits. \n\n[more in online documentation] +Pathfinding.GraphNode.HierarchicalNodeIndex graphnode.html#HierarchicalNodeIndex Hierarchical Node that contains this node. \n\nThe graph is divided into clusters of small hierarchical nodes in which there is a path from every node to every other node. This structure is used to speed up connected component calculations which is used to quickly determine if a node is reachable from another node.\n\n[more in online documentation] +Pathfinding.GraphNode.InvalidGraphIndex graphnode.html#InvalidGraphIndex +Pathfinding.GraphNode.InvalidNodeIndex graphnode.html#InvalidNodeIndex +Pathfinding.GraphNode.IsHierarchicalNodeDirty graphnode.html#IsHierarchicalNodeDirty Some internal bookkeeping. +Pathfinding.GraphNode.MaxGraphIndex graphnode.html#MaxGraphIndex Max number of graphs-1. +Pathfinding.GraphNode.MaxHierarchicalNodeIndex graphnode.html#MaxHierarchicalNodeIndex +Pathfinding.GraphNode.MaxTagIndex graphnode.html#MaxTagIndex Max number of tags - 1. \n\nAlways a power of 2 minus one +Pathfinding.GraphNode.NodeIndex graphnode.html#NodeIndex Internal unique index. \n\nEvery node will get a unique index. This index is not necessarily correlated with e.g the position of the node in the graph. +Pathfinding.GraphNode.NodeIndexMask graphnode.html#NodeIndexMask +Pathfinding.GraphNode.PathNodeVariants graphnode.html#PathNodeVariants How many path node variants should be created for each node. \n\nThis should be a constant for each node type.\n\nTypically this is 1, but for example the triangle mesh node type has 3 variants, one for each edge.\n\n[more in online documentation] +Pathfinding.GraphNode.Penalty graphnode.html#Penalty Penalty cost for walking on this node. \n\nThis can be used to make it harder/slower to walk over specific nodes. A cost of 1000 (Int3.Precision) corresponds to the cost of moving 1 world unit.\n\n[more in online documentation] +Pathfinding.GraphNode.Tag graphnode.html#Tag Node tag. \n\n[more in online documentation] +Pathfinding.GraphNode.TemporaryFlag1 graphnode.html#TemporaryFlag1 Temporary flag for internal purposes. \n\nMay only be used in the Unity thread. Must be reset to false after every use. +Pathfinding.GraphNode.TemporaryFlag1Mask graphnode.html#TemporaryFlag1Mask +Pathfinding.GraphNode.TemporaryFlag2 graphnode.html#TemporaryFlag2 Temporary flag for internal purposes. \n\nMay only be used in the Unity thread. Must be reset to false after every use. +Pathfinding.GraphNode.TemporaryFlag2Mask graphnode.html#TemporaryFlag2Mask +Pathfinding.GraphNode.Walkable graphnode.html#Walkable True if the node is traversable. \n\n[more in online documentation] +Pathfinding.GraphNode.flags graphnode.html#flags Bitpacked field holding several pieces of data. \n\n[more in online documentation] +Pathfinding.GraphNode.nodeIndex graphnode.html#nodeIndex Internal unique index. \n\nAlso stores some bitpacked values such as TemporaryFlag1 and TemporaryFlag2. +Pathfinding.GraphNode.penalty graphnode.html#penalty Penalty cost for walking on this node. \n\nThis can be used to make it harder/slower to walk over certain nodes.\n\nA penalty of 1000 (Int3.Precision) corresponds to the cost of walking one world unit.\n\n[more in online documentation] +Pathfinding.GraphNode.position graphnode.html#position Position of the node in world space. \n\n[more in online documentation] +Pathfinding.GraphUpdateObject.GraphUpdateData.nodeIndices graphupdatedata.html#nodeIndices Node indices to update. \n\nRemaining nodes should be left alone. +Pathfinding.GraphUpdateObject.GraphUpdateData.nodePenalties graphupdatedata.html#nodePenalties +Pathfinding.GraphUpdateObject.GraphUpdateData.nodePositions graphupdatedata.html#nodePositions +Pathfinding.GraphUpdateObject.GraphUpdateData.nodeTags graphupdatedata.html#nodeTags +Pathfinding.GraphUpdateObject.GraphUpdateData.nodeWalkable graphupdatedata.html#nodeWalkable +Pathfinding.GraphUpdateObject.JobGraphUpdate.bounds jobgraphupdate.html#bounds +Pathfinding.GraphUpdateObject.JobGraphUpdate.data jobgraphupdate.html#data +Pathfinding.GraphUpdateObject.JobGraphUpdate.modifyTag jobgraphupdate.html#modifyTag +Pathfinding.GraphUpdateObject.JobGraphUpdate.modifyWalkability jobgraphupdate.html#modifyWalkability +Pathfinding.GraphUpdateObject.JobGraphUpdate.penaltyDelta jobgraphupdate.html#penaltyDelta +Pathfinding.GraphUpdateObject.JobGraphUpdate.shape jobgraphupdate.html#shape +Pathfinding.GraphUpdateObject.JobGraphUpdate.tagValue jobgraphupdate.html#tagValue +Pathfinding.GraphUpdateObject.JobGraphUpdate.walkabilityValue jobgraphupdate.html#walkabilityValue +Pathfinding.GraphUpdateObject.STAGE_ABORTED graphupdateobject.html#STAGE_ABORTED +Pathfinding.GraphUpdateObject.STAGE_APPLIED graphupdateobject.html#STAGE_APPLIED +Pathfinding.GraphUpdateObject.STAGE_CREATED graphupdateobject.html#STAGE_CREATED +Pathfinding.GraphUpdateObject.STAGE_PENDING graphupdateobject.html#STAGE_PENDING +Pathfinding.GraphUpdateObject.addPenalty graphupdateobject.html#addPenalty Penalty to add to the nodes. \n\nA penalty of 1000 is equivalent to the cost of moving 1 world unit. +Pathfinding.GraphUpdateObject.bounds graphupdateobject.html#bounds The bounds to update nodes within. \n\nDefined in world space. +Pathfinding.GraphUpdateObject.internalStage graphupdateobject.html#internalStage Info about if a graph update has been applied or not. \n\nEither an enum (see STAGE_CREATED and associated constants) or a non-negative count of the number of graphs that are waiting to apply this graph update. +Pathfinding.GraphUpdateObject.modifyTag graphupdateobject.html#modifyTag If true, all nodes' <b>tag</b> will be set to setTag. +Pathfinding.GraphUpdateObject.modifyWalkability graphupdateobject.html#modifyWalkability If true, all nodes' <b>walkable</b> variable will be set to setWalkability. \n\nIt is not recommended to combine this with updatePhysics since then you will just overwrite what updatePhysics calculated. +Pathfinding.GraphUpdateObject.nnConstraint graphupdateobject.html#nnConstraint NNConstraint to use. \n\nThe Pathfinding.NNConstraint.SuitableGraph function will be called on the NNConstraint to enable filtering of which graphs to update.\n\n[more in online documentation]\n [more in online documentation] +Pathfinding.GraphUpdateObject.resetPenaltyOnPhysics graphupdateobject.html#resetPenaltyOnPhysics Reset penalties to their initial values when updating grid graphs and updatePhysics is true. \n\nIf you want to keep old penalties even when you update the graph you may want to disable this option.\n\nThe images below shows two overlapping graph update objects, the right one happened to be applied before the left one. They both have updatePhysics = true and are set to increase the penalty of the nodes by some amount.\n\nThe first image shows the result when resetPenaltyOnPhysics is false. Both penalties are added correctly. <b>[image in online documentation]</b>\n\nThis second image shows when resetPenaltyOnPhysics is set to true. The first GUO is applied correctly, but then the second one (the left one) is applied and during its updating, it resets the penalties first and then adds penalty to the nodes. The result is that the penalties from both GUOs are not added together. The green patch in at the border is there because physics recalculation (recalculation of the position of the node, checking for obstacles etc.) affects a slightly larger area than the original GUO bounds because of the Grid Graph -> Collision Testing -> Diameter setting (it is enlarged by that value). So some extra nodes have their penalties reset.\n\n <b>[image in online documentation]</b> +Pathfinding.GraphUpdateObject.setTag graphupdateobject.html#setTag If modifyTag is true, all nodes' <b>tag</b> will be set to this value. +Pathfinding.GraphUpdateObject.setWalkability graphupdateobject.html#setWalkability If modifyWalkability is true, the nodes' <b>walkable</b> variable will be set to this value. +Pathfinding.GraphUpdateObject.shape graphupdateobject.html#shape A shape can be specified if a bounds object does not give enough precision. \n\nNote that if you set this, you should set the bounds so that it encloses the shape because the bounds will be used as an initial fast check for which nodes that should be updated. +Pathfinding.GraphUpdateObject.stage graphupdateobject.html#stage Info about if a graph update has been applied or not. +Pathfinding.GraphUpdateObject.trackChangedNodes graphupdateobject.html#trackChangedNodes Track which nodes are changed and save backup data. \n\nUsed internally to revert changes if needed.\n\n[more in online documentation] +Pathfinding.GraphUpdateObject.updateErosion graphupdateobject.html#updateErosion Update Erosion for GridGraphs. \n\nWhen enabled, erosion will be recalculated for grid graphs after the GUO has been applied.\n\nIn the below image you can see the different effects you can get with the different values.\n\nThe first image shows the graph when no GUO has been applied. The blue box is not identified as an obstacle by the graph, the reason there are unwalkable nodes around it is because there is a height difference (nodes are placed on top of the box) so erosion will be applied (an erosion value of 2 is used in this graph). The orange box is identified as an obstacle, so the area of unwalkable nodes around it is a bit larger since both erosion and collision has made nodes unwalkable.\n\nThe GUO used simply sets walkability to true, i.e making all nodes walkable.\n\n <b>[image in online documentation]</b>\n\nWhen updateErosion=True, the reason the blue box still has unwalkable nodes around it is because there is still a height difference so erosion will still be applied. The orange box on the other hand has no height difference and all nodes are set to walkable.\n\nWhen updateErosion=False, all nodes walkability are simply set to be walkable in this example.\n\n[more in online documentation] +Pathfinding.GraphUpdateObject.updatePhysics graphupdateobject.html#updatePhysics Use physics checks to update nodes. \n\nWhen updating a grid graph and this is true, the nodes' position and walkability will be updated using physics checks with settings from "Collision Testing" and "Height Testing".\n\nWhen updating a PointGraph, setting this to true will make it re-evaluate all connections in the graph which passes through the bounds.\n\nThis has no effect when updating GridGraphs if modifyWalkability is turned on. You should not combine updatePhysics and modifyWalkability.\n\nOn RecastGraphs, having this enabled will trigger a complete recalculation of all tiles intersecting the bounds. This is quite slow (but powerful). If you only want to update e.g penalty on existing nodes, leave it disabled. +Pathfinding.GraphUpdateProcessor.IsAnyGraphUpdateInProgress graphupdateprocessor.html#IsAnyGraphUpdateInProgress Returns if any graph updates are in progress. +Pathfinding.GraphUpdateProcessor.IsAnyGraphUpdateQueued graphupdateprocessor.html#IsAnyGraphUpdateQueued Returns if any graph updates are waiting to be applied. +Pathfinding.GraphUpdateProcessor.MarkerApply graphupdateprocessor.html#MarkerApply +Pathfinding.GraphUpdateProcessor.MarkerCalculate graphupdateprocessor.html#MarkerCalculate +Pathfinding.GraphUpdateProcessor.MarkerSleep graphupdateprocessor.html#MarkerSleep +Pathfinding.GraphUpdateProcessor.anyGraphUpdateInProgress graphupdateprocessor.html#anyGraphUpdateInProgress Used for IsAnyGraphUpdateInProgress. +Pathfinding.GraphUpdateProcessor.astar graphupdateprocessor.html#astar Holds graphs that can be updated. +Pathfinding.GraphUpdateProcessor.graphUpdateQueue graphupdateprocessor.html#graphUpdateQueue Queue containing all waiting graph update queries. \n\nAdd to this queue by using AddToQueue. \n\n[more in online documentation] +Pathfinding.GraphUpdateProcessor.pendingGraphUpdates graphupdateprocessor.html#pendingGraphUpdates +Pathfinding.GraphUpdateProcessor.pendingPromises graphupdateprocessor.html#pendingPromises +Pathfinding.GraphUpdateScene.GizmoColorSelected graphupdatescene.html#GizmoColorSelected +Pathfinding.GraphUpdateScene.GizmoColorUnselected graphupdatescene.html#GizmoColorUnselected +Pathfinding.GraphUpdateScene.applyOnScan graphupdatescene.html#applyOnScan Apply this graph update object whenever a graph is rescanned. +Pathfinding.GraphUpdateScene.applyOnStart graphupdatescene.html#applyOnStart Apply this graph update object on start. +Pathfinding.GraphUpdateScene.convex graphupdatescene.html#convex Use the convex hull of the points instead of the original polygon. \n\n[more in online documentation] +Pathfinding.GraphUpdateScene.convexPoints graphupdatescene.html#convexPoints Private cached convex hull of the points. +Pathfinding.GraphUpdateScene.firstApplied graphupdatescene.html#firstApplied Has apply been called yet. \n\nUsed to prevent applying twice when both applyOnScan and applyOnStart are enabled +Pathfinding.GraphUpdateScene.legacyMode graphupdatescene.html#legacyMode Emulates behavior from before version 4.0. +Pathfinding.GraphUpdateScene.legacyUseWorldSpace graphupdatescene.html#legacyUseWorldSpace Use world space for coordinates. \n\nIf true, the shape will not follow when moving around the transform. +Pathfinding.GraphUpdateScene.minBoundsHeight graphupdatescene.html#minBoundsHeight Minumum height of the bounds of the resulting Graph Update Object. \n\nUseful when all points are laid out on a plane but you still need a bounds with a height greater than zero since a zero height graph update object would usually result in no nodes being updated. +Pathfinding.GraphUpdateScene.modifyTag graphupdatescene.html#modifyTag Should the tags of the nodes be modified. \n\nIf enabled, set all nodes' tags to setTag +Pathfinding.GraphUpdateScene.modifyWalkability graphupdatescene.html#modifyWalkability If true, then all affected nodes will be made walkable or unwalkable according to setWalkability. +Pathfinding.GraphUpdateScene.penaltyDelta graphupdatescene.html#penaltyDelta Penalty to add to nodes. \n\nUsually you need quite large values, at least 1000-10000. A higher penalty means that agents will try to avoid those nodes more.\n\nBe careful when setting negative values since if a node gets a negative penalty it will underflow and instead get really large. In most cases a warning will be logged if that happens.\n\n[more in online documentation] +Pathfinding.GraphUpdateScene.points graphupdatescene.html#points Points which define the region to update. +Pathfinding.GraphUpdateScene.resetPenaltyOnPhysics graphupdatescene.html#resetPenaltyOnPhysics Reset penalties to their initial values when updating grid graphs and updatePhysics is true. \n\nIf you want to keep old penalties even when you update the graph you may want to disable this option.\n\nThe images below shows two overlapping graph update objects, the right one happened to be applied before the left one. They both have updatePhysics = true and are set to increase the penalty of the nodes by some amount.\n\nThe first image shows the result when resetPenaltyOnPhysics is false. Both penalties are added correctly. <b>[image in online documentation]</b>\n\nThis second image shows when resetPenaltyOnPhysics is set to true. The first GUO is applied correctly, but then the second one (the left one) is applied and during its updating, it resets the penalties first and then adds penalty to the nodes. The result is that the penalties from both GUOs are not added together. The green patch in at the border is there because physics recalculation (recalculation of the position of the node, checking for obstacles etc.) affects a slightly larger area than the original GUO bounds because of the Grid Graph -> Collision Testing -> Diameter setting (it is enlarged by that value). So some extra nodes have their penalties reset.\n\n <b>[image in online documentation]</b> +Pathfinding.GraphUpdateScene.setTag graphupdatescene.html#setTag If modifyTag is enabled, set all nodes' tags to this value. +Pathfinding.GraphUpdateScene.setTagCompatibility graphupdatescene.html#setTagCompatibility +Pathfinding.GraphUpdateScene.setTagInvert graphupdatescene.html#setTagInvert Private cached inversion of setTag. \n\nUsed for InvertSettings() +Pathfinding.GraphUpdateScene.setWalkability graphupdatescene.html#setWalkability Nodes will be made walkable or unwalkable according to this value if modifyWalkability is true. +Pathfinding.GraphUpdateScene.updateErosion graphupdatescene.html#updateErosion Update Erosion for GridGraphs. \n\nWhen enabled, erosion will be recalculated for grid graphs after the GUO has been applied.\n\nIn the below image you can see the different effects you can get with the different values.\n\nThe first image shows the graph when no GUO has been applied. The blue box is not identified as an obstacle by the graph, the reason there are unwalkable nodes around it is because there is a height difference (nodes are placed on top of the box) so erosion will be applied (an erosion value of 2 is used in this graph). The orange box is identified as an obstacle, so the area of unwalkable nodes around it is a bit larger since both erosion and collision has made nodes unwalkable.\n\nThe GUO used simply sets walkability to true, i.e making all nodes walkable.\n\n <b>[image in online documentation]</b>\n\nWhen updateErosion=True, the reason the blue box still has unwalkable nodes around it is because there is still a height difference so erosion will still be applied. The orange box on the other hand has no height difference and all nodes are set to walkable.\n\nWhen updateErosion=False, all nodes walkability are simply set to be walkable in this example.\n\n[more in online documentation] +Pathfinding.GraphUpdateScene.updatePhysics graphupdatescene.html#updatePhysics Update node's walkability and connectivity using physics functions. \n\nFor grid graphs, this will update the node's position and walkability exactly like when doing a scan of the graph. If enabled for grid graphs, modifyWalkability will be ignored.\n\nFor Point Graphs, this will recalculate all connections which passes through the bounds of the resulting Graph Update Object using raycasts (if enabled). +Pathfinding.GraphUpdateSceneEditor.PointColor graphupdatesceneeditor.html#PointColor +Pathfinding.GraphUpdateSceneEditor.PointSelectedColor graphupdatesceneeditor.html#PointSelectedColor +Pathfinding.GraphUpdateSceneEditor.pointGizmosRadius graphupdatesceneeditor.html#pointGizmosRadius +Pathfinding.GraphUpdateSceneEditor.scripts graphupdatesceneeditor.html#scripts +Pathfinding.GraphUpdateSceneEditor.selectedPoint graphupdatesceneeditor.html#selectedPoint +Pathfinding.GraphUpdateShape.BurstShape.Everything burstshape.html#Everything Shape that contains everything. +Pathfinding.GraphUpdateShape.BurstShape.containsEverything burstshape.html#containsEverything +Pathfinding.GraphUpdateShape.BurstShape.forward burstshape.html#forward +Pathfinding.GraphUpdateShape.BurstShape.origin burstshape.html#origin +Pathfinding.GraphUpdateShape.BurstShape.points burstshape.html#points +Pathfinding.GraphUpdateShape.BurstShape.right burstshape.html#right +Pathfinding.GraphUpdateShape._convex graphupdateshape.html#_convex +Pathfinding.GraphUpdateShape._convexPoints graphupdateshape.html#_convexPoints +Pathfinding.GraphUpdateShape._points graphupdateshape.html#_points +Pathfinding.GraphUpdateShape.convex graphupdateshape.html#convex Sets if the convex hull of the points should be calculated. \n\nConvex hulls are faster but non-convex hulls can be used to specify more complicated shapes. +Pathfinding.GraphUpdateShape.forward graphupdateshape.html#forward +Pathfinding.GraphUpdateShape.minimumHeight graphupdateshape.html#minimumHeight +Pathfinding.GraphUpdateShape.origin graphupdateshape.html#origin +Pathfinding.GraphUpdateShape.points graphupdateshape.html#points Gets or sets the points of the polygon in the shape. \n\nThese points should be specified in clockwise order. Will automatically calculate the convex hull if convex is set to true +Pathfinding.GraphUpdateShape.right graphupdateshape.html#right +Pathfinding.GraphUpdateShape.up graphupdateshape.html#up +Pathfinding.GraphUpdateStage pathfinding.html#GraphUpdateStage Info about if a graph update has been applied or not. +Pathfinding.GraphUpdateThreading pathfinding.html#GraphUpdateThreading +Pathfinding.Graphs.Grid.ColliderType grid.html#ColliderType Determines collision check shape. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GraphCollision.RaycastErrorMargin graphcollision.html#RaycastErrorMargin Offset to apply after each raycast to make sure we don't hit the same point again in CheckHeightAll. +Pathfinding.Graphs.Grid.GraphCollision.collisionCheck graphcollision.html#collisionCheck Toggle collision check. +Pathfinding.Graphs.Grid.GraphCollision.collisionOffset graphcollision.html#collisionOffset Height above the ground that collision checks should be done. \n\nFor example, if the ground was found at y=0, collisionOffset = 2 type = Capsule and height = 3 then the physics system will be queried to see if there are any colliders in a capsule for which the bottom sphere that is made up of is centered at y=2 and the top sphere has its center at y=2+3=5.\n\nIf type = Sphere then the sphere's center would be at y=2 in this case. +Pathfinding.Graphs.Grid.GraphCollision.contactFilter graphcollision.html#contactFilter Used for 2D collision queries. +Pathfinding.Graphs.Grid.GraphCollision.diameter graphcollision.html#diameter Diameter of capsule or sphere when checking for collision. \n\nWhen checking for collisions the system will check if any colliders overlap a specific shape at the node's position. The shape is determined by the type field.\n\nA diameter of 1 means that the shape has a diameter equal to the node's width, or in other words it is equal to nodeSize .\n\nIf type is set to Ray, this does not affect anything.\n\n <b>[image in online documentation]</b> +Pathfinding.Graphs.Grid.GraphCollision.dummyArray graphcollision.html#dummyArray Just so that the Physics2D.OverlapPoint method has some buffer to store things in. \n\nWe never actually read from this array, so we don't even care if this is thread safe. +Pathfinding.Graphs.Grid.GraphCollision.finalRadius graphcollision.html#finalRadius diameter * scale * 0.5. \n\nWhere <b>scale</b> usually is nodeSize \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GraphCollision.finalRaycastRadius graphcollision.html#finalRaycastRadius thickRaycastDiameter * scale * 0.5. \n\nWhere <b>scale</b> usually is nodeSize \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GraphCollision.fromHeight graphcollision.html#fromHeight The height to check from when checking height ('ray length' in the inspector). \n\nAs the image below visualizes, different ray lengths can make the ray hit different things. The distance is measured up from the graph plane.\n\n <b>[image in online documentation]</b> +Pathfinding.Graphs.Grid.GraphCollision.height graphcollision.html#height Height of capsule or length of ray when checking for collision. \n\nIf type is set to Sphere, this does not affect anything.\n\n <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.Graphs.Grid.GraphCollision.heightCheck graphcollision.html#heightCheck Toggle height check. \n\nIf false, the grid will be flat.\n\nThis setting will be ignored when 2D physics is used. +Pathfinding.Graphs.Grid.GraphCollision.heightMask graphcollision.html#heightMask Layers to be included in the height check. +Pathfinding.Graphs.Grid.GraphCollision.hitBuffer graphcollision.html#hitBuffer Internal buffer used by CheckHeightAll. +Pathfinding.Graphs.Grid.GraphCollision.mask graphcollision.html#mask Layers to be treated as obstacles. +Pathfinding.Graphs.Grid.GraphCollision.rayDirection graphcollision.html#rayDirection Direction of the ray when checking for collision. \n\nIf type is not Ray, this does not affect anything\n\n[more in online documentation] +Pathfinding.Graphs.Grid.GraphCollision.thickRaycast graphcollision.html#thickRaycast Toggles thick raycast. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GraphCollision.thickRaycastDiameter graphcollision.html#thickRaycastDiameter Diameter of the thick raycast in nodes. \n\n1 equals nodeSize +Pathfinding.Graphs.Grid.GraphCollision.type graphcollision.html#type Collision shape to use. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GraphCollision.unwalkableWhenNoGround graphcollision.html#unwalkableWhenNoGround Make nodes unwalkable when no ground was found with the height raycast. \n\nIf height raycast is turned off, this doesn't affect anything. +Pathfinding.Graphs.Grid.GraphCollision.up graphcollision.html#up Direction to use as <b>UP</b>. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GraphCollision.upheight graphcollision.html#upheight up * height. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GraphCollision.use2D graphcollision.html#use2D Use Unity 2D Physics API. \n\nIf enabled, the 2D Physics API will be used, and if disabled, the 3D Physics API will be used.\n\nThis changes the collider types (see type) from 3D versions to their corresponding 2D versions. For example the sphere shape becomes a circle.\n\nThe heightCheck setting will be ignored when 2D physics is used.\n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphNodeData.LightReader.nodePositions lightreader.html#nodePositions +Pathfinding.Graphs.Grid.GridGraphNodeData.LightReader.nodeWalkable lightreader.html#nodeWalkable +Pathfinding.Graphs.Grid.GridGraphNodeData.LightReader.nodes lightreader.html#nodes +Pathfinding.Graphs.Grid.GridGraphNodeData.allocationMethod gridgraphnodedata.html#allocationMethod +Pathfinding.Graphs.Grid.GridGraphNodeData.bounds gridgraphnodedata.html#bounds Bounds for the part of the graph that this data represents. \n\nFor example if the first layer of a layered grid graph is being updated between x=10 and x=20, z=5 and z=15 then this will be IntBounds(xmin=10, ymin=0, zmin=5, xmax=20, ymax=0, zmax=15) +Pathfinding.Graphs.Grid.GridGraphNodeData.connections gridgraphnodedata.html#connections Bitpacked connections of all nodes. \n\nConnections are stored in different formats depending on layeredDataLayout. You can use LayeredGridAdjacencyMapper and FlatGridAdjacencyMapper to access connections for the different data layouts.\n\nData is valid in these passes:\n- BeforeCollision: Invalid\n\n- BeforeConnections: Invalid\n\n- AfterConnections: Valid\n\n- AfterErosion: Valid (but will be overwritten)\n\n- PostProcess: Valid +Pathfinding.Graphs.Grid.GridGraphNodeData.layeredDataLayout gridgraphnodedata.html#layeredDataLayout True if the data may have multiple layers. \n\nFor layered data the nodes are laid out as `data[y*width*depth + z*width + x]`. For non-layered data the nodes are laid out as `data[z*width + x]` (which is equivalent to the above layout assuming y=0).\n\nThis also affects how node connections are stored. You can use LayeredGridAdjacencyMapper and FlatGridAdjacencyMapper to access connections for the different data layouts. +Pathfinding.Graphs.Grid.GridGraphNodeData.layers gridgraphnodedata.html#layers Number of layers that the data contains. \n\nFor a non-layered grid graph this will always be 1. +Pathfinding.Graphs.Grid.GridGraphNodeData.normals gridgraphnodedata.html#normals Normals of all nodes. \n\nIf height testing is disabled the normal will be (0,1,0) for all nodes. If a node doesn't exist (only happens in layered grid graphs) or if the height raycast didn't hit anything then the normal will be (0,0,0).\n\nData is valid in these passes:\n- BeforeCollision: Valid\n\n- BeforeConnections: Valid\n\n- AfterConnections: Valid\n\n- AfterErosion: Valid\n\n- PostProcess: Valid +Pathfinding.Graphs.Grid.GridGraphNodeData.numNodes gridgraphnodedata.html#numNodes +Pathfinding.Graphs.Grid.GridGraphNodeData.penalties gridgraphnodedata.html#penalties Bitpacked connections of all nodes. \n\nData is valid in these passes:\n- BeforeCollision: Valid\n\n- BeforeConnections: Valid\n\n- AfterConnections: Valid\n\n- AfterErosion: Valid\n\n- PostProcess: Valid +Pathfinding.Graphs.Grid.GridGraphNodeData.positions gridgraphnodedata.html#positions Positions of all nodes. \n\nData is valid in these passes:\n- BeforeCollision: Valid\n\n- BeforeConnections: Valid\n\n- AfterConnections: Valid\n\n- AfterErosion: Valid\n\n- PostProcess: Valid +Pathfinding.Graphs.Grid.GridGraphNodeData.tags gridgraphnodedata.html#tags Tags of all nodes. \n\nData is valid in these passes:\n- BeforeCollision: Valid (but if erosion uses tags then it will be overwritten later)\n\n- BeforeConnections: Valid (but if erosion uses tags then it will be overwritten later)\n\n- AfterConnections: Valid (but if erosion uses tags then it will be overwritten later)\n\n- AfterErosion: Valid\n\n- PostProcess: Valid +Pathfinding.Graphs.Grid.GridGraphNodeData.walkable gridgraphnodedata.html#walkable Walkability of all nodes before erosion happens. \n\nData is valid in these passes:\n- BeforeCollision: Valid (it will be combined with collision testing later)\n\n- BeforeConnections: Valid\n\n- AfterConnections: Valid\n\n- AfterErosion: Valid\n\n- PostProcess: Valid +Pathfinding.Graphs.Grid.GridGraphNodeData.walkableWithErosion gridgraphnodedata.html#walkableWithErosion Walkability of all nodes after erosion happens. \n\nThis is the final walkability of the nodes. If no erosion is used then the data will just be copied from the walkable array.\n\nData is valid in these passes:\n- BeforeCollision: Invalid\n\n- BeforeConnections: Invalid\n\n- AfterConnections: Invalid\n\n- AfterErosion: Valid\n\n- PostProcess: Valid +Pathfinding.Graphs.Grid.GridGraphScanData.bounds gridgraphscandata.html#bounds Bounds of the data arrays. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.dependencyTracker gridgraphscandata.html#dependencyTracker Tracks dependencies between jobs to allow parallelism without tediously specifying dependencies manually. \n\nAlways use when scheduling jobs. +Pathfinding.Graphs.Grid.GridGraphScanData.heightHits gridgraphscandata.html#heightHits Raycasts hits used for height testing. \n\nThis data is only valid if height testing is enabled, otherwise the array is uninitialized (heightHits.IsCreated will be false).\n\nData is valid in these passes:\n- BeforeCollision: Valid (if height testing is enabled)\n\n- BeforeConnections: Valid (if height testing is enabled)\n\n- AfterConnections: Valid (if height testing is enabled)\n\n- AfterErosion: Valid (if height testing is enabled)\n\n- PostProcess: Valid (if height testing is enabled)\n\n\n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.heightHitsBounds gridgraphscandata.html#heightHitsBounds Bounds for the heightHits array. \n\nDuring an update, the scan data may contain more nodes than we are doing height testing for. For a few nodes around the update, the data will be read from the existing graph, instead. This is done for performance. This means that there may not be any height testing information these nodes. However, all nodes that will be written to will always have height testing information. +Pathfinding.Graphs.Grid.GridGraphScanData.layeredDataLayout gridgraphscandata.html#layeredDataLayout True if the data may have multiple layers. \n\nFor layered data the nodes are laid out as `data[y*width*depth + z*width + x]`. For non-layered data the nodes are laid out as `data[z*width + x]` (which is equivalent to the above layout assuming y=0).\n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.nodeConnections gridgraphscandata.html#nodeConnections Node connections. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.nodeNormals gridgraphscandata.html#nodeNormals Node normals. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.nodePenalties gridgraphscandata.html#nodePenalties Node penalties. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.nodePositions gridgraphscandata.html#nodePositions Node positions. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.nodeTags gridgraphscandata.html#nodeTags Node tags. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.nodeWalkable gridgraphscandata.html#nodeWalkable Node walkability. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.nodeWalkableWithErosion gridgraphscandata.html#nodeWalkableWithErosion Node walkability with erosion. \n\n[more in online documentation] +Pathfinding.Graphs.Grid.GridGraphScanData.nodes gridgraphscandata.html#nodes Data for all nodes in the graph update that is being calculated. +Pathfinding.Graphs.Grid.GridGraphScanData.transform gridgraphscandata.html#transform Transforms graph-space to world space. +Pathfinding.Graphs.Grid.GridGraphScanData.up gridgraphscandata.html#up The up direction of the graph, in world space. +Pathfinding.Graphs.Grid.Jobs.JobAllocateNodes.active joballocatenodes.html#active +Pathfinding.Graphs.Grid.Jobs.JobAllocateNodes.dataBounds joballocatenodes.html#dataBounds +Pathfinding.Graphs.Grid.Jobs.JobAllocateNodes.newGridNodeDelegate joballocatenodes.html#newGridNodeDelegate +Pathfinding.Graphs.Grid.Jobs.JobAllocateNodes.nodeArrayBounds joballocatenodes.html#nodeArrayBounds +Pathfinding.Graphs.Grid.Jobs.JobAllocateNodes.nodeNormals joballocatenodes.html#nodeNormals +Pathfinding.Graphs.Grid.Jobs.JobAllocateNodes.nodes joballocatenodes.html#nodes +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.allowBoundsChecks jobcalculategridconnections.html#allowBoundsChecks +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.arrayBounds jobcalculategridconnections.html#arrayBounds +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.bounds jobcalculategridconnections.html#bounds +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.characterHeight jobcalculategridconnections.html#characterHeight +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.cutCorners jobcalculategridconnections.html#cutCorners +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.layeredDataLayout jobcalculategridconnections.html#layeredDataLayout +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.maxStepHeight jobcalculategridconnections.html#maxStepHeight +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.maxStepUsesSlope jobcalculategridconnections.html#maxStepUsesSlope +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.neighbours jobcalculategridconnections.html#neighbours +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.nodeConnections jobcalculategridconnections.html#nodeConnections All bitpacked node connections. +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.nodeNormals jobcalculategridconnections.html#nodeNormals +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.nodePositions jobcalculategridconnections.html#nodePositions +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.nodeWalkable jobcalculategridconnections.html#nodeWalkable +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.up jobcalculategridconnections.html#up Normalized up direction. +Pathfinding.Graphs.Grid.Jobs.JobCalculateGridConnections.use2D jobcalculategridconnections.html#use2D +Pathfinding.Graphs.Grid.Jobs.JobCheckCollisions.collision jobcheckcollisions.html#collision +Pathfinding.Graphs.Grid.Jobs.JobCheckCollisions.collisionResult jobcheckcollisions.html#collisionResult +Pathfinding.Graphs.Grid.Jobs.JobCheckCollisions.nodePositions jobcheckcollisions.html#nodePositions +Pathfinding.Graphs.Grid.Jobs.JobCheckCollisions.startIndex jobcheckcollisions.html#startIndex +Pathfinding.Graphs.Grid.Jobs.JobColliderHitsToBooleans.hits jobcolliderhitstobooleans.html#hits +Pathfinding.Graphs.Grid.Jobs.JobColliderHitsToBooleans.result jobcolliderhitstobooleans.html#result +Pathfinding.Graphs.Grid.Jobs.JobCopyBuffers.bounds jobcopybuffers.html#bounds +Pathfinding.Graphs.Grid.Jobs.JobCopyBuffers.copyPenaltyAndTags jobcopybuffers.html#copyPenaltyAndTags +Pathfinding.Graphs.Grid.Jobs.JobCopyBuffers.input jobcopybuffers.html#input +Pathfinding.Graphs.Grid.Jobs.JobCopyBuffers.output jobcopybuffers.html#output +Pathfinding.Graphs.Grid.Jobs.JobErosion.bounds joberosion.html#bounds +Pathfinding.Graphs.Grid.Jobs.JobErosion.erosion joberosion.html#erosion +Pathfinding.Graphs.Grid.Jobs.JobErosion.erosionStartTag joberosion.html#erosionStartTag +Pathfinding.Graphs.Grid.Jobs.JobErosion.erosionTagsPrecedenceMask joberosion.html#erosionTagsPrecedenceMask +Pathfinding.Graphs.Grid.Jobs.JobErosion.erosionUsesTags joberosion.html#erosionUsesTags +Pathfinding.Graphs.Grid.Jobs.JobErosion.hexagonNeighbourIndices joberosion.html#hexagonNeighbourIndices +Pathfinding.Graphs.Grid.Jobs.JobErosion.neighbours joberosion.html#neighbours +Pathfinding.Graphs.Grid.Jobs.JobErosion.nodeConnections joberosion.html#nodeConnections +Pathfinding.Graphs.Grid.Jobs.JobErosion.nodeTags joberosion.html#nodeTags +Pathfinding.Graphs.Grid.Jobs.JobErosion.nodeWalkable joberosion.html#nodeWalkable +Pathfinding.Graphs.Grid.Jobs.JobErosion.outNodeWalkable joberosion.html#outNodeWalkable +Pathfinding.Graphs.Grid.Jobs.JobErosion.writeMask joberosion.html#writeMask +Pathfinding.Graphs.Grid.Jobs.JobFilterDiagonalConnections.allowBoundsChecks jobfilterdiagonalconnections.html#allowBoundsChecks +Pathfinding.Graphs.Grid.Jobs.JobFilterDiagonalConnections.cutCorners jobfilterdiagonalconnections.html#cutCorners +Pathfinding.Graphs.Grid.Jobs.JobFilterDiagonalConnections.neighbours jobfilterdiagonalconnections.html#neighbours +Pathfinding.Graphs.Grid.Jobs.JobFilterDiagonalConnections.nodeConnections jobfilterdiagonalconnections.html#nodeConnections All bitpacked node connections. +Pathfinding.Graphs.Grid.Jobs.JobFilterDiagonalConnections.slice jobfilterdiagonalconnections.html#slice +Pathfinding.Graphs.Grid.Jobs.JobMergeRaycastCollisionHits.hit1 jobmergeraycastcollisionhits.html#hit1 +Pathfinding.Graphs.Grid.Jobs.JobMergeRaycastCollisionHits.hit2 jobmergeraycastcollisionhits.html#hit2 +Pathfinding.Graphs.Grid.Jobs.JobMergeRaycastCollisionHits.result jobmergeraycastcollisionhits.html#result +Pathfinding.Graphs.Grid.Jobs.JobNodeGridLayout.bounds jobnodegridlayout.html#bounds +Pathfinding.Graphs.Grid.Jobs.JobNodeGridLayout.graphToWorld jobnodegridlayout.html#graphToWorld +Pathfinding.Graphs.Grid.Jobs.JobNodeGridLayout.nodePositions jobnodegridlayout.html#nodePositions +Pathfinding.Graphs.Grid.Jobs.JobNodeWalkability.characterHeight jobnodewalkability.html#characterHeight For layered grid graphs, if there's a node above another node closer than this distance, the lower node will be made unwalkable. +Pathfinding.Graphs.Grid.Jobs.JobNodeWalkability.layerStride jobnodewalkability.html#layerStride Number of nodes in each layer. +Pathfinding.Graphs.Grid.Jobs.JobNodeWalkability.maxSlope jobnodewalkability.html#maxSlope Max slope in degrees. +Pathfinding.Graphs.Grid.Jobs.JobNodeWalkability.nodeNormals jobnodewalkability.html#nodeNormals +Pathfinding.Graphs.Grid.Jobs.JobNodeWalkability.nodePositions jobnodewalkability.html#nodePositions +Pathfinding.Graphs.Grid.Jobs.JobNodeWalkability.nodeWalkable jobnodewalkability.html#nodeWalkable +Pathfinding.Graphs.Grid.Jobs.JobNodeWalkability.unwalkableWhenNoGround jobnodewalkability.html#unwalkableWhenNoGround If true, nodes will be made unwalkable if no ground was found under them. +Pathfinding.Graphs.Grid.Jobs.JobNodeWalkability.up jobnodewalkability.html#up Normalized up direction of the graph. +Pathfinding.Graphs.Grid.Jobs.JobNodeWalkability.useRaycastNormal jobnodewalkability.html#useRaycastNormal If true, use the normal of the raycast hit to check if the ground is flat enough to stand on. \n\nAny nodes with a steeper slope than maxSlope will be made unwalkable. +Pathfinding.Graphs.Grid.Jobs.JobPrepareCapsuleCommands.commands jobpreparecapsulecommands.html#commands +Pathfinding.Graphs.Grid.Jobs.JobPrepareCapsuleCommands.direction jobpreparecapsulecommands.html#direction +Pathfinding.Graphs.Grid.Jobs.JobPrepareCapsuleCommands.mask jobpreparecapsulecommands.html#mask +Pathfinding.Graphs.Grid.Jobs.JobPrepareCapsuleCommands.originOffset jobpreparecapsulecommands.html#originOffset +Pathfinding.Graphs.Grid.Jobs.JobPrepareCapsuleCommands.origins jobpreparecapsulecommands.html#origins +Pathfinding.Graphs.Grid.Jobs.JobPrepareCapsuleCommands.physicsScene jobpreparecapsulecommands.html#physicsScene +Pathfinding.Graphs.Grid.Jobs.JobPrepareCapsuleCommands.radius jobpreparecapsulecommands.html#radius +Pathfinding.Graphs.Grid.Jobs.JobPrepareGridRaycast.bounds jobpreparegridraycast.html#bounds +Pathfinding.Graphs.Grid.Jobs.JobPrepareGridRaycast.graphToWorld jobpreparegridraycast.html#graphToWorld +Pathfinding.Graphs.Grid.Jobs.JobPrepareGridRaycast.physicsScene jobpreparegridraycast.html#physicsScene +Pathfinding.Graphs.Grid.Jobs.JobPrepareGridRaycast.raycastCommands jobpreparegridraycast.html#raycastCommands +Pathfinding.Graphs.Grid.Jobs.JobPrepareGridRaycast.raycastDirection jobpreparegridraycast.html#raycastDirection +Pathfinding.Graphs.Grid.Jobs.JobPrepareGridRaycast.raycastMask jobpreparegridraycast.html#raycastMask +Pathfinding.Graphs.Grid.Jobs.JobPrepareGridRaycast.raycastOffset jobpreparegridraycast.html#raycastOffset +Pathfinding.Graphs.Grid.Jobs.JobPrepareRaycasts.direction jobprepareraycasts.html#direction +Pathfinding.Graphs.Grid.Jobs.JobPrepareRaycasts.distance jobprepareraycasts.html#distance +Pathfinding.Graphs.Grid.Jobs.JobPrepareRaycasts.mask jobprepareraycasts.html#mask +Pathfinding.Graphs.Grid.Jobs.JobPrepareRaycasts.originOffset jobprepareraycasts.html#originOffset +Pathfinding.Graphs.Grid.Jobs.JobPrepareRaycasts.origins jobprepareraycasts.html#origins +Pathfinding.Graphs.Grid.Jobs.JobPrepareRaycasts.physicsScene jobprepareraycasts.html#physicsScene +Pathfinding.Graphs.Grid.Jobs.JobPrepareRaycasts.raycastCommands jobprepareraycasts.html#raycastCommands +Pathfinding.Graphs.Grid.Jobs.JobPrepareSphereCommands.commands jobpreparespherecommands.html#commands +Pathfinding.Graphs.Grid.Jobs.JobPrepareSphereCommands.mask jobpreparespherecommands.html#mask +Pathfinding.Graphs.Grid.Jobs.JobPrepareSphereCommands.originOffset jobpreparespherecommands.html#originOffset +Pathfinding.Graphs.Grid.Jobs.JobPrepareSphereCommands.origins jobpreparespherecommands.html#origins +Pathfinding.Graphs.Grid.Jobs.JobPrepareSphereCommands.physicsScene jobpreparespherecommands.html#physicsScene +Pathfinding.Graphs.Grid.Jobs.JobPrepareSphereCommands.radius jobpreparespherecommands.html#radius +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.Reader.nodeConnections reader.html#nodeConnections +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.Reader.nodePenalties reader.html#nodePenalties +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.Reader.nodePositions reader.html#nodePositions +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.Reader.nodeTags reader.html#nodeTags +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.Reader.nodeWalkable reader.html#nodeWalkable +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.Reader.nodeWalkableWithErosion reader.html#nodeWalkableWithErosion +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.Reader.nodes reader.html#nodes +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.allowBoundsChecks jobreadnodedata.html#allowBoundsChecks +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.graphIndex jobreadnodedata.html#graphIndex +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.nodeConnections jobreadnodedata.html#nodeConnections +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.nodePenalties jobreadnodedata.html#nodePenalties +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.nodePositions jobreadnodedata.html#nodePositions +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.nodeTags jobreadnodedata.html#nodeTags +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.nodeWalkable jobreadnodedata.html#nodeWalkable +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.nodeWalkableWithErosion jobreadnodedata.html#nodeWalkableWithErosion +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.nodesHandle jobreadnodedata.html#nodesHandle +Pathfinding.Graphs.Grid.Jobs.JobReadNodeData.slice jobreadnodedata.html#slice +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.allowBoundsChecks jobwritenodedata.html#allowBoundsChecks +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.dataBounds jobwritenodedata.html#dataBounds +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.graphIndex jobwritenodedata.html#graphIndex +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.nodeArrayBounds jobwritenodedata.html#nodeArrayBounds (width, depth) of the array that the nodesHandle refers to +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.nodeConnections jobwritenodedata.html#nodeConnections +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.nodePenalties jobwritenodedata.html#nodePenalties +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.nodePositions jobwritenodedata.html#nodePositions +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.nodeTags jobwritenodedata.html#nodeTags +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.nodeWalkable jobwritenodedata.html#nodeWalkable +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.nodeWalkableWithErosion jobwritenodedata.html#nodeWalkableWithErosion +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.nodesHandle jobwritenodedata.html#nodesHandle +Pathfinding.Graphs.Grid.Jobs.JobWriteNodeData.writeMask jobwritenodedata.html#writeMask +Pathfinding.Graphs.Grid.RayDirection grid.html#RayDirection Determines collision check ray direction. +Pathfinding.Graphs.Grid.Rules.CustomGridGraphRuleEditorAttribute.name customgridgraphruleeditorattribute.html#name +Pathfinding.Graphs.Grid.Rules.CustomGridGraphRuleEditorAttribute.type customgridgraphruleeditorattribute.html#type +Pathfinding.Graphs.Grid.Rules.GridGraphRule.Hash gridgraphrule.html#Hash Hash of the settings for this rule. \n\nThe Register method will be called again whenever the hash changes. If the hash does not change it is assumed that the Register method does not need to be called again. +Pathfinding.Graphs.Grid.Rules.GridGraphRule.Pass gridgraphrule.html#Pass Where in the scanning process a rule will be executed. \n\nCheck the documentation for GridGraphScanData to see which data fields are valid in which passes. +Pathfinding.Graphs.Grid.Rules.GridGraphRule.dirty gridgraphrule.html#dirty +Pathfinding.Graphs.Grid.Rules.GridGraphRule.enabled gridgraphrule.html#enabled Only enabled rules are executed. +Pathfinding.Graphs.Grid.Rules.GridGraphRules.Context.data context2.html#data Data for all the nodes as NativeArrays. +Pathfinding.Graphs.Grid.Rules.GridGraphRules.Context.graph context2.html#graph Graph which is being scanned or updated. +Pathfinding.Graphs.Grid.Rules.GridGraphRules.Context.tracker context2.html#tracker Tracks dependencies between jobs to allow parallelism without tediously specifying dependencies manually. \n\nAlways use when scheduling jobs. +Pathfinding.Graphs.Grid.Rules.GridGraphRules.jobSystemCallbacks gridgraphrules.html#jobSystemCallbacks +Pathfinding.Graphs.Grid.Rules.GridGraphRules.lastHash gridgraphrules.html#lastHash +Pathfinding.Graphs.Grid.Rules.GridGraphRules.mainThreadCallbacks gridgraphrules.html#mainThreadCallbacks +Pathfinding.Graphs.Grid.Rules.GridGraphRules.rules gridgraphrules.html#rules List of all rules. +Pathfinding.Graphs.Grid.Rules.RuleAnglePenalty.JobPenaltyAngle.angleToPenalty jobpenaltyangle.html#angleToPenalty +Pathfinding.Graphs.Grid.Rules.RuleAnglePenalty.JobPenaltyAngle.nodeNormals jobpenaltyangle.html#nodeNormals +Pathfinding.Graphs.Grid.Rules.RuleAnglePenalty.JobPenaltyAngle.penalty jobpenaltyangle.html#penalty +Pathfinding.Graphs.Grid.Rules.RuleAnglePenalty.JobPenaltyAngle.up jobpenaltyangle.html#up +Pathfinding.Graphs.Grid.Rules.RuleAnglePenalty.angleToPenalty ruleanglepenalty.html#angleToPenalty +Pathfinding.Graphs.Grid.Rules.RuleAnglePenalty.curve ruleanglepenalty.html#curve +Pathfinding.Graphs.Grid.Rules.RuleAnglePenalty.penaltyScale ruleanglepenalty.html#penaltyScale +Pathfinding.Graphs.Grid.Rules.RuleElevationPenalty.JobElevationPenalty.elevationToPenalty jobelevationpenalty.html#elevationToPenalty +Pathfinding.Graphs.Grid.Rules.RuleElevationPenalty.JobElevationPenalty.nodePositions jobelevationpenalty.html#nodePositions +Pathfinding.Graphs.Grid.Rules.RuleElevationPenalty.JobElevationPenalty.penalty jobelevationpenalty.html#penalty +Pathfinding.Graphs.Grid.Rules.RuleElevationPenalty.JobElevationPenalty.worldToGraph jobelevationpenalty.html#worldToGraph +Pathfinding.Graphs.Grid.Rules.RuleElevationPenalty.curve ruleelevationpenalty.html#curve +Pathfinding.Graphs.Grid.Rules.RuleElevationPenalty.elevationRange ruleelevationpenalty.html#elevationRange +Pathfinding.Graphs.Grid.Rules.RuleElevationPenalty.elevationToPenalty ruleelevationpenalty.html#elevationToPenalty +Pathfinding.Graphs.Grid.Rules.RuleElevationPenalty.penaltyScale ruleelevationpenalty.html#penaltyScale +Pathfinding.Graphs.Grid.Rules.RulePerLayerModifications.PerLayerRule.action perlayerrule.html#action The action to apply to matching nodes. +Pathfinding.Graphs.Grid.Rules.RulePerLayerModifications.PerLayerRule.layer perlayerrule.html#layer Layer this rule applies to. +Pathfinding.Graphs.Grid.Rules.RulePerLayerModifications.PerLayerRule.tag perlayerrule.html#tag Tag for the RuleAction.SetTag action. \n\nMust be between 0 and Pathfinding.GraphNode.MaxTagIndex +Pathfinding.Graphs.Grid.Rules.RulePerLayerModifications.RuleAction ruleperlayermodifications.html#RuleAction +Pathfinding.Graphs.Grid.Rules.RulePerLayerModifications.SetTagBit ruleperlayermodifications.html#SetTagBit +Pathfinding.Graphs.Grid.Rules.RulePerLayerModifications.layerRules ruleperlayermodifications.html#layerRules +Pathfinding.Graphs.Grid.Rules.RuleTexture.ChannelUse ruletexture.html#ChannelUse +Pathfinding.Graphs.Grid.Rules.RuleTexture.Hash ruletexture.html#Hash +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePenalty.bounds jobtexturepenalty.html#bounds +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePenalty.channelDeterminesWalkability jobtexturepenalty.html#channelDeterminesWalkability +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePenalty.channelPenalties jobtexturepenalty.html#channelPenalties +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePenalty.colorData jobtexturepenalty.html#colorData +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePenalty.colorDataSize jobtexturepenalty.html#colorDataSize +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePenalty.nodeNormals jobtexturepenalty.html#nodeNormals +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePenalty.penalty jobtexturepenalty.html#penalty +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePenalty.scale jobtexturepenalty.html#scale +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePenalty.walkable jobtexturepenalty.html#walkable +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePosition.bounds jobtextureposition.html#bounds +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePosition.channelPositionScale jobtextureposition.html#channelPositionScale +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePosition.colorData jobtextureposition.html#colorData +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePosition.colorDataSize jobtextureposition.html#colorDataSize +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePosition.graphToWorld jobtextureposition.html#graphToWorld +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePosition.nodeNormals jobtextureposition.html#nodeNormals +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePosition.nodePositions jobtextureposition.html#nodePositions +Pathfinding.Graphs.Grid.Rules.RuleTexture.JobTexturePosition.scale jobtextureposition.html#scale +Pathfinding.Graphs.Grid.Rules.RuleTexture.ScalingMode ruletexture.html#ScalingMode +Pathfinding.Graphs.Grid.Rules.RuleTexture.channelScales ruletexture.html#channelScales +Pathfinding.Graphs.Grid.Rules.RuleTexture.channels ruletexture.html#channels +Pathfinding.Graphs.Grid.Rules.RuleTexture.colors ruletexture.html#colors +Pathfinding.Graphs.Grid.Rules.RuleTexture.nodesPerPixel ruletexture.html#nodesPerPixel +Pathfinding.Graphs.Grid.Rules.RuleTexture.scalingMode ruletexture.html#scalingMode +Pathfinding.Graphs.Grid.Rules.RuleTexture.texture ruletexture.html#texture +Pathfinding.Graphs.Navmesh.AABBTree.AABBComparer.dim aabbcomparer.html#dim +Pathfinding.Graphs.Navmesh.AABBTree.AABBComparer.nodes aabbcomparer.html#nodes +Pathfinding.Graphs.Navmesh.AABBTree.Key.isValid key.html#isValid +Pathfinding.Graphs.Navmesh.AABBTree.Key.node key.html#node +Pathfinding.Graphs.Navmesh.AABBTree.Key.value key.html#value +Pathfinding.Graphs.Navmesh.AABBTree.NoNode aabbtree.html#NoNode +Pathfinding.Graphs.Navmesh.AABBTree.Node.AllocatedBit node2.html#AllocatedBit +Pathfinding.Graphs.Navmesh.AABBTree.Node.InvalidParent node2.html#InvalidParent +Pathfinding.Graphs.Navmesh.AABBTree.Node.ParentMask node2.html#ParentMask +Pathfinding.Graphs.Navmesh.AABBTree.Node.TagInsideBit node2.html#TagInsideBit +Pathfinding.Graphs.Navmesh.AABBTree.Node.TagPartiallyInsideBit node2.html#TagPartiallyInsideBit +Pathfinding.Graphs.Navmesh.AABBTree.Node.bounds node2.html#bounds +Pathfinding.Graphs.Navmesh.AABBTree.Node.flags node2.html#flags +Pathfinding.Graphs.Navmesh.AABBTree.Node.isAllocated node2.html#isAllocated +Pathfinding.Graphs.Navmesh.AABBTree.Node.isLeaf node2.html#isLeaf +Pathfinding.Graphs.Navmesh.AABBTree.Node.left node2.html#left +Pathfinding.Graphs.Navmesh.AABBTree.Node.parent node2.html#parent +Pathfinding.Graphs.Navmesh.AABBTree.Node.right node2.html#right +Pathfinding.Graphs.Navmesh.AABBTree.Node.subtreePartiallyTagged node2.html#subtreePartiallyTagged +Pathfinding.Graphs.Navmesh.AABBTree.Node.value node2.html#value +Pathfinding.Graphs.Navmesh.AABBTree.Node.wholeSubtreeTagged node2.html#wholeSubtreeTagged +Pathfinding.Graphs.Navmesh.AABBTree.freeNodes aabbtree.html#freeNodes +Pathfinding.Graphs.Navmesh.AABBTree.nodes aabbtree.html#nodes +Pathfinding.Graphs.Navmesh.AABBTree.rebuildCounter aabbtree.html#rebuildCounter +Pathfinding.Graphs.Navmesh.AABBTree.root aabbtree.html#root +Pathfinding.Graphs.Navmesh.AABBTree.this[Key key] aabbtree.html#thisKeykey User data for a node in the tree. +Pathfinding.Graphs.Navmesh.BBTree.BBTreeBox.IsLeaf bbtreebox.html#IsLeaf +Pathfinding.Graphs.Navmesh.BBTree.BBTreeBox.left bbtreebox.html#left +Pathfinding.Graphs.Navmesh.BBTree.BBTreeBox.nodeOffset bbtreebox.html#nodeOffset +Pathfinding.Graphs.Navmesh.BBTree.BBTreeBox.rect bbtreebox.html#rect +Pathfinding.Graphs.Navmesh.BBTree.BBTreeBox.right bbtreebox.html#right +Pathfinding.Graphs.Navmesh.BBTree.CloseNode.closestPointOnNode closenode.html#closestPointOnNode +Pathfinding.Graphs.Navmesh.BBTree.CloseNode.distanceSq closenode.html#distanceSq +Pathfinding.Graphs.Navmesh.BBTree.CloseNode.node closenode.html#node +Pathfinding.Graphs.Navmesh.BBTree.CloseNode.tieBreakingDistance closenode.html#tieBreakingDistance +Pathfinding.Graphs.Navmesh.BBTree.DistanceMetric bbtree.html#DistanceMetric +Pathfinding.Graphs.Navmesh.BBTree.MAX_TREE_HEIGHT bbtree.html#MAX_TREE_HEIGHT +Pathfinding.Graphs.Navmesh.BBTree.MaximumLeafSize bbtree.html#MaximumLeafSize +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.BoxWithDist.distSqr boxwithdist.html#distSqr +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.BoxWithDist.index boxwithdist.html#index +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.Current nearbynodesiterator.html#Current +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.current nearbynodesiterator.html#current +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.distanceThresholdSqr nearbynodesiterator.html#distanceThresholdSqr +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.indexInLeaf nearbynodesiterator.html#indexInLeaf +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.nodes nearbynodesiterator.html#nodes +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.point nearbynodesiterator.html#point +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.projection nearbynodesiterator.html#projection +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.stack nearbynodesiterator.html#stack +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.stackSize nearbynodesiterator.html#stackSize +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.tieBreakingDistanceThreshold nearbynodesiterator.html#tieBreakingDistanceThreshold +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.tree nearbynodesiterator.html#tree +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.triangles nearbynodesiterator.html#triangles +Pathfinding.Graphs.Navmesh.BBTree.NearbyNodesIterator.vertices nearbynodesiterator.html#vertices +Pathfinding.Graphs.Navmesh.BBTree.ProjectionParams.alignedWithXZPlane projectionparams.html#alignedWithXZPlane +Pathfinding.Graphs.Navmesh.BBTree.ProjectionParams.alignedWithXZPlaneBacking projectionparams.html#alignedWithXZPlaneBacking +Pathfinding.Graphs.Navmesh.BBTree.ProjectionParams.distanceMetric projectionparams.html#distanceMetric +Pathfinding.Graphs.Navmesh.BBTree.ProjectionParams.distanceScaleAlongProjectionAxis projectionparams.html#distanceScaleAlongProjectionAxis +Pathfinding.Graphs.Navmesh.BBTree.ProjectionParams.planeProjection projectionparams.html#planeProjection +Pathfinding.Graphs.Navmesh.BBTree.ProjectionParams.projectedUpNormalized projectionparams.html#projectedUpNormalized +Pathfinding.Graphs.Navmesh.BBTree.ProjectionParams.projectionAxis projectionparams.html#projectionAxis +Pathfinding.Graphs.Navmesh.BBTree.Size bbtree.html#Size +Pathfinding.Graphs.Navmesh.BBTree.nodePermutation bbtree.html#nodePermutation +Pathfinding.Graphs.Navmesh.BBTree.tree bbtree.html#tree Holds all tree nodes. +Pathfinding.Graphs.Navmesh.CircleGeometryUtilities.circleRadiusAdjustmentFactors circlegeometryutilities.html#circleRadiusAdjustmentFactors Cached values for CircleRadiusAdjustmentFactor. \n\nWe can calculate the area of a polygonized circle, and equate that with the area of a unit circle <b>[code in online documentation]</b>\n\nGenerated using the python code: <b>[code in online documentation]</b>\n\nIt would be nice to generate this using a static constructor, but that is not supported by Unity's burst compiler. +Pathfinding.Graphs.Navmesh.ColliderMeshBuilder2D.ShapeMesh.bounds shapemesh.html#bounds +Pathfinding.Graphs.Navmesh.ColliderMeshBuilder2D.ShapeMesh.endIndex shapemesh.html#endIndex +Pathfinding.Graphs.Navmesh.ColliderMeshBuilder2D.ShapeMesh.matrix shapemesh.html#matrix +Pathfinding.Graphs.Navmesh.ColliderMeshBuilder2D.ShapeMesh.startIndex shapemesh.html#startIndex +Pathfinding.Graphs.Navmesh.ColliderMeshBuilder2D.ShapeMesh.tag shapemesh.html#tag +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.BuildNodeTilesOutput.Progress buildnodetilesoutput.html#Progress +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.BuildNodeTilesOutput.dependency buildnodetilesoutput.html#dependency +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.BuildNodeTilesOutput.tiles buildnodetilesoutput.html#tiles +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.astar jobbuildnodes.html#astar +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.graphIndex jobbuildnodes.html#graphIndex +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.graphToWorldSpace jobbuildnodes.html#graphToWorldSpace +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.initialPenalty jobbuildnodes.html#initialPenalty +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.maxTileConnectionEdgeDistance jobbuildnodes.html#maxTileConnectionEdgeDistance +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.recalculateNormals jobbuildnodes.html#recalculateNormals +Pathfinding.Graphs.Navmesh.Jobs.JobBuildNodes.tileLayout jobbuildnodes.html#tileLayout +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.BuildNavmeshOutput.Progress buildnavmeshoutput.html#Progress +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.BuildNavmeshOutput.tiles buildnavmeshoutput.html#tiles +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.JobTransformTileCoordinates.matrix jobtransformtilecoordinates.html#matrix +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.JobTransformTileCoordinates.outputVertices jobtransformtilecoordinates.html#outputVertices +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.JobTransformTileCoordinates.vertices jobtransformtilecoordinates.html#vertices +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.indices jobbuildtilemeshfromvertices.html#indices +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.meshToGraph jobbuildtilemeshfromvertices.html#meshToGraph +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.outputBuffers jobbuildtilemeshfromvertices.html#outputBuffers +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.recalculateNormals jobbuildtilemeshfromvertices.html#recalculateNormals +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVertices.vertices jobbuildtilemeshfromvertices.html#vertices +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerBuildCompactField jobbuildtilemeshfromvoxels.html#MarkerBuildCompactField +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerBuildConnections jobbuildtilemeshfromvoxels.html#MarkerBuildConnections +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerBuildContours jobbuildtilemeshfromvoxels.html#MarkerBuildContours +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerBuildDistanceField jobbuildtilemeshfromvoxels.html#MarkerBuildDistanceField +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerBuildMesh jobbuildtilemeshfromvoxels.html#MarkerBuildMesh +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerBuildRegions jobbuildtilemeshfromvoxels.html#MarkerBuildRegions +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerConvertAreasToTags jobbuildtilemeshfromvoxels.html#MarkerConvertAreasToTags +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerErodeWalkableArea jobbuildtilemeshfromvoxels.html#MarkerErodeWalkableArea +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerFilterLedges jobbuildtilemeshfromvoxels.html#MarkerFilterLedges +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerFilterLowHeightSpans jobbuildtilemeshfromvoxels.html#MarkerFilterLowHeightSpans +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerRemoveDuplicateVertices jobbuildtilemeshfromvoxels.html#MarkerRemoveDuplicateVertices +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerTransformTileCoordinates jobbuildtilemeshfromvoxels.html#MarkerTransformTileCoordinates +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.MarkerVoxelize jobbuildtilemeshfromvoxels.html#MarkerVoxelize +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.backgroundTraversability jobbuildtilemeshfromvoxels.html#backgroundTraversability +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.cellHeight jobbuildtilemeshfromvoxels.html#cellHeight +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.cellSize jobbuildtilemeshfromvoxels.html#cellSize +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.characterRadiusInVoxels jobbuildtilemeshfromvoxels.html#characterRadiusInVoxels +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.contourMaxError jobbuildtilemeshfromvoxels.html#contourMaxError +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.currentTileCounter jobbuildtilemeshfromvoxels.html#currentTileCounter +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.dimensionMode jobbuildtilemeshfromvoxels.html#dimensionMode +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.graphSpaceLimits jobbuildtilemeshfromvoxels.html#graphSpaceLimits Limits of the graph space bounds for the whole graph on the XZ plane. \n\nUsed to crop the border tiles to exactly the limits of the graph's bounding box. +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.graphToWorldSpace jobbuildtilemeshfromvoxels.html#graphToWorldSpace +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.inputMeshes jobbuildtilemeshfromvoxels.html#inputMeshes +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.maxEdgeLength jobbuildtilemeshfromvoxels.html#maxEdgeLength +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.maxSlope jobbuildtilemeshfromvoxels.html#maxSlope +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.maxTiles jobbuildtilemeshfromvoxels.html#maxTiles Max number of tiles to process in this job. +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.minRegionSize jobbuildtilemeshfromvoxels.html#minRegionSize +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.outputMeshes jobbuildtilemeshfromvoxels.html#outputMeshes +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.relevantGraphSurfaceMode jobbuildtilemeshfromvoxels.html#relevantGraphSurfaceMode +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.relevantGraphSurfaces jobbuildtilemeshfromvoxels.html#relevantGraphSurfaces +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.tileBorderSizeInVoxels jobbuildtilemeshfromvoxels.html#tileBorderSizeInVoxels +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.tileBuilder jobbuildtilemeshfromvoxels.html#tileBuilder +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.tileGraphSpaceBounds jobbuildtilemeshfromvoxels.html#tileGraphSpaceBounds +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.voxelToTileSpace jobbuildtilemeshfromvoxels.html#voxelToTileSpace +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.voxelWalkableClimb jobbuildtilemeshfromvoxels.html#voxelWalkableClimb +Pathfinding.Graphs.Navmesh.Jobs.JobBuildTileMeshFromVoxels.voxelWalkableHeight jobbuildtilemeshfromvoxels.html#voxelWalkableHeight +Pathfinding.Graphs.Navmesh.Jobs.JobCalculateTriangleConnections.TileNodeConnectionsUnsafe.neighbourCounts tilenodeconnectionsunsafe.html#neighbourCounts Number of neighbours for each triangle. +Pathfinding.Graphs.Navmesh.Jobs.JobCalculateTriangleConnections.TileNodeConnectionsUnsafe.neighbours tilenodeconnectionsunsafe.html#neighbours Stream of packed connection edge infos (from Connection.PackShapeEdgeInfo) +Pathfinding.Graphs.Navmesh.Jobs.JobCalculateTriangleConnections.nodeConnections jobcalculatetriangleconnections.html#nodeConnections +Pathfinding.Graphs.Navmesh.Jobs.JobCalculateTriangleConnections.tileMeshes jobcalculatetriangleconnections.html#tileMeshes +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTiles.ConnectTilesMarker jobconnecttiles.html#ConnectTilesMarker +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTiles.coordinateSum jobconnecttiles.html#coordinateSum +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTiles.direction jobconnecttiles.html#direction +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTiles.maxTileConnectionEdgeDistance jobconnecttiles.html#maxTileConnectionEdgeDistance Maximum vertical distance between two tiles to create a connection between them. +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTiles.tileRect jobconnecttiles.html#tileRect +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTiles.tileWorldSize jobconnecttiles.html#tileWorldSize +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTiles.tiles jobconnecttiles.html#tiles GCHandle referring to a NavmeshTile[] array of size tileRect.Width*tileRect.Height. +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTiles.zOffset jobconnecttiles.html#zOffset +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTiles.zStride jobconnecttiles.html#zStride +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTilesSingle.maxTileConnectionEdgeDistance jobconnecttilessingle.html#maxTileConnectionEdgeDistance Maximum vertical distance between two tiles to create a connection between them. +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTilesSingle.tileIndex1 jobconnecttilessingle.html#tileIndex1 Index of the first tile in the tiles array. +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTilesSingle.tileIndex2 jobconnecttilessingle.html#tileIndex2 Index of the second tile in the tiles array. +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTilesSingle.tileWorldSize jobconnecttilessingle.html#tileWorldSize Size of a tile in world units. +Pathfinding.Graphs.Navmesh.Jobs.JobConnectTilesSingle.tiles jobconnecttilessingle.html#tiles GCHandle referring to a NavmeshTile[] array of size tileRect.Width*tileRect.Height. +Pathfinding.Graphs.Navmesh.Jobs.JobConvertAreasToTags.areas jobconvertareastotags.html#areas +Pathfinding.Graphs.Navmesh.Jobs.JobCreateTiles.graphIndex jobcreatetiles.html#graphIndex Graph index of the graph that these nodes will be added to. +Pathfinding.Graphs.Navmesh.Jobs.JobCreateTiles.graphTileCount jobcreatetiles.html#graphTileCount Number of tiles in the graph. \n\nThis may be much bigger than the tileRect that we are actually processing. For example if a graph update is performed, the tileRect will just cover the tiles that are recalculated, while graphTileCount will contain all tiles in the graph. +Pathfinding.Graphs.Navmesh.Jobs.JobCreateTiles.graphToWorldSpace jobcreatetiles.html#graphToWorldSpace Matrix to convert from graph space to world space. +Pathfinding.Graphs.Navmesh.Jobs.JobCreateTiles.initialPenalty jobcreatetiles.html#initialPenalty Initial penalty for all nodes in the tile. +Pathfinding.Graphs.Navmesh.Jobs.JobCreateTiles.recalculateNormals jobcreatetiles.html#recalculateNormals If true, all triangles will be guaranteed to be laid out in clockwise order. \n\nIf false, their original order will be preserved. +Pathfinding.Graphs.Navmesh.Jobs.JobCreateTiles.tileMeshes jobcreatetiles.html#tileMeshes An array of TileMesh.TileMeshUnsafe of length tileRect.Width*tileRect.Height. +Pathfinding.Graphs.Navmesh.Jobs.JobCreateTiles.tileRect jobcreatetiles.html#tileRect Rectangle of tiles that we are processing. \n\n(xmax, ymax) must be smaller than graphTileCount. If for examples graphTileCount is (10, 10) and tileRect is {2, 3, 5, 6} then we are processing tiles (2, 3) to (5, 6) inclusive. +Pathfinding.Graphs.Navmesh.Jobs.JobCreateTiles.tileWorldSize jobcreatetiles.html#tileWorldSize Size of a tile in world units along the graph's X and Z axes. +Pathfinding.Graphs.Navmesh.Jobs.JobCreateTiles.tiles jobcreatetiles.html#tiles An array of NavmeshTile of length tileRect.Width*tileRect.Height. \n\nThis array will be filled with the created tiles. +Pathfinding.Graphs.Navmesh.Jobs.JobTransformTileCoordinates.matrix jobtransformtilecoordinates2.html#matrix +Pathfinding.Graphs.Navmesh.Jobs.JobTransformTileCoordinates.vertices jobtransformtilecoordinates2.html#vertices Element type Int3. +Pathfinding.Graphs.Navmesh.Jobs.JobWriteNodeConnections.nodeConnections jobwritenodeconnections.html#nodeConnections Connections for each tile. +Pathfinding.Graphs.Navmesh.Jobs.JobWriteNodeConnections.tiles jobwritenodeconnections.html#tiles Array of NavmeshTile. +Pathfinding.Graphs.Navmesh.Jobs.TileBuilderBurst.compactVoxelField tilebuilderburst.html#compactVoxelField +Pathfinding.Graphs.Navmesh.Jobs.TileBuilderBurst.contourVertices tilebuilderburst.html#contourVertices +Pathfinding.Graphs.Navmesh.Jobs.TileBuilderBurst.contours tilebuilderburst.html#contours +Pathfinding.Graphs.Navmesh.Jobs.TileBuilderBurst.distanceField tilebuilderburst.html#distanceField +Pathfinding.Graphs.Navmesh.Jobs.TileBuilderBurst.linkedVoxelField tilebuilderburst.html#linkedVoxelField +Pathfinding.Graphs.Navmesh.Jobs.TileBuilderBurst.tmpQueue1 tilebuilderburst.html#tmpQueue1 +Pathfinding.Graphs.Navmesh.Jobs.TileBuilderBurst.tmpQueue2 tilebuilderburst.html#tmpQueue2 +Pathfinding.Graphs.Navmesh.Jobs.TileBuilderBurst.voxelMesh tilebuilderburst.html#voxelMesh +Pathfinding.Graphs.Navmesh.NavmeshTile.bbTree navmeshtile.html#bbTree Bounding Box Tree for node lookups. +Pathfinding.Graphs.Navmesh.NavmeshTile.d navmeshtile.html#d Depth, in tile coordinates. \n\n[more in online documentation] +Pathfinding.Graphs.Navmesh.NavmeshTile.flag navmeshtile.html#flag Temporary flag used for batching. +Pathfinding.Graphs.Navmesh.NavmeshTile.graph navmeshtile.html#graph The graph which contains this tile. +Pathfinding.Graphs.Navmesh.NavmeshTile.nodes navmeshtile.html#nodes All nodes in the tile. +Pathfinding.Graphs.Navmesh.NavmeshTile.transform navmeshtile.html#transform Transforms coordinates from graph space to world space. +Pathfinding.Graphs.Navmesh.NavmeshTile.tris navmeshtile.html#tris All triangle indices in the tile. \n\nOne triangle is 3 indices. The triangles are in the same order as the nodes.\n\nThis represents an allocation using the Persistent allocator. +Pathfinding.Graphs.Navmesh.NavmeshTile.verts navmeshtile.html#verts All vertices in the tile. \n\nThe vertices are in world space.\n\nThis represents an allocation using the Persistent allocator. +Pathfinding.Graphs.Navmesh.NavmeshTile.vertsInGraphSpace navmeshtile.html#vertsInGraphSpace All vertices in the tile. \n\nThe vertices are in graph space.\n\nThis represents an allocation using the Persistent allocator. +Pathfinding.Graphs.Navmesh.NavmeshTile.w navmeshtile.html#w Width, in tile coordinates. \n\n[more in online documentation] +Pathfinding.Graphs.Navmesh.NavmeshTile.x navmeshtile.html#x Tile X Coordinate. +Pathfinding.Graphs.Navmesh.NavmeshTile.z navmeshtile.html#z Tile Z Coordinate. +Pathfinding.Graphs.Navmesh.NavmeshUpdates.NavmeshUpdateSettings.forcedReloadRects navmeshupdatesettings.html#forcedReloadRects +Pathfinding.Graphs.Navmesh.NavmeshUpdates.NavmeshUpdateSettings.graph navmeshupdatesettings.html#graph +Pathfinding.Graphs.Navmesh.NavmeshUpdates.NavmeshUpdateSettings.handler navmeshupdatesettings.html#handler +Pathfinding.Graphs.Navmesh.NavmeshUpdates.astar navmeshupdates.html#astar +Pathfinding.Graphs.Navmesh.NavmeshUpdates.lastUpdateTime navmeshupdates.html#lastUpdateTime Last time navmesh cuts were applied. +Pathfinding.Graphs.Navmesh.NavmeshUpdates.updateInterval navmeshupdates.html#updateInterval How often to check if an update needs to be done (real seconds between checks). \n\nFor worlds with a very large number of NavmeshCut objects, it might be bad for performance to do this check every frame. If you think this is a performance penalty, increase this number to check less often.\n\nFor almost all games, this can be kept at 0.\n\nIf negative, no updates will be done. They must be manually triggered using ForceUpdate.\n\n<b>[code in online documentation]</b><b>[image in online documentation]</b> +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.BoxColliderTris recastmeshgatherer.html#BoxColliderTris Box Collider triangle indices can be reused for multiple instances. \n\n[more in online documentation] +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.BoxColliderVerts recastmeshgatherer.html#BoxColliderVerts Box Collider vertices can be reused for multiple instances. \n\n[more in online documentation] +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.area gatheredmesh.html#area Area ID of the mesh. \n\n0 means walkable, and -1 indicates that the mesh should be treated as unwalkable. Other positive values indicate a custom area ID which will create a seam in the navmesh. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.areaIsTag gatheredmesh.html#areaIsTag See RasterizationMesh.areaIsTag. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.bounds gatheredmesh.html#bounds World bounds of the mesh. \n\nAssumed to already be multiplied with the matrix. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.doubleSided gatheredmesh.html#doubleSided See RasterizationMesh.doubleSided. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.flatten gatheredmesh.html#flatten See RasterizationMesh.flatten. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.indexEnd gatheredmesh.html#indexEnd End index in the triangle array. \n\n-1 indicates the end of the array. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.indexStart gatheredmesh.html#indexStart Start index in the triangle array. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.matrix gatheredmesh.html#matrix Matrix to transform the vertices by. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.meshDataIndex gatheredmesh.html#meshDataIndex Index in the meshData array. \n\nCan be retrieved from the RecastMeshGatherer.AddMeshBuffers method. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.GatheredMesh.solid gatheredmesh.html#solid If true then the mesh will be treated as solid and its interior will be unwalkable. \n\nThe unwalkable region will be the minimum to maximum y coordinate in each cell. +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshCacheItem.Box meshcacheitem.html#Box +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshCacheItem.mesh meshcacheitem.html#mesh +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshCacheItem.quantizedHeight meshcacheitem.html#quantizedHeight +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshCacheItem.rows meshcacheitem.html#rows +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshCacheItem.type meshcacheitem.html#type +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshCollection.meshes meshcollection.html#meshes +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshCollection.meshesUnreadableAtRuntime meshcollection.html#meshesUnreadableAtRuntime +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshCollection.triangleBuffers meshcollection.html#triangleBuffers +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshCollection.vertexBuffers meshcollection.html#vertexBuffers +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.MeshType recastmeshgatherer.html#MeshType +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.TreeInfo.submeshes treeinfo.html#submeshes +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.TreeInfo.supportsRotation treeinfo.html#supportsRotation +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.bounds recastmeshgatherer.html#bounds +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.cachedMeshes recastmeshgatherer.html#cachedMeshes +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.cachedTreePrefabs recastmeshgatherer.html#cachedTreePrefabs +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.dummyMaterials recastmeshgatherer.html#dummyMaterials +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.mask recastmeshgatherer.html#mask +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.maxColliderApproximationError recastmeshgatherer.html#maxColliderApproximationError +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.meshData recastmeshgatherer.html#meshData +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.meshes recastmeshgatherer.html#meshes +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.meshesUnreadableAtRuntime recastmeshgatherer.html#meshesUnreadableAtRuntime +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.modificationsByLayer recastmeshgatherer.html#modificationsByLayer +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.modificationsByLayer2D recastmeshgatherer.html#modificationsByLayer2D +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.scene recastmeshgatherer.html#scene +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.tagMask recastmeshgatherer.html#tagMask +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.terrainDownsamplingFactor recastmeshgatherer.html#terrainDownsamplingFactor +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.triangleBuffers recastmeshgatherer.html#triangleBuffers +Pathfinding.Graphs.Navmesh.RecastMeshGatherer.vertexBuffers recastmeshgatherer.html#vertexBuffers +Pathfinding.Graphs.Navmesh.RelevantGraphSurface.Next relevantgraphsurface.html#Next +Pathfinding.Graphs.Navmesh.RelevantGraphSurface.Position relevantgraphsurface.html#Position +Pathfinding.Graphs.Navmesh.RelevantGraphSurface.Prev relevantgraphsurface.html#Prev +Pathfinding.Graphs.Navmesh.RelevantGraphSurface.Root relevantgraphsurface.html#Root +Pathfinding.Graphs.Navmesh.RelevantGraphSurface.maxRange relevantgraphsurface.html#maxRange +Pathfinding.Graphs.Navmesh.RelevantGraphSurface.next relevantgraphsurface.html#next +Pathfinding.Graphs.Navmesh.RelevantGraphSurface.position relevantgraphsurface.html#position +Pathfinding.Graphs.Navmesh.RelevantGraphSurface.prev relevantgraphsurface.html#prev +Pathfinding.Graphs.Navmesh.RelevantGraphSurface.root relevantgraphsurface.html#root +Pathfinding.Graphs.Navmesh.TileBuilder.BucketMapping.bucketRanges bucketmapping.html#bucketRanges For each tile, the range of pointers in pointers that correspond to that tile. \n\nThis is a cumulative sum of the number of pointers in each bucket.\n\nBucket <b>i</b> will contain pointers in the range [i > 0 ? bucketRanges[i-1] : 0, bucketRanges[i]).\n\nThe length is the same as the number of tiles. +Pathfinding.Graphs.Navmesh.TileBuilder.BucketMapping.meshes bucketmapping.html#meshes All meshes that should be voxelized. +Pathfinding.Graphs.Navmesh.TileBuilder.BucketMapping.pointers bucketmapping.html#pointers Indices into the meshes array. +Pathfinding.Graphs.Navmesh.TileBuilder.TileBorderSizeInVoxels tilebuilder.html#TileBorderSizeInVoxels Number of extra voxels on each side of a tile to ensure accurate navmeshes near the tile border. \n\nThe width of a tile is expanded by 2 times this value (1x to the left and 1x to the right) +Pathfinding.Graphs.Navmesh.TileBuilder.TileBorderSizeInWorldUnits tilebuilder.html#TileBorderSizeInWorldUnits +Pathfinding.Graphs.Navmesh.TileBuilder.TileBuilderOutput.Progress tilebuilderoutput.html#Progress +Pathfinding.Graphs.Navmesh.TileBuilder.TileBuilderOutput.currentTileCounter tilebuilderoutput.html#currentTileCounter +Pathfinding.Graphs.Navmesh.TileBuilder.TileBuilderOutput.meshesUnreadableAtRuntime tilebuilderoutput.html#meshesUnreadableAtRuntime +Pathfinding.Graphs.Navmesh.TileBuilder.TileBuilderOutput.tileMeshes tilebuilderoutput.html#tileMeshes +Pathfinding.Graphs.Navmesh.TileBuilder.backgroundTraversability tilebuilder.html#backgroundTraversability +Pathfinding.Graphs.Navmesh.TileBuilder.characterRadiusInVoxels tilebuilder.html#characterRadiusInVoxels +Pathfinding.Graphs.Navmesh.TileBuilder.collectionSettings tilebuilder.html#collectionSettings +Pathfinding.Graphs.Navmesh.TileBuilder.contourMaxError tilebuilder.html#contourMaxError +Pathfinding.Graphs.Navmesh.TileBuilder.dimensionMode tilebuilder.html#dimensionMode +Pathfinding.Graphs.Navmesh.TileBuilder.maxEdgeLength tilebuilder.html#maxEdgeLength +Pathfinding.Graphs.Navmesh.TileBuilder.maxSlope tilebuilder.html#maxSlope +Pathfinding.Graphs.Navmesh.TileBuilder.minRegionSize tilebuilder.html#minRegionSize +Pathfinding.Graphs.Navmesh.TileBuilder.perLayerModifications tilebuilder.html#perLayerModifications +Pathfinding.Graphs.Navmesh.TileBuilder.relevantGraphSurfaceMode tilebuilder.html#relevantGraphSurfaceMode +Pathfinding.Graphs.Navmesh.TileBuilder.scene tilebuilder.html#scene +Pathfinding.Graphs.Navmesh.TileBuilder.tileBorderSizeInVoxels tilebuilder.html#tileBorderSizeInVoxels +Pathfinding.Graphs.Navmesh.TileBuilder.tileLayout tilebuilder.html#tileLayout +Pathfinding.Graphs.Navmesh.TileBuilder.tileRect tilebuilder.html#tileRect +Pathfinding.Graphs.Navmesh.TileBuilder.walkableClimb tilebuilder.html#walkableClimb +Pathfinding.Graphs.Navmesh.TileBuilder.walkableHeight tilebuilder.html#walkableHeight +Pathfinding.Graphs.Navmesh.TileHandler.Cut.bounds cut.html#bounds Bounds in XZ space. +Pathfinding.Graphs.Navmesh.TileHandler.Cut.boundsY cut.html#boundsY X is the lower bound on the y axis, Y is the upper bounds on the Y axis. +Pathfinding.Graphs.Navmesh.TileHandler.Cut.contour cut.html#contour +Pathfinding.Graphs.Navmesh.TileHandler.Cut.cutsAddedGeom cut.html#cutsAddedGeom +Pathfinding.Graphs.Navmesh.TileHandler.Cut.isDual cut.html#isDual +Pathfinding.Graphs.Navmesh.TileHandler.CutMode tilehandler.html#CutMode +Pathfinding.Graphs.Navmesh.TileHandler.CuttingResult.tags cuttingresult.html#tags +Pathfinding.Graphs.Navmesh.TileHandler.CuttingResult.tris cuttingresult.html#tris +Pathfinding.Graphs.Navmesh.TileHandler.CuttingResult.verts cuttingresult.html#verts +Pathfinding.Graphs.Navmesh.TileHandler.TileType.Depth tiletype.html#Depth +Pathfinding.Graphs.Navmesh.TileHandler.TileType.Rotations tiletype.html#Rotations Matrices for rotation. \n\nEach group of 4 elements is a 2x2 matrix. The XZ position is multiplied by this. So <b>[code in online documentation]</b> +Pathfinding.Graphs.Navmesh.TileHandler.TileType.Width tiletype.html#Width +Pathfinding.Graphs.Navmesh.TileHandler.TileType.depth tiletype.html#depth +Pathfinding.Graphs.Navmesh.TileHandler.TileType.lastRotation tiletype.html#lastRotation +Pathfinding.Graphs.Navmesh.TileHandler.TileType.lastYOffset tiletype.html#lastYOffset +Pathfinding.Graphs.Navmesh.TileHandler.TileType.offset tiletype.html#offset +Pathfinding.Graphs.Navmesh.TileHandler.TileType.tags tiletype.html#tags +Pathfinding.Graphs.Navmesh.TileHandler.TileType.tris tiletype.html#tris +Pathfinding.Graphs.Navmesh.TileHandler.TileType.verts tiletype.html#verts +Pathfinding.Graphs.Navmesh.TileHandler.TileType.width tiletype.html#width +Pathfinding.Graphs.Navmesh.TileHandler.activeTileOffsets tilehandler.html#activeTileOffsets Offsets along the Y axis of the active tiles. +Pathfinding.Graphs.Navmesh.TileHandler.activeTileRotations tilehandler.html#activeTileRotations Rotations of the active tiles. +Pathfinding.Graphs.Navmesh.TileHandler.activeTileTypes tilehandler.html#activeTileTypes Which tile type is active on each tile index. \n\nThis array will be tileXCount*tileZCount elements long. +Pathfinding.Graphs.Navmesh.TileHandler.batchDepth tilehandler.html#batchDepth Positive while batching tile updates. \n\nBatching tile updates has a positive effect on performance +Pathfinding.Graphs.Navmesh.TileHandler.cached_Int2_int_dict tilehandler.html#cached_Int2_int_dict Cached dictionary to avoid excessive allocations. +Pathfinding.Graphs.Navmesh.TileHandler.clipper tilehandler.html#clipper Handles polygon clipping operations. +Pathfinding.Graphs.Navmesh.TileHandler.cuts tilehandler.html#cuts NavmeshCut and NavmeshAdd components registered to this tile handler. \n\nThis is updated by the NavmeshUpdates class. \n\n[more in online documentation] +Pathfinding.Graphs.Navmesh.TileHandler.graph tilehandler.html#graph The underlaying graph which is handled by this instance. +Pathfinding.Graphs.Navmesh.TileHandler.isBatching tilehandler.html#isBatching True while batching tile updates. \n\nBatching tile updates has a positive effect on performance +Pathfinding.Graphs.Navmesh.TileHandler.isValid tilehandler.html#isValid True if the tile handler still has the same number of tiles and tile layout as the graph. \n\nIf the graph is rescanned the tile handler will get out of sync and needs to be recreated. +Pathfinding.Graphs.Navmesh.TileHandler.reloadedInBatch tilehandler.html#reloadedInBatch A flag for each tile that is set to true if it has been reloaded while batching is in progress. +Pathfinding.Graphs.Navmesh.TileHandler.simpleClipper tilehandler.html#simpleClipper Utility for clipping polygons to rectangles. \n\nImplemented as a struct and not a bunch of static methods because it needs some buffer arrays that are best cached to avoid excessive allocations +Pathfinding.Graphs.Navmesh.TileHandler.tileXCount tilehandler.html#tileXCount Number of tiles along the x axis. +Pathfinding.Graphs.Navmesh.TileHandler.tileZCount tilehandler.html#tileZCount Number of tiles along the z axis. +Pathfinding.Graphs.Navmesh.TileLayout.CellHeight tilelayout.html#CellHeight Voxel y coordinates will be stored as ushorts which have 65536 values. \n\nLeave a margin to make sure things do not overflow +Pathfinding.Graphs.Navmesh.TileLayout.TileWorldSizeX tilelayout.html#TileWorldSizeX Size of a tile in world units, along the graph's X axis. +Pathfinding.Graphs.Navmesh.TileLayout.TileWorldSizeZ tilelayout.html#TileWorldSizeZ Size of a tile in world units, along the graph's Z axis. +Pathfinding.Graphs.Navmesh.TileLayout.cellSize tilelayout.html#cellSize Voxel sample size (x,z). \n\nWhen generating a recast graph what happens is that the world is voxelized. You can think of this as constructing an approximation of the world out of lots of boxes. If you have played Minecraft it looks very similar (but with smaller boxes). <b>[image in online documentation]</b>\n\nLower values will yield higher quality navmeshes, however the graph will be slower to scan.\n\n <b>[image in online documentation]</b> +Pathfinding.Graphs.Navmesh.TileLayout.graphSpaceSize tilelayout.html#graphSpaceSize Size in graph space of the whole grid. \n\nIf the original bounding box was not an exact multiple of the tile size, this will be less than the total width of all tiles. +Pathfinding.Graphs.Navmesh.TileLayout.tileCount tilelayout.html#tileCount How many tiles there are in the grid. +Pathfinding.Graphs.Navmesh.TileLayout.tileSizeInVoxels tilelayout.html#tileSizeInVoxels Size of a tile in voxels along the X and Z axes. +Pathfinding.Graphs.Navmesh.TileLayout.transform tilelayout.html#transform Transforms coordinates from graph space to world space. +Pathfinding.Graphs.Navmesh.TileMesh.TileMeshUnsafe.tags tilemeshunsafe.html#tags One tag per triangle, of type uint. +Pathfinding.Graphs.Navmesh.TileMesh.TileMeshUnsafe.triangles tilemeshunsafe.html#triangles Three indices per triangle, of type int. +Pathfinding.Graphs.Navmesh.TileMesh.TileMeshUnsafe.verticesInTileSpace tilemeshunsafe.html#verticesInTileSpace One vertex per triangle, of type Int3. +Pathfinding.Graphs.Navmesh.TileMesh.tags tilemesh.html#tags One tag per triangle. +Pathfinding.Graphs.Navmesh.TileMesh.triangles tilemesh.html#triangles +Pathfinding.Graphs.Navmesh.TileMesh.verticesInTileSpace tilemesh.html#verticesInTileSpace +Pathfinding.Graphs.Navmesh.TileMeshes.tileMeshes tilemeshes.html#tileMeshes Tiles laid out row by row. +Pathfinding.Graphs.Navmesh.TileMeshes.tileRect tilemeshes.html#tileRect Which tiles in the graph this group of tiles represents. +Pathfinding.Graphs.Navmesh.TileMeshes.tileWorldSize tilemeshes.html#tileWorldSize World-space size of each tile. +Pathfinding.Graphs.Navmesh.TileMeshesUnsafe.tileMeshes tilemeshesunsafe.html#tileMeshes +Pathfinding.Graphs.Navmesh.TileMeshesUnsafe.tileRect tilemeshesunsafe.html#tileRect +Pathfinding.Graphs.Navmesh.TileMeshesUnsafe.tileWorldSize tilemeshesunsafe.html#tileWorldSize +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CellMinMax.max cellminmax.html#max +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CellMinMax.min cellminmax.html#min +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CellMinMax.objectID cellminmax.html#objectID +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelCell.count compactvoxelcell.html#count +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelCell.index compactvoxelcell.html#index +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelField.MaxLayers compactvoxelfield.html#MaxLayers Unmotivated variable, but let's clamp the layers at 65535. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelField.NotConnected compactvoxelfield.html#NotConnected +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelField.UnwalkableArea compactvoxelfield.html#UnwalkableArea +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelField.areaTypes compactvoxelfield.html#areaTypes +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelField.cells compactvoxelfield.html#cells +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelField.depth compactvoxelfield.html#depth +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelField.spans compactvoxelfield.html#spans +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelField.voxelWalkableHeight compactvoxelfield.html#voxelWalkableHeight +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelField.width compactvoxelfield.html#width +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelSpan.con compactvoxelspan.html#con +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelSpan.h compactvoxelspan.html#h +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelSpan.reg compactvoxelspan.html#reg +Pathfinding.Graphs.Navmesh.Voxelization.Burst.CompactVoxelSpan.y compactvoxelspan.html#y +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildCompactField.input jobbuildcompactfield.html#input +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildCompactField.output jobbuildcompactfield.html#output +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildConnections.field jobbuildconnections.html#field +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildConnections.voxelWalkableClimb jobbuildconnections.html#voxelWalkableClimb +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildConnections.voxelWalkableHeight jobbuildconnections.html#voxelWalkableHeight +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildContours.buildFlags jobbuildcontours.html#buildFlags +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildContours.cellSize jobbuildcontours.html#cellSize +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildContours.field jobbuildcontours.html#field +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildContours.maxEdgeLength jobbuildcontours.html#maxEdgeLength +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildContours.maxError jobbuildcontours.html#maxError +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildContours.outputContours jobbuildcontours.html#outputContours +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildContours.outputVerts jobbuildcontours.html#outputVerts +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildDistanceField.field jobbuilddistancefield.html#field +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildDistanceField.output jobbuilddistancefield.html#output +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildMesh.contourVertices jobbuildmesh.html#contourVertices +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildMesh.contours jobbuildmesh.html#contours contour set to build a mesh from. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildMesh.field jobbuildmesh.html#field +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildMesh.mesh jobbuildmesh.html#mesh Results will be written to this mesh. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.RelevantGraphSurfaceInfo.position relevantgraphsurfaceinfo.html#position +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.RelevantGraphSurfaceInfo.range relevantgraphsurfaceinfo.html#range +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.borderSize jobbuildregions.html#borderSize +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.cellHeight jobbuildregions.html#cellHeight +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.cellSize jobbuildregions.html#cellSize +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.distanceField jobbuildregions.html#distanceField +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.dstQue jobbuildregions.html#dstQue +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.field jobbuildregions.html#field +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.graphSpaceBounds jobbuildregions.html#graphSpaceBounds +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.graphTransform jobbuildregions.html#graphTransform +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.minRegionSize jobbuildregions.html#minRegionSize +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.relevantGraphSurfaceMode jobbuildregions.html#relevantGraphSurfaceMode +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.relevantGraphSurfaces jobbuildregions.html#relevantGraphSurfaces +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobBuildRegions.srcQue jobbuildregions.html#srcQue +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobErodeWalkableArea.field joberodewalkablearea.html#field +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobErodeWalkableArea.radius joberodewalkablearea.html#radius +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobFilterLedges.cellHeight jobfilterledges.html#cellHeight +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobFilterLedges.cellSize jobfilterledges.html#cellSize +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobFilterLedges.field jobfilterledges.html#field +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobFilterLedges.voxelWalkableClimb jobfilterledges.html#voxelWalkableClimb +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobFilterLedges.voxelWalkableHeight jobfilterledges.html#voxelWalkableHeight +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobFilterLowHeightSpans.field jobfilterlowheightspans.html#field +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobFilterLowHeightSpans.voxelWalkableHeight jobfilterlowheightspans.html#voxelWalkableHeight +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.bucket jobvoxelize.html#bucket +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.cellHeight jobvoxelize.html#cellHeight The y-axis cell size to use for fields. \n\n[Limit: > 0] [Units: wu] +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.cellSize jobvoxelize.html#cellSize The xz-plane cell size to use for fields. \n\n[Limit: > 0] [Units: wu] +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.graphSpaceBounds jobvoxelize.html#graphSpaceBounds +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.graphSpaceLimits jobvoxelize.html#graphSpaceLimits +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.graphTransform jobvoxelize.html#graphTransform +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.inputMeshes jobvoxelize.html#inputMeshes +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.maxSlope jobvoxelize.html#maxSlope The maximum slope that is considered walkable. \n\n[Limits: 0 <= value < 90] [Units: Degrees] +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.voxelArea jobvoxelize.html#voxelArea +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.voxelWalkableClimb jobvoxelize.html#voxelWalkableClimb Maximum ledge height that is considered to still be traversable. \n\n[Limit: >=0] [Units: vx] +Pathfinding.Graphs.Navmesh.Voxelization.Burst.JobVoxelize.voxelWalkableHeight jobvoxelize.html#voxelWalkableHeight Minimum floor to 'ceiling' height that will still allow the floor area to be considered walkable. \n\n[Limit: >= 3] [Units: vx] +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.AvgSpanLayerCountEstimate linkedvoxelfield.html#AvgSpanLayerCountEstimate Initial estimate on the average number of spans (layers) in the voxel representation. \n\nShould be greater or equal to 1 +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.InvalidSpanValue linkedvoxelfield.html#InvalidSpanValue Constant for default LinkedVoxelSpan top and bottom values. \n\nIt is important with the U since ~0 != ~0U This can be used to check if a LinkedVoxelSpan is valid and not just the default span +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.MaxHeight linkedvoxelfield.html#MaxHeight +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.MaxHeightInt linkedvoxelfield.html#MaxHeightInt +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.depth linkedvoxelfield.html#depth The depth of the field along the z-axis. \n\n[Limit: >= 0] [Units: voxels] +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.flatten linkedvoxelfield.html#flatten +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.height linkedvoxelfield.html#height The maximum height coordinate. \n\n[Limit: >= 0, <= MaxHeight] [Units: voxels] +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.linkedCellMinMax linkedvoxelfield.html#linkedCellMinMax +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.linkedSpans linkedvoxelfield.html#linkedSpans +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.removedStack linkedvoxelfield.html#removedStack +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelField.width linkedvoxelfield.html#width The width of the field along the x-axis. \n\n[Limit: >= 0] [Units: voxels] +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelSpan.area linkedvoxelspan.html#area +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelSpan.bottom linkedvoxelspan.html#bottom +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelSpan.next linkedvoxelspan.html#next +Pathfinding.Graphs.Navmesh.Voxelization.Burst.LinkedVoxelSpan.top linkedvoxelspan.html#top +Pathfinding.Graphs.Navmesh.Voxelization.Burst.NativeHashMapInt3Int burst.html#NativeHashMapInt3Int +Pathfinding.Graphs.Navmesh.Voxelization.Burst.RasterizationMesh.area rasterizationmesh.html#area +Pathfinding.Graphs.Navmesh.Voxelization.Burst.RasterizationMesh.areaIsTag rasterizationmesh.html#areaIsTag If true, the area will be interpreted as a node tag and applied to the final nodes. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.RasterizationMesh.bounds rasterizationmesh.html#bounds World bounds of the mesh. \n\nAssumed to already be multiplied with the matrix +Pathfinding.Graphs.Navmesh.Voxelization.Burst.RasterizationMesh.doubleSided rasterizationmesh.html#doubleSided If true, both sides of the mesh will be walkable. \n\nIf false, only the side that the normal points towards will be walkable +Pathfinding.Graphs.Navmesh.Voxelization.Burst.RasterizationMesh.flatten rasterizationmesh.html#flatten If true, the mesh will be flattened to the base of the graph during rasterization. \n\nThis is intended for rasterizing 2D meshes which always lie in a single plane.\n\nThis will also cause unwalkable spans have precedence over walkable ones at all times, instead of only when the unwalkable span is sufficiently high up over a walkable span. Since when flattening, "sufficiently high up" makes no sense. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.RasterizationMesh.matrix rasterizationmesh.html#matrix +Pathfinding.Graphs.Navmesh.Voxelization.Burst.RasterizationMesh.solid rasterizationmesh.html#solid If true then the mesh will be treated as solid and its interior will be unwalkable. \n\nThe unwalkable region will be the minimum to maximum y coordinate in each cell. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.RasterizationMesh.triangles rasterizationmesh.html#triangles +Pathfinding.Graphs.Navmesh.Voxelization.Burst.RasterizationMesh.vertices rasterizationmesh.html#vertices +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelContour.area voxelcontour.html#area Area ID of the contour. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelContour.nverts voxelcontour.html#nverts +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelContour.reg voxelcontour.html#reg Region ID of the contour. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelContour.vertexStartIndex voxelcontour.html#vertexStartIndex Vertex coordinates, each vertex contains 4 components. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelMesh.areas voxelmesh.html#areas Area index for each triangle. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelMesh.tris voxelmesh.html#tris Triangles of the mesh. \n\nEach element points to a vertex in the verts array +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelMesh.verts voxelmesh.html#verts Vertices of the mesh. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.BorderReg voxelutilityburst.html#BorderReg If heightfield region ID has the following bit set, the region is on border area and excluded from many calculations. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.ContourRegMask voxelutilityburst.html#ContourRegMask Mask used with contours to extract region id. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.DX voxelutilityburst.html#DX +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.DZ voxelutilityburst.html#DZ +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.RC_AREA_BORDER voxelutilityburst.html#RC_AREA_BORDER +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.RC_BORDER_VERTEX voxelutilityburst.html#RC_BORDER_VERTEX If contour region ID has the following bit set, the vertex will be later removed in order to match the segments and vertices at tile boundaries. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.RC_CONTOUR_TESS_AREA_EDGES voxelutilityburst.html#RC_CONTOUR_TESS_AREA_EDGES Tessellate edges between areas. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.RC_CONTOUR_TESS_TILE_EDGES voxelutilityburst.html#RC_CONTOUR_TESS_TILE_EDGES Tessellate edges at the border of the tile. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.RC_CONTOUR_TESS_WALL_EDGES voxelutilityburst.html#RC_CONTOUR_TESS_WALL_EDGES Tessellate wall edges. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.TagReg voxelutilityburst.html#TagReg If a cell region has this bit set then The remaining region bits (see TagRegMask) will be used for the node's tag. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.TagRegMask voxelutilityburst.html#TagRegMask All bits in the region which will be interpreted as a tag. +Pathfinding.Graphs.Navmesh.Voxelization.Burst.VoxelUtilityBurst.VERTEX_BUCKET_COUNT voxelutilityburst.html#VERTEX_BUCKET_COUNT +Pathfinding.Graphs.Navmesh.Voxelization.Int3PolygonClipper.clipPolygonCache int3polygonclipper.html#clipPolygonCache Cache this buffer to avoid unnecessary allocations. +Pathfinding.Graphs.Navmesh.Voxelization.Int3PolygonClipper.clipPolygonIntCache int3polygonclipper.html#clipPolygonIntCache Cache this buffer to avoid unnecessary allocations. +Pathfinding.Graphs.Navmesh.Voxelization.VoxelPolygonClipper.n voxelpolygonclipper.html#n +Pathfinding.Graphs.Navmesh.Voxelization.VoxelPolygonClipper.this[int i] voxelpolygonclipper.html#thisinti +Pathfinding.Graphs.Navmesh.Voxelization.VoxelPolygonClipper.x voxelpolygonclipper.html#x +Pathfinding.Graphs.Navmesh.Voxelization.VoxelPolygonClipper.y voxelpolygonclipper.html#y +Pathfinding.Graphs.Navmesh.Voxelization.VoxelPolygonClipper.z voxelpolygonclipper.html#z +Pathfinding.Graphs.Util.EuclideanEmbedding.EuclideanEmbeddingSearchPath.costIndexStride euclideanembeddingsearchpath.html#costIndexStride +Pathfinding.Graphs.Util.EuclideanEmbedding.EuclideanEmbeddingSearchPath.costs euclideanembeddingsearchpath.html#costs +Pathfinding.Graphs.Util.EuclideanEmbedding.EuclideanEmbeddingSearchPath.furthestNode euclideanembeddingsearchpath.html#furthestNode +Pathfinding.Graphs.Util.EuclideanEmbedding.EuclideanEmbeddingSearchPath.furthestNodeScore euclideanembeddingsearchpath.html#furthestNodeScore +Pathfinding.Graphs.Util.EuclideanEmbedding.EuclideanEmbeddingSearchPath.pivotIndex euclideanembeddingsearchpath.html#pivotIndex +Pathfinding.Graphs.Util.EuclideanEmbedding.EuclideanEmbeddingSearchPath.startNode euclideanembeddingsearchpath.html#startNode +Pathfinding.Graphs.Util.EuclideanEmbedding.costs euclideanembedding.html#costs Costs laid out as n*[int],n*[int],n*[int] where n is the number of pivot points. \n\nEach node has n integers which is the cost from that node to the pivot node. They are at around the same place in the array for simplicity and for cache locality.\n\ncost(nodeIndex, pivotIndex) = costs[nodeIndex*pivotCount+pivotIndex] +Pathfinding.Graphs.Util.EuclideanEmbedding.dirty euclideanembedding.html#dirty +Pathfinding.Graphs.Util.EuclideanEmbedding.mode euclideanembedding.html#mode If heuristic optimization should be used and how to place the pivot points. \n\n[more in online documentation] +Pathfinding.Graphs.Util.EuclideanEmbedding.pivotCount euclideanembedding.html#pivotCount +Pathfinding.Graphs.Util.EuclideanEmbedding.pivotPointRoot euclideanembedding.html#pivotPointRoot All children of this transform will be used as pivot points. +Pathfinding.Graphs.Util.EuclideanEmbedding.pivots euclideanembedding.html#pivots +Pathfinding.Graphs.Util.EuclideanEmbedding.ra euclideanembedding.html#ra +Pathfinding.Graphs.Util.EuclideanEmbedding.rc euclideanembedding.html#rc +Pathfinding.Graphs.Util.EuclideanEmbedding.rval euclideanembedding.html#rval +Pathfinding.Graphs.Util.EuclideanEmbedding.seed euclideanembedding.html#seed +Pathfinding.Graphs.Util.EuclideanEmbedding.spreadOutCount euclideanembedding.html#spreadOutCount +Pathfinding.Graphs.Util.GridLookup.AllItems gridlookup.html#AllItems Linked list of all items. +Pathfinding.Graphs.Util.GridLookup.Item.next item.html#next +Pathfinding.Graphs.Util.GridLookup.Item.prev item.html#prev +Pathfinding.Graphs.Util.GridLookup.Item.root item.html#root +Pathfinding.Graphs.Util.GridLookup.Root.flag root.html#flag +Pathfinding.Graphs.Util.GridLookup.Root.items root.html#items References to an item in each grid cell that this object is contained inside. +Pathfinding.Graphs.Util.GridLookup.Root.next root.html#next Next item in the linked list of all roots. +Pathfinding.Graphs.Util.GridLookup.Root.obj root.html#obj Underlying object. +Pathfinding.Graphs.Util.GridLookup.Root.prev root.html#prev Previous item in the linked list of all roots. +Pathfinding.Graphs.Util.GridLookup.Root.previousBounds root.html#previousBounds +Pathfinding.Graphs.Util.GridLookup.Root.previousPosition root.html#previousPosition +Pathfinding.Graphs.Util.GridLookup.Root.previousRotation root.html#previousRotation +Pathfinding.Graphs.Util.GridLookup.all gridlookup.html#all Linked list of all items. \n\nNote that the first item in the list is a dummy item and does not contain any data. +Pathfinding.Graphs.Util.GridLookup.cells gridlookup.html#cells +Pathfinding.Graphs.Util.GridLookup.itemPool gridlookup.html#itemPool +Pathfinding.Graphs.Util.GridLookup.rootLookup gridlookup.html#rootLookup +Pathfinding.Graphs.Util.GridLookup.size gridlookup.html#size +Pathfinding.Graphs.Util.HeuristicOptimizationMode util.html#HeuristicOptimizationMode +Pathfinding.GridGraph.CombinedGridGraphUpdatePromise.promises combinedgridgraphupdatepromise.html#promises +Pathfinding.GridGraph.Depth gridgraph.html#Depth +Pathfinding.GridGraph.FixedPrecisionScale gridgraph.html#FixedPrecisionScale Scaling used for the coordinates in the Linecast methods that take normalized points using integer coordinates. \n\nTo convert from world space, each coordinate is multiplied by this factor and then rounded to the nearest integer.\n\nTypically you do not need to use this constant yourself, instead use the Linecast overloads that do not take integer coordinates. +Pathfinding.GridGraph.GridGraphMovePromise.dx gridgraphmovepromise.html#dx +Pathfinding.GridGraph.GridGraphMovePromise.dz gridgraphmovepromise.html#dz +Pathfinding.GridGraph.GridGraphMovePromise.graph gridgraphmovepromise.html#graph +Pathfinding.GridGraph.GridGraphMovePromise.promises gridgraphmovepromise.html#promises +Pathfinding.GridGraph.GridGraphMovePromise.rects gridgraphmovepromise.html#rects +Pathfinding.GridGraph.GridGraphMovePromise.startingSize gridgraphmovepromise.html#startingSize +Pathfinding.GridGraph.GridGraphSnapshot.graph gridgraphsnapshot.html#graph +Pathfinding.GridGraph.GridGraphSnapshot.nodes gridgraphsnapshot.html#nodes +Pathfinding.GridGraph.GridGraphUpdatePromise.CostEstimate gridgraphupdatepromise.html#CostEstimate +Pathfinding.GridGraph.GridGraphUpdatePromise.NodesHolder.nodes nodesholder.html#nodes +Pathfinding.GridGraph.GridGraphUpdatePromise.allocationMethod gridgraphupdatepromise.html#allocationMethod +Pathfinding.GridGraph.GridGraphUpdatePromise.context gridgraphupdatepromise.html#context +Pathfinding.GridGraph.GridGraphUpdatePromise.dependencyTracker gridgraphupdatepromise.html#dependencyTracker +Pathfinding.GridGraph.GridGraphUpdatePromise.emptyUpdate gridgraphupdatepromise.html#emptyUpdate +Pathfinding.GridGraph.GridGraphUpdatePromise.fullRecalculationBounds gridgraphupdatepromise.html#fullRecalculationBounds +Pathfinding.GridGraph.GridGraphUpdatePromise.graph gridgraphupdatepromise.html#graph +Pathfinding.GridGraph.GridGraphUpdatePromise.graphUpdateObject gridgraphupdatepromise.html#graphUpdateObject +Pathfinding.GridGraph.GridGraphUpdatePromise.nodeArrayBounds gridgraphupdatepromise.html#nodeArrayBounds +Pathfinding.GridGraph.GridGraphUpdatePromise.nodes gridgraphupdatepromise.html#nodes +Pathfinding.GridGraph.GridGraphUpdatePromise.nodesDependsOn gridgraphupdatepromise.html#nodesDependsOn +Pathfinding.GridGraph.GridGraphUpdatePromise.ownsJobDependencyTracker gridgraphupdatepromise.html#ownsJobDependencyTracker +Pathfinding.GridGraph.GridGraphUpdatePromise.readBounds gridgraphupdatepromise.html#readBounds +Pathfinding.GridGraph.GridGraphUpdatePromise.recalculationMode gridgraphupdatepromise.html#recalculationMode +Pathfinding.GridGraph.GridGraphUpdatePromise.rect gridgraphupdatepromise.html#rect +Pathfinding.GridGraph.GridGraphUpdatePromise.transform gridgraphupdatepromise.html#transform +Pathfinding.GridGraph.GridGraphUpdatePromise.writeMaskBounds gridgraphupdatepromise.html#writeMaskBounds +Pathfinding.GridGraph.HexagonConnectionMask gridgraph.html#HexagonConnectionMask Mask based on <b>hexagonNeighbourIndices</b>. \n\nThis indicates which connections (out of the 8 standard ones) should be enabled for hexagonal graphs.\n\n<b>[code in online documentation]</b> +Pathfinding.GridGraph.LayerCount gridgraph.html#LayerCount Number of layers in the graph. \n\nFor grid graphs this is always 1, for layered grid graphs it can be higher. The nodes array has the size width*depth*layerCount. +Pathfinding.GridGraph.MaxLayers gridgraph.html#MaxLayers +Pathfinding.GridGraph.RecalculationMode gridgraph.html#RecalculationMode +Pathfinding.GridGraph.StandardDimetricAngle gridgraph.html#StandardDimetricAngle Commonly used value for isometricAngle. +Pathfinding.GridGraph.StandardIsometricAngle gridgraph.html#StandardIsometricAngle Commonly used value for isometricAngle. +Pathfinding.GridGraph.TextureData.ChannelUse texturedata.html#ChannelUse +Pathfinding.GridGraph.TextureData.channels texturedata.html#channels +Pathfinding.GridGraph.TextureData.data texturedata.html#data +Pathfinding.GridGraph.TextureData.enabled texturedata.html#enabled +Pathfinding.GridGraph.TextureData.factors texturedata.html#factors +Pathfinding.GridGraph.TextureData.source texturedata.html#source +Pathfinding.GridGraph.Width gridgraph.html#Width +Pathfinding.GridGraph.allNeighbourIndices gridgraph.html#allNeighbourIndices Which neighbours are going to be used when neighbours=8. +Pathfinding.GridGraph.aspectRatio gridgraph.html#aspectRatio Scaling of the graph along the X axis. \n\nThis should be used if you want different scales on the X and Y axis of the grid\n\nThis option is only visible in the inspector if the graph shape is set to isometric or advanced. +Pathfinding.GridGraph.axisAlignedNeighbourIndices gridgraph.html#axisAlignedNeighbourIndices Which neighbours are going to be used when neighbours=4. +Pathfinding.GridGraph.bounds gridgraph.html#bounds World bounding box for the graph. \n\nThis always contains the whole graph.\n\n[more in online documentation] +Pathfinding.GridGraph.center gridgraph.html#center Center point of the grid in world space. \n\nThe graph can be positioned anywhere in the world.\n\n[more in online documentation] +Pathfinding.GridGraph.collision gridgraph.html#collision Settings on how to check for walkability and height. +Pathfinding.GridGraph.cutCorners gridgraph.html#cutCorners If disabled, will not cut corners on obstacles. \n\nIf this is true, and neighbours is set to <b>Eight</b>, obstacle corners are allowed to be cut by a connection.\n\n <b>[image in online documentation]</b> +Pathfinding.GridGraph.depth gridgraph.html#depth Depth (height) of the grid in nodes. \n\nGrid graphs are typically anywhere from 10-500 nodes wide. But it can go up to 1024 nodes wide by default. Consider using a recast graph instead, if you find yourself needing a very high resolution grid.\n\nThis value will be clamped to at most 1024 unless <b>ASTAR_LARGER_GRIDS</b> has been enabled in the A* Inspector -> Optimizations tab.\n\n[more in online documentation] +Pathfinding.GridGraph.erodeIterations gridgraph.html#erodeIterations Number of times to erode the graph. \n\nThe graph can be eroded to add extra margin to obstacles. It is very convenient if your graph contains ledges, and where the walkable nodes without erosion are too close to the edge.\n\nBelow is an image showing a graph with 0, 1 and 2 erosion iterations: <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.GridGraph.erosionFirstTag gridgraph.html#erosionFirstTag Tag to start from when using tags for erosion. \n\n[more in online documentation] +Pathfinding.GridGraph.erosionTagsPrecedenceMask gridgraph.html#erosionTagsPrecedenceMask Bitmask for which tags can be overwritten by erosion tags. \n\nWhen erosionUseTags is enabled, nodes near unwalkable nodes will be marked with tags. However, if these nodes already have tags, you may want the custom tag to take precedence. This mask controls which tags are allowed to be replaced by the new erosion tags.\n\nIn the image below, erosion has applied tags which have overwritten both the base tag (tag 0) and the custom tag set on the nodes (shown in red). <b>[image in online documentation]</b>\n\nIn the image below, erosion has applied tags, but it was not allowed to overwrite the custom tag set on the nodes (shown in red). <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.GridGraph.erosionUseTags gridgraph.html#erosionUseTags Use tags instead of walkability for erosion. \n\nTags will be used for erosion instead of marking nodes as unwalkable. The nodes will be marked with tags in an increasing order starting with the tag erosionFirstTag. Debug with the Tags mode to see the effect. With this enabled you can in effect set how close different AIs are allowed to get to walls using the Valid Tags field on the Seeker component. <b>[image in online documentation]</b><b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.GridGraph.hexagonNeighbourIndices gridgraph.html#hexagonNeighbourIndices Which neighbours are going to be used when neighbours=6. +Pathfinding.GridGraph.inspectorGridMode gridgraph.html#inspectorGridMode Determines the layout of the grid graph inspector in the Unity Editor. \n\nA grid graph can be set up as a normal grid, isometric grid or hexagonal grid. Each of these modes use a slightly different inspector layout. When changing the shape in the inspector, it will automatically set other relevant fields to appropriate values. For example, when setting the shape to hexagonal it will automatically set the neighbours field to Six.\n\nThis field is only used in the editor, it has no effect on the rest of the game whatsoever.\n\nIf you want to change the grid shape like in the inspector you can use the SetGridShape method. +Pathfinding.GridGraph.inspectorHexagonSizeMode gridgraph.html#inspectorHexagonSizeMode Determines how the size of each hexagon is set in the inspector. \n\nFor hexagons the normal nodeSize field doesn't really correspond to anything specific on the hexagon's geometry, so this enum is used to give the user the opportunity to adjust more concrete dimensions of the hexagons without having to pull out a calculator to calculate all the square roots and complicated conversion factors.\n\nThis field is only used in the graph inspector, the nodeSize field will always use the same internal units. If you want to set the node size through code then you can use ConvertHexagonSizeToNodeSize.\n\n <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.GridGraph.is2D gridgraph.html#is2D Get or set if the graph should be in 2D mode. \n\n[more in online documentation] +Pathfinding.GridGraph.isScanned gridgraph.html#isScanned +Pathfinding.GridGraph.isometricAngle gridgraph.html#isometricAngle Angle in degrees to use for the isometric projection. \n\nIf you are making a 2D isometric game, you may want to use this parameter to adjust the layout of the graph to match your game. This will essentially scale the graph along one of its diagonals to produce something like this:\n\nA perspective view of an isometric graph. <b>[image in online documentation]</b>\n\nA top down view of an isometric graph. Note that the graph is entirely 2D, there is no perspective in this image. <b>[image in online documentation]</b>\n\nFor commonly used values see StandardIsometricAngle and StandardDimetricAngle.\n\nUsually the angle that you want to use is either 30 degrees (alternatively 90-30 = 60 degrees) or atan(1/sqrt(2)) which is approximately 35.264 degrees (alternatively 90 - 35.264 = 54.736 degrees). You might also want to rotate the graph plus or minus 45 degrees around the Y axis to get the oritientation required for your game.\n\nYou can read more about it on the wikipedia page linked below.\n\n[more in online documentation]\nThis option is only visible in the inspector if the graph shape is set to isometric or advanced. +Pathfinding.GridGraph.maxClimb gridgraph.html#maxClimb The max y coordinate difference between two nodes to enable a connection. \n\n[more in online documentation] +Pathfinding.GridGraph.maxSlope gridgraph.html#maxSlope The max slope in degrees for a node to be walkable. +Pathfinding.GridGraph.maxStepHeight gridgraph.html#maxStepHeight The max y coordinate difference between two nodes to enable a connection. \n\nSet to 0 to ignore the value.\n\nThis affects for example how the graph is generated around ledges and stairs.\n\n[more in online documentation] +Pathfinding.GridGraph.maxStepUsesSlope gridgraph.html#maxStepUsesSlope Take the slope into account for maxStepHeight. \n\nWhen this is enabled the normals of the terrain will be used to make more accurate estimates of how large the steps are between adjacent nodes.\n\nWhen this is disabled then calculated step between two nodes is their y coordinate difference. This may be inaccurate, especially at the start of steep slopes.\n\n <b>[image in online documentation]</b>\n\nIn the image below you can see an example of what happens near a ramp. In the topmost image the ramp is not connected with the rest of the graph which is obviously not what we want. In the middle image an attempt has been made to raise the max step height while keeping maxStepUsesSlope disabled. However this causes too many connections to be added. The agent should not be able to go up the ramp from the side. Finally in the bottommost image the maxStepHeight has been restored to the original value but maxStepUsesSlope has been enabled. This configuration handles the ramp in a much smarter way. Note that all the values in the image are just example values, they may be different for your scene. <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.GridGraph.neighbourCosts gridgraph.html#neighbourCosts Costs to neighbour nodes. \n\nSee neighbourOffsets. +Pathfinding.GridGraph.neighbourOffsets gridgraph.html#neighbourOffsets Index offset to get neighbour nodes. \n\nAdded to a node's index to get a neighbour node index.\n\n<b>[code in online documentation]</b> +Pathfinding.GridGraph.neighbourXOffsets gridgraph.html#neighbourXOffsets Offsets in the X direction for neighbour nodes. \n\nOnly 1, 0 or -1 +Pathfinding.GridGraph.neighbourZOffsets gridgraph.html#neighbourZOffsets Offsets in the Z direction for neighbour nodes. \n\nOnly 1, 0 or -1 +Pathfinding.GridGraph.neighbours gridgraph.html#neighbours Number of neighbours for each node. \n\nEither four, six, eight connections per node.\n\nSix connections is primarily for hexagonal graphs. +Pathfinding.GridGraph.newGridNodeDelegate gridgraph.html#newGridNodeDelegate Delegate which creates and returns a single instance of the node type for this graph. \n\nThis may be set in the constructor for graphs inheriting from the GridGraph to change the node type of the graph. +Pathfinding.GridGraph.nodeData gridgraph.html#nodeData Internal data for each node. \n\nIt also contains some data not stored in the node objects, such as normals for the surface of the graph. These normals need to be saved when the maxStepUsesSlope option is enabled for graph updates to work. +Pathfinding.GridGraph.nodeDataRef gridgraph.html#nodeDataRef +Pathfinding.GridGraph.nodeSize gridgraph.html#nodeSize Size of one node in world units. \n\nFor a grid layout, this is the length of the sides of the grid squares.\n\nFor a hexagonal layout, this value does not correspond to any specific dimension of the hexagon. Instead you can convert it to a dimension on a hexagon using ConvertNodeSizeToHexagonSize.\n\n[more in online documentation] +Pathfinding.GridGraph.nodes gridgraph.html#nodes All nodes in this graph. \n\nNodes are laid out row by row.\n\nThe first node has grid coordinates X=0, Z=0, the second one X=1, Z=0\n\nthe last one has grid coordinates X=width-1, Z=depth-1.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.GridGraph.penaltyAngle gridgraph.html#penaltyAngle [more in online documentation] +Pathfinding.GridGraph.penaltyAngleFactor gridgraph.html#penaltyAngleFactor How much penalty is applied depending on the slope of the terrain. \n\nAt a 90 degree slope (not that exactly 90 degree slopes can occur, but almost 90 degree), this penalty is applied. At a 45 degree slope, half of this is applied and so on. Note that you may require very large values, a value of 1000 is equivalent to the cost of moving 1 world unit.\n\n[more in online documentation] +Pathfinding.GridGraph.penaltyAnglePower gridgraph.html#penaltyAnglePower How much extra to penalize very steep angles. \n\n[more in online documentation] +Pathfinding.GridGraph.penaltyPosition gridgraph.html#penaltyPosition Use position (y-coordinate) to calculate penalty. \n\n[more in online documentation] +Pathfinding.GridGraph.penaltyPositionFactor gridgraph.html#penaltyPositionFactor Scale factor for penalty when calculating from position. \n\n[more in online documentation] +Pathfinding.GridGraph.penaltyPositionOffset gridgraph.html#penaltyPositionOffset Offset for the position when calculating penalty. \n\n[more in online documentation] +Pathfinding.GridGraph.rotation gridgraph.html#rotation Rotation of the grid in degrees. \n\nThe nodes are laid out along the X and Z axes of the rotation.\n\nFor a 2D game, the rotation will typically be set to (-90, 270, 90). If the graph is aligned with the XY plane, the inspector will automatically switch to 2D mode.\n\n[more in online documentation] +Pathfinding.GridGraph.rules gridgraph.html#rules Additional rules to use when scanning the grid graph. \n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.GridGraph.showMeshOutline gridgraph.html#showMeshOutline Show an outline of the grid nodes in the Unity Editor. +Pathfinding.GridGraph.showMeshSurface gridgraph.html#showMeshSurface Show the surface of the graph. \n\nEach node will be drawn as a square (unless e.g hexagon graph mode has been enabled). +Pathfinding.GridGraph.showNodeConnections gridgraph.html#showNodeConnections Show the connections between the grid nodes in the Unity Editor. +Pathfinding.GridGraph.size gridgraph.html#size Size of the grid. \n\nWill always be positive and larger than nodeSize. \n\n[more in online documentation] +Pathfinding.GridGraph.textureData gridgraph.html#textureData Holds settings for using a texture as source for a grid graph. \n\nTexure data can be used for fine grained control over how the graph will look. It can be used for positioning, penalty and walkability control.\n\nBelow is a screenshot of a grid graph with a penalty map applied. It has the effect of the AI taking the longer path along the green (low penalty) areas.\n\n <b>[image in online documentation]</b>[more in online documentation]\n\n\n\n[more in online documentation] +Pathfinding.GridGraph.transform gridgraph.html#transform Determines how the graph transforms graph space to world space. \n\n[more in online documentation] +Pathfinding.GridGraph.unclampedSize gridgraph.html#unclampedSize Size of the grid. \n\nCan be negative or smaller than nodeSize +Pathfinding.GridGraph.uniformEdgeCosts gridgraph.html#uniformEdgeCosts If true, all edge costs will be set to the same value. \n\nIf false, diagonals will cost more. This is useful for a hexagon graph where the diagonals are actually the same length as the normal edges (since the graph has been skewed) +Pathfinding.GridGraph.useRaycastNormal gridgraph.html#useRaycastNormal Use heigh raycasting normal for max slope calculation. \n\nTrue if maxSlope is less than 90 degrees. +Pathfinding.GridGraph.width gridgraph.html#width Width of the grid in nodes. \n\nGrid graphs are typically anywhere from 10-500 nodes wide. But it can go up to 1024 nodes wide by default. Consider using a recast graph instead, if you find yourself needing a very high resolution grid.\n\nThis value will be clamped to at most 1024 unless <b>ASTAR_LARGER_GRIDS</b> has been enabled in the A* Inspector -> Optimizations tab.\n\n[more in online documentation] +Pathfinding.GridGraphEditor.GridPivot gridgrapheditor.html#GridPivot +Pathfinding.GridGraphEditor.arcBuffer gridgrapheditor.html#arcBuffer +Pathfinding.GridGraphEditor.cachedSceneGridLayouts gridgrapheditor.html#cachedSceneGridLayouts +Pathfinding.GridGraphEditor.cachedSceneGridLayoutsTimestamp gridgrapheditor.html#cachedSceneGridLayoutsTimestamp +Pathfinding.GridGraphEditor.collisionPreviewOpen gridgrapheditor.html#collisionPreviewOpen Shows the preview for the collision testing options. \n\n <b>[image in online documentation]</b>\n\nOn the left you can see a top-down view of the graph with a grid of nodes. On the right you can see a side view of the graph. The white line at the bottom is the base of the graph, with node positions indicated using small dots. When using 2D physics, only the top-down view is visible.\n\nThe green shape indicates the shape that will be used for collision checking. +Pathfinding.GridGraphEditor.gridPivotSelectBackground gridgrapheditor.html#gridPivotSelectBackground Cached gui style. +Pathfinding.GridGraphEditor.gridPivotSelectButton gridgrapheditor.html#gridPivotSelectButton Cached gui style. +Pathfinding.GridGraphEditor.handlePoints gridgrapheditor.html#handlePoints +Pathfinding.GridGraphEditor.hexagonSizeContents gridgrapheditor.html#hexagonSizeContents +Pathfinding.GridGraphEditor.interpolatedGridWidthInNodes gridgrapheditor.html#interpolatedGridWidthInNodes +Pathfinding.GridGraphEditor.isMouseDown gridgrapheditor.html#isMouseDown +Pathfinding.GridGraphEditor.lastTime gridgrapheditor.html#lastTime +Pathfinding.GridGraphEditor.lineBuffer gridgrapheditor.html#lineBuffer +Pathfinding.GridGraphEditor.lockStyle gridgrapheditor.html#lockStyle Cached gui style. +Pathfinding.GridGraphEditor.locked gridgrapheditor.html#locked +Pathfinding.GridGraphEditor.pivot gridgrapheditor.html#pivot +Pathfinding.GridGraphEditor.ruleEditorInstances gridgrapheditor.html#ruleEditorInstances +Pathfinding.GridGraphEditor.ruleEditors gridgrapheditor.html#ruleEditors +Pathfinding.GridGraphEditor.ruleHeaders gridgrapheditor.html#ruleHeaders +Pathfinding.GridGraphEditor.ruleTypes gridgrapheditor.html#ruleTypes +Pathfinding.GridGraphEditor.savedDimensions gridgrapheditor.html#savedDimensions +Pathfinding.GridGraphEditor.savedNodeSize gridgrapheditor.html#savedNodeSize +Pathfinding.GridGraphEditor.savedTransform gridgrapheditor.html#savedTransform +Pathfinding.GridGraphEditor.selectedTilemap gridgrapheditor.html#selectedTilemap +Pathfinding.GridGraphEditor.showExtra gridgrapheditor.html#showExtra +Pathfinding.GridHitInfo.direction gridhitinfo.html#direction Direction from the node to the edge that was hit. \n\nThis will be in the range of 0 to 4 (exclusive) or -1 if no particular edge was hit.\n\n[more in online documentation] +Pathfinding.GridHitInfo.node gridhitinfo.html#node The node which contained the edge that was hit. \n\nThis may be null in case no particular edge was hit. +Pathfinding.GridNode.EdgeNode gridnode.html#EdgeNode Work in progress for a feature that required info about which nodes were at the border of the graph. \n\n[more in online documentation] +Pathfinding.GridNode.GridFlagsAxisAlignedConnectionMask gridnode.html#GridFlagsAxisAlignedConnectionMask +Pathfinding.GridNode.GridFlagsConnectionBit0 gridnode.html#GridFlagsConnectionBit0 +Pathfinding.GridNode.GridFlagsConnectionMask gridnode.html#GridFlagsConnectionMask +Pathfinding.GridNode.GridFlagsConnectionOffset gridnode.html#GridFlagsConnectionOffset +Pathfinding.GridNode.GridFlagsEdgeNodeMask gridnode.html#GridFlagsEdgeNodeMask +Pathfinding.GridNode.GridFlagsEdgeNodeOffset gridnode.html#GridFlagsEdgeNodeOffset +Pathfinding.GridNode.HasAnyGridConnections gridnode.html#HasAnyGridConnections +Pathfinding.GridNode.HasConnectionsToAllAxisAlignedNeighbours gridnode.html#HasConnectionsToAllAxisAlignedNeighbours +Pathfinding.GridNode.HasConnectionsToAllEightNeighbours gridnode.html#HasConnectionsToAllEightNeighbours +Pathfinding.GridNode.InternalGridFlags gridnode.html#InternalGridFlags Internal use only. +Pathfinding.GridNode._gridGraphs gridnode.html#_gridGraphs +Pathfinding.GridNodeBase.CoordinatesInGrid gridnodebase.html#CoordinatesInGrid The X and Z coordinates of the node in the grid. \n\nThe node in the bottom left corner has (x,z) = (0,0) and the one in the opposite corner has (x,z) = (width-1, depth-1)\n\n[more in online documentation] +Pathfinding.GridNodeBase.GridFlagsWalkableErosionMask gridnodebase.html#GridFlagsWalkableErosionMask +Pathfinding.GridNodeBase.GridFlagsWalkableErosionOffset gridnodebase.html#GridFlagsWalkableErosionOffset +Pathfinding.GridNodeBase.GridFlagsWalkableTmpMask gridnodebase.html#GridFlagsWalkableTmpMask +Pathfinding.GridNodeBase.GridFlagsWalkableTmpOffset gridnodebase.html#GridFlagsWalkableTmpOffset +Pathfinding.GridNodeBase.HasAnyGridConnections gridnodebase.html#HasAnyGridConnections True if this node has any grid connections. +Pathfinding.GridNodeBase.HasConnectionsToAllAxisAlignedNeighbours gridnodebase.html#HasConnectionsToAllAxisAlignedNeighbours True if the node has grid connections to all its 4 axis-aligned neighbours. \n\n[more in online documentation] +Pathfinding.GridNodeBase.HasConnectionsToAllEightNeighbours gridnodebase.html#HasConnectionsToAllEightNeighbours True if the node has grid connections to all its 8 neighbours. \n\n[more in online documentation] +Pathfinding.GridNodeBase.NodeInGridIndex gridnodebase.html#NodeInGridIndex The index of the node in the grid. \n\nThis is x + z*graph.width So you can get the X and Z indices using <b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.GridNodeBase.NodeInGridIndexLayerOffset gridnodebase.html#NodeInGridIndexLayerOffset +Pathfinding.GridNodeBase.NodeInGridIndexMask gridnodebase.html#NodeInGridIndexMask +Pathfinding.GridNodeBase.TmpWalkable gridnodebase.html#TmpWalkable Temporary variable used internally when updating the graph. +Pathfinding.GridNodeBase.WalkableErosion gridnodebase.html#WalkableErosion Stores walkability before erosion is applied. \n\nUsed internally when updating the graph. +Pathfinding.GridNodeBase.XCoordinateInGrid gridnodebase.html#XCoordinateInGrid X coordinate of the node in the grid. \n\nThe node in the bottom left corner has (x,z) = (0,0) and the one in the opposite corner has (x,z) = (width-1, depth-1)\n\n[more in online documentation] +Pathfinding.GridNodeBase.ZCoordinateInGrid gridnodebase.html#ZCoordinateInGrid Z coordinate of the node in the grid. \n\nThe node in the bottom left corner has (x,z) = (0,0) and the one in the opposite corner has (x,z) = (width-1, depth-1)\n\n[more in online documentation] +Pathfinding.GridNodeBase.connections gridnodebase.html#connections Custon non-grid connections from this node. \n\n[more in online documentation]\nThis field is removed if the ASTAR_GRID_NO_CUSTOM_CONNECTIONS compiler directive is used. Removing it can save a tiny bit of memory. You can enable the define in the Optimizations tab in the A* inspector. \n\n[more in online documentation] +Pathfinding.GridNodeBase.gridFlags gridnodebase.html#gridFlags +Pathfinding.GridNodeBase.nodeInGridIndex gridnodebase.html#nodeInGridIndex Bitfield containing the x and z coordinates of the node as well as the layer (for layered grid graphs). \n\n[more in online documentation] +Pathfinding.GridNodeBase.offsetToDirection gridnodebase.html#offsetToDirection Converts from dx + 3*dz to a neighbour direction. \n\nUsed by OffsetToConnectionDirection.\n\nAssumes that dx and dz are both in the range [0,2]. \n\n[more in online documentation] +Pathfinding.GridStringPulling.FixedPrecisionScale gridstringpulling.html#FixedPrecisionScale +Pathfinding.GridStringPulling.PredicateFailMode gridstringpulling.html#PredicateFailMode +Pathfinding.GridStringPulling.TriangleBounds.d1 trianglebounds.html#d1 +Pathfinding.GridStringPulling.TriangleBounds.d2 trianglebounds.html#d2 +Pathfinding.GridStringPulling.TriangleBounds.d3 trianglebounds.html#d3 +Pathfinding.GridStringPulling.TriangleBounds.t1 trianglebounds.html#t1 +Pathfinding.GridStringPulling.TriangleBounds.t2 trianglebounds.html#t2 +Pathfinding.GridStringPulling.TriangleBounds.t3 trianglebounds.html#t3 +Pathfinding.GridStringPulling.directionToCorners gridstringpulling.html#directionToCorners Z | |. \n\n3 2 \ | / – - X - —– X / | \ 0 1\n\n| | +Pathfinding.GridStringPulling.marker1 gridstringpulling.html#marker1 +Pathfinding.GridStringPulling.marker2 gridstringpulling.html#marker2 +Pathfinding.GridStringPulling.marker3 gridstringpulling.html#marker3 +Pathfinding.GridStringPulling.marker4 gridstringpulling.html#marker4 +Pathfinding.GridStringPulling.marker5 gridstringpulling.html#marker5 +Pathfinding.GridStringPulling.marker6 gridstringpulling.html#marker6 +Pathfinding.GridStringPulling.marker7 gridstringpulling.html#marker7 +Pathfinding.Heuristic pathfinding.html#Heuristic How to estimate the cost of moving to the destination during pathfinding. \n\nThe heuristic is the estimated cost from the current node to the target. The different heuristics have roughly the same performance except not using any heuristic at all ( Heuristic.None) which is usually significantly slower.\n\nIn the image below you can see a comparison of the different heuristic options for an 8-connected grid and for a 4-connected grid. Note that all paths within the green area will all have the same length. The only difference between the heuristics is which of those paths of the same length that will be chosen. Note that while the Diagonal Manhattan and Manhattan options seem to behave very differently on an 8-connected grid they only do it in this case because of very small rounding errors. Usually they behave almost identically on 8-connected grids.\n\n <b>[image in online documentation]</b>\n\nGenerally for a 4-connected grid graph the Manhattan option should be used as it is the true distance on a 4-connected grid. For an 8-connected grid graph the Diagonal Manhattan option is the mathematically most correct option, however the Euclidean option is often preferred, especially if you are simplifying the path afterwards using modifiers.\n\nFor any graph that is not grid based the Euclidean option is the best one to use.\n\n[more in online documentation] +Pathfinding.HeuristicObjective.euclideanEmbeddingCosts heuristicobjective.html#euclideanEmbeddingCosts +Pathfinding.HeuristicObjective.euclideanEmbeddingPivots heuristicobjective.html#euclideanEmbeddingPivots +Pathfinding.HeuristicObjective.heuristic heuristicobjective.html#heuristic +Pathfinding.HeuristicObjective.heuristicScale heuristicobjective.html#heuristicScale +Pathfinding.HeuristicObjective.mn heuristicobjective.html#mn +Pathfinding.HeuristicObjective.mx heuristicobjective.html#mx +Pathfinding.HeuristicObjective.targetNodeIndex heuristicobjective.html#targetNodeIndex +Pathfinding.HierarchicalGraph.HierarhicalNodeData.bounds hierarhicalnodedata.html#bounds +Pathfinding.HierarchicalGraph.HierarhicalNodeData.connectionAllocations hierarhicalnodedata.html#connectionAllocations +Pathfinding.HierarchicalGraph.HierarhicalNodeData.connectionAllocator hierarhicalnodedata.html#connectionAllocator +Pathfinding.HierarchicalGraph.JobRecalculateComponents.Context.children context.html#children +Pathfinding.HierarchicalGraph.JobRecalculateComponents.Context.connections context.html#connections +Pathfinding.HierarchicalGraph.JobRecalculateComponents.Context.graphindex context.html#graphindex +Pathfinding.HierarchicalGraph.JobRecalculateComponents.Context.hierarchicalNodeIndex context.html#hierarchicalNodeIndex +Pathfinding.HierarchicalGraph.JobRecalculateComponents.Context.queue context.html#queue +Pathfinding.HierarchicalGraph.JobRecalculateComponents.bounds jobrecalculatecomponents.html#bounds +Pathfinding.HierarchicalGraph.JobRecalculateComponents.connectionAllocations jobrecalculatecomponents.html#connectionAllocations +Pathfinding.HierarchicalGraph.JobRecalculateComponents.dirtiedHierarchicalNodes jobrecalculatecomponents.html#dirtiedHierarchicalNodes +Pathfinding.HierarchicalGraph.JobRecalculateComponents.hGraphGC jobrecalculatecomponents.html#hGraphGC +Pathfinding.HierarchicalGraph.JobRecalculateComponents.numHierarchicalNodes jobrecalculatecomponents.html#numHierarchicalNodes +Pathfinding.HierarchicalGraph.MaxChildrenPerNode hierarchicalgraph.html#MaxChildrenPerNode +Pathfinding.HierarchicalGraph.MinChildrenPerNode hierarchicalgraph.html#MinChildrenPerNode +Pathfinding.HierarchicalGraph.NumConnectedComponents hierarchicalgraph.html#NumConnectedComponents +Pathfinding.HierarchicalGraph.Tiling hierarchicalgraph.html#Tiling +Pathfinding.HierarchicalGraph.areas hierarchicalgraph.html#areas +Pathfinding.HierarchicalGraph.bounds hierarchicalgraph.html#bounds +Pathfinding.HierarchicalGraph.children hierarchicalgraph.html#children +Pathfinding.HierarchicalGraph.connectionAllocations hierarchicalgraph.html#connectionAllocations +Pathfinding.HierarchicalGraph.connectionAllocator hierarchicalgraph.html#connectionAllocator +Pathfinding.HierarchicalGraph.currentConnections hierarchicalgraph.html#currentConnections +Pathfinding.HierarchicalGraph.dirtiedHierarchicalNodes hierarchicalgraph.html#dirtiedHierarchicalNodes +Pathfinding.HierarchicalGraph.dirty hierarchicalgraph.html#dirty +Pathfinding.HierarchicalGraph.dirtyNodes hierarchicalgraph.html#dirtyNodes +Pathfinding.HierarchicalGraph.freeNodeIndices hierarchicalgraph.html#freeNodeIndices +Pathfinding.HierarchicalGraph.gcHandle hierarchicalgraph.html#gcHandle +Pathfinding.HierarchicalGraph.gizmoVersion hierarchicalgraph.html#gizmoVersion +Pathfinding.HierarchicalGraph.navmeshEdges hierarchicalgraph.html#navmeshEdges +Pathfinding.HierarchicalGraph.nodeStorage hierarchicalgraph.html#nodeStorage +Pathfinding.HierarchicalGraph.numHierarchicalNodes hierarchicalgraph.html#numHierarchicalNodes Holds areas.Length as a burst-accessible reference. +Pathfinding.HierarchicalGraph.rwLock hierarchicalgraph.html#rwLock +Pathfinding.HierarchicalGraph.temporaryQueue hierarchicalgraph.html#temporaryQueue +Pathfinding.HierarchicalGraph.temporaryStack hierarchicalgraph.html#temporaryStack +Pathfinding.HierarchicalGraph.version hierarchicalgraph.html#version +Pathfinding.HierarchicalGraph.versions hierarchicalgraph.html#versions +Pathfinding.IAstarAI.canMove iastarai.html#canMove Enables or disables movement completely. \n\nIf you want the agent to stand still, but still react to local avoidance and use gravity: use isStopped instead.\n\nThis is also useful if you want to have full control over when the movement calculations run. Take a look at MovementUpdate\n\n[more in online documentation] +Pathfinding.IAstarAI.canSearch iastarai.html#canSearch Enables or disables recalculating the path at regular intervals. \n\nSetting this to false does not stop any active path requests from being calculated or stop it from continuing to follow the current path.\n\nNote that this only disables automatic path recalculations. If you call the SearchPath() method a path will still be calculated.\n\n[more in online documentation] +Pathfinding.IAstarAI.desiredVelocity iastarai.html#desiredVelocity Velocity that this agent wants to move with. \n\nIncludes gravity and local avoidance if applicable. In world units per second.\n\n[more in online documentation] +Pathfinding.IAstarAI.desiredVelocityWithoutLocalAvoidance iastarai.html#desiredVelocityWithoutLocalAvoidance Velocity that this agent wants to move with before taking local avoidance into account. \n\nIncludes gravity. In world units per second.\n\nSetting this property will set the current velocity that the agent is trying to move with, including gravity. This can be useful if you want to make the agent come to a complete stop in a single frame or if you want to modify the velocity in some way.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation]\n\n\nIf you are not using local avoidance then this property will in almost all cases be identical to desiredVelocity plus some noise due to floating point math.\n\n[more in online documentation] +Pathfinding.IAstarAI.destination iastarai.html#destination Position in the world that this agent should move to. \n\nIf no destination has been set yet, then (+infinity, +infinity, +infinity) will be returned.\n\nNote that setting this property does not immediately cause the agent to recalculate its path. So it may take some time before the agent starts to move towards this point. Most movement scripts have a <b>repathRate</b> field which indicates how often the agent looks for a new path. You can also call the SearchPath method to immediately start to search for a new path. Paths are calculated asynchronously so when an agent starts to search for path it may take a few frames (usually 1 or 2) until the result is available. During this time the pathPending property will return true.\n\nIf you are setting a destination and then want to know when the agent has reached that destination then you could either use reachedDestination (recommended) or check both pathPending and reachedEndOfPath. Check the documentation for the respective fields to learn about their differences.\n\n<b>[code in online documentation]</b><b>[code in online documentation]</b> +Pathfinding.IAstarAI.endOfPath iastarai.html#endOfPath End point of path the agent is currently following. \n\nIf the agent has no path (or it might not be calculated yet), this will return the destination instead. If the agent has no destination it will return the agent's current position.\n\nThe end of the path is usually identical or very close to the destination, but it may differ if the path for example was blocked by a wall so that the agent couldn't get any closer.\n\nThis is only updated when the path is recalculated. +Pathfinding.IAstarAI.hasPath iastarai.html#hasPath True if this agent currently has a path that it follows. +Pathfinding.IAstarAI.height iastarai.html#height Height of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nThis value is currently only used if an RVOController is attached to the same GameObject, otherwise it is only used for drawing nice gizmos in the scene view. However since the height value is used for some things, the radius field is always visible for consistency and easier visualization of the character. That said, it may be used for something in a future release.\n\n[more in online documentation] +Pathfinding.IAstarAI.isStopped iastarai.html#isStopped Gets or sets if the agent should stop moving. \n\nIf this is set to true the agent will immediately start to slow down as quickly as it can to come to a full stop. The agent will still react to local avoidance and gravity (if applicable), but it will not try to move in any particular direction.\n\nThe current path of the agent will not be cleared, so when this is set to false again the agent will continue moving along the previous path.\n\nThis is a purely user-controlled parameter, so for example it is not set automatically when the agent stops moving because it has reached the target. Use reachedEndOfPath for that.\n\nIf this property is set to true while the agent is traversing an off-mesh link (RichAI script only), then the agent will continue traversing the link and stop once it has completed it.\n\n[more in online documentation]\nThe steeringTarget property will continue to indicate the point which the agent would move towards if it would not be stopped. +Pathfinding.IAstarAI.maxSpeed iastarai.html#maxSpeed Max speed in world units per second. +Pathfinding.IAstarAI.movementPlane iastarai.html#movementPlane The plane the agent is moving in. \n\nThis is typically the ground plane, which will be the XZ plane in a 3D game, and the XY plane in a 2D game. Ultimately it depends on the graph orientation.\n\nIf you are doing pathfinding on a spherical world (see Spherical Worlds), the the movement plane will be the tangent plane of the sphere at the agent's position. +Pathfinding.IAstarAI.onSearchPath iastarai.html#onSearchPath Called when the agent recalculates its path. \n\nThis is called both for automatic path recalculations (see canSearch) and manual ones (see SearchPath).\n\n[more in online documentation] +Pathfinding.IAstarAI.pathPending iastarai.html#pathPending True if a path is currently being calculated. +Pathfinding.IAstarAI.position iastarai.html#position Position of the agent. \n\nIn world space. \n\n[more in online documentation]\nIf you want to move the agent you may use Teleport or Move. +Pathfinding.IAstarAI.radius iastarai.html#radius Radius of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nNote that this does not affect pathfinding in any way. The graph used completely determines where the agent can move.\n\n[more in online documentation] +Pathfinding.IAstarAI.reachedDestination iastarai.html#reachedDestination True if the ai has reached the destination. \n\nThis is a best effort calculation to see if the destination has been reached. For the AIPath/RichAI scripts, this is when the character is within AIPath.endReachedDistance world units from the destination. For the AILerp script it is when the character is at the destination (±a very small margin).\n\nThis value will be updated immediately when the destination is changed (in contrast to reachedEndOfPath), however since path requests are asynchronous it will use an approximation until it sees the real path result. What this property does is to check the distance to the end of the current path, and add to that the distance from the end of the path to the destination (i.e. is assumes it is possible to move in a straight line between the end of the current path to the destination) and then checks if that total distance is less than AIPath.endReachedDistance. This property is therefore only a best effort, but it will work well for almost all use cases.\n\nFurthermore it will not report that the destination is reached if the destination is above the head of the character or more than half the height of the character below its feet (so if you have a multilevel building, it is important that you configure the height of the character correctly).\n\nThe cases which could be problematic are if an agent is standing next to a very thin wall and the destination suddenly changes to the other side of that thin wall. During the time that it takes for the path to be calculated the agent may see itself as alredy having reached the destination because the destination only moved a very small distance (the wall was thin), even though it may actually be quite a long way around the wall to the other side.\n\nIn contrast to reachedEndOfPath, this property is immediately updated when the destination is changed.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.IAstarAI.reachedEndOfPath iastarai.html#reachedEndOfPath True if the agent has reached the end of the current path. \n\nNote that setting the destination does not immediately update the path, nor is there any guarantee that the AI will actually be able to reach the destination that you set. The AI will try to get as close as possible. Often you want to use reachedDestination instead which is easier to work with.\n\nIt is very hard to provide a method for detecting if the AI has reached the destination that works across all different games because the destination may not even lie on the navmesh and how that is handled differs from game to game (see also the code snippet in the docs for destination).\n\n[more in online documentation] +Pathfinding.IAstarAI.remainingDistance iastarai.html#remainingDistance Approximate remaining distance along the current path to the end of the path. \n\nThe RichAI movement script approximates this distance since it is quite expensive to calculate the real distance. However it will be accurate when the agent is within 1 corner of the destination. You can use GetRemainingPath to calculate the actual remaining path more precisely.\n\nThe AIPath and AILerp scripts use a more accurate distance calculation at all times.\n\nIf the agent does not currently have a path, then positive infinity will be returned.\n\n[more in online documentation]\n\n\n\n[more in online documentation] +Pathfinding.IAstarAI.rotation iastarai.html#rotation Rotation of the agent. \n\nIn world space. \n\n[more in online documentation] +Pathfinding.IAstarAI.steeringTarget iastarai.html#steeringTarget Point on the path which the agent is currently moving towards. \n\nThis is usually a point a small distance ahead of the agent or the end of the path.\n\nIf the agent does not have a path at the moment, then the agent's current position will be returned. +Pathfinding.IAstarAI.velocity iastarai.html#velocity Actual velocity that the agent is moving with. \n\nIn world units per second.\n\n[more in online documentation] +Pathfinding.IGraphInternals.SerializedEditorSettings igraphinternals.html#SerializedEditorSettings +Pathfinding.IGraphUpdatePromise.Progress igraphupdatepromise.html#Progress Returns the progress of the update. \n\nThis should be a value between 0 and 1. +Pathfinding.IOffMeshLinkHandler.name ioffmeshlinkhandler.html#name Name of the handler. \n\nThis is used to identify the handler in the inspector. +Pathfinding.IPathInternals.PathHandler ipathinternals.html#PathHandler +Pathfinding.IPathInternals.Pooled ipathinternals.html#Pooled +Pathfinding.IPathModifier.Order ipathmodifier.html#Order +Pathfinding.ITransformedGraph.transform itransformedgraph.html#transform +Pathfinding.ITraversalProvider.filterDiagonalGridConnections itraversalprovider.html#filterDiagonalGridConnections Filter diagonal connections using GridGraph.cutCorners for effects applied by this ITraversalProvider. \n\nThis includes tags and other effects that this ITraversalProvider controls.\n\nThis only has an effect if GridGraph.cutCorners is set to false and your grid has GridGraph.neighbours set to Eight.\n\nTake this example, the grid is completely walkable, but an ITraversalProvider is used to make the nodes marked with '#' as unwalkable. The agent 'S' is in the middle.\n\n<b>[code in online documentation]</b>\n\nIf <b>filterDiagonalGridConnections</b> is false the agent will be free to use the diagonal connections to move away from that spot. However, if <b>filterDiagonalGridConnections</b> is true (the default) then the diagonal connections will be disabled and the agent will be stuck.\n\nTypically, there are a few common use cases:\n- If your ITraversalProvider makes walls and obstacles and you want it to behave identically to obstacles included in the original grid graph scan, then this should be true.\n\n- If your ITraversalProvider is used for agent to agent avoidance and you want them to be able to move around each other more freely, then this should be false.\n\n\n\n[more in online documentation] +Pathfinding.InspectorGridHexagonNodeSize pathfinding.html#InspectorGridHexagonNodeSize +Pathfinding.InspectorGridMode pathfinding.html#InspectorGridMode +Pathfinding.Int2.sqrMagnitudeLong int2.html#sqrMagnitudeLong +Pathfinding.Int2.x int2.html#x +Pathfinding.Int2.y int2.html#y +Pathfinding.Int3.FloatPrecision int3.html#FloatPrecision Precision as a float +Pathfinding.Int3.Precision int3.html#Precision Precision for the integer coordinates. \n\nOne world unit is divided into [value] pieces. A value of 1000 would mean millimeter precision, a value of 1 would mean meter precision (assuming 1 world unit = 1 meter). This value affects the maximum coordinates for nodes as well as how large the cost values are for moving between two nodes. A higher value means that you also have to set all penalty values to a higher value to compensate since the normal cost of moving will be higher. +Pathfinding.Int3.PrecisionFactor int3.html#PrecisionFactor 1 divided by Precision +Pathfinding.Int3.costMagnitude int3.html#costMagnitude Magnitude used for the cost between two nodes. \n\nThe default cost between two nodes can be calculated like this: <b>[code in online documentation]</b>\n\nThis is simply the magnitude, rounded to the nearest integer +Pathfinding.Int3.magnitude int3.html#magnitude Returns the magnitude of the vector. \n\nThe magnitude is the 'length' of the vector from 0,0,0 to this point. Can be used for distance calculations: <b>[code in online documentation]</b> +Pathfinding.Int3.sqrMagnitude int3.html#sqrMagnitude The squared magnitude of the vector. +Pathfinding.Int3.sqrMagnitudeLong int3.html#sqrMagnitudeLong The squared magnitude of the vector. +Pathfinding.Int3.this[int i] int3.html#thisinti +Pathfinding.Int3.x int3.html#x +Pathfinding.Int3.y int3.html#y +Pathfinding.Int3.z int3.html#z +Pathfinding.Int3.zero int3.html#zero +Pathfinding.IntBounds.max intbounds.html#max +Pathfinding.IntBounds.min intbounds.html#min +Pathfinding.IntBounds.size intbounds.html#size +Pathfinding.IntBounds.volume intbounds.html#volume +Pathfinding.IntRect.Area intrect.html#Area +Pathfinding.IntRect.Height intrect.html#Height +Pathfinding.IntRect.Max intrect.html#Max +Pathfinding.IntRect.Min intrect.html#Min +Pathfinding.IntRect.Width intrect.html#Width +Pathfinding.IntRect.xmax intrect.html#xmax +Pathfinding.IntRect.xmin intrect.html#xmin +Pathfinding.IntRect.ymax intrect.html#ymax +Pathfinding.IntRect.ymin intrect.html#ymin +Pathfinding.Jobs.DisposeArena.buffer disposearena.html#buffer +Pathfinding.Jobs.DisposeArena.buffer2 disposearena.html#buffer2 +Pathfinding.Jobs.DisposeArena.buffer3 disposearena.html#buffer3 +Pathfinding.Jobs.DisposeArena.gcHandles disposearena.html#gcHandles +Pathfinding.Jobs.IJobExtensions.ManagedActionJob.handle managedactionjob.html#handle +Pathfinding.Jobs.IJobExtensions.ManagedJob.handle managedjob.html#handle +Pathfinding.Jobs.IJobParallelForBatched.allowBoundsChecks ijobparallelforbatched.html#allowBoundsChecks +Pathfinding.Jobs.IndexActionJob.action indexactionjob.html#action +Pathfinding.Jobs.IndexActionJob.length indexactionjob.html#length +Pathfinding.Jobs.JobAND.data joband.html#data +Pathfinding.Jobs.JobAND.result joband.html#result +Pathfinding.Jobs.JobCopy.from jobcopy.html#from +Pathfinding.Jobs.JobCopy.to jobcopy.html#to +Pathfinding.Jobs.JobCopyHits.hits jobcopyhits.html#hits +Pathfinding.Jobs.JobCopyHits.normals jobcopyhits.html#normals +Pathfinding.Jobs.JobCopyHits.points jobcopyhits.html#points +Pathfinding.Jobs.JobCopyHits.slice jobcopyhits.html#slice +Pathfinding.Jobs.JobCopyRectangle.input jobcopyrectangle.html#input +Pathfinding.Jobs.JobCopyRectangle.inputSlice jobcopyrectangle.html#inputSlice +Pathfinding.Jobs.JobCopyRectangle.output jobcopyrectangle.html#output +Pathfinding.Jobs.JobCopyRectangle.outputSlice jobcopyrectangle.html#outputSlice +Pathfinding.Jobs.JobDependencyAnalyzer.BufferOffset jobdependencyanalyzer.html#BufferOffset Offset to the m_Buffer field inside each NativeArray<T> +Pathfinding.Jobs.JobDependencyAnalyzer.ReflectionData.checkUninitializedRead reflectiondata.html#checkUninitializedRead +Pathfinding.Jobs.JobDependencyAnalyzer.ReflectionData.fieldNames reflectiondata.html#fieldNames +Pathfinding.Jobs.JobDependencyAnalyzer.ReflectionData.fieldOffsets reflectiondata.html#fieldOffsets +Pathfinding.Jobs.JobDependencyAnalyzer.ReflectionData.writes reflectiondata.html#writes +Pathfinding.Jobs.JobDependencyAnalyzer.SpanPtrOffset jobdependencyanalyzer.html#SpanPtrOffset +Pathfinding.Jobs.JobDependencyAnalyzer.reflectionData jobdependencyanalyzer.html#reflectionData +Pathfinding.Jobs.JobDependencyAnalyzerAssociated.combineSampler jobdependencyanalyzerassociated.html#combineSampler +Pathfinding.Jobs.JobDependencyAnalyzerAssociated.getDependenciesSampler jobdependencyanalyzerassociated.html#getDependenciesSampler +Pathfinding.Jobs.JobDependencyAnalyzerAssociated.initSampler jobdependencyanalyzerassociated.html#initSampler +Pathfinding.Jobs.JobDependencyAnalyzerAssociated.iteratingSlotsSampler jobdependencyanalyzerassociated.html#iteratingSlotsSampler +Pathfinding.Jobs.JobDependencyAnalyzerAssociated.jobCounter jobdependencyanalyzerassociated.html#jobCounter +Pathfinding.Jobs.JobDependencyAnalyzerAssociated.tempJobDependencyHashes jobdependencyanalyzerassociated.html#tempJobDependencyHashes +Pathfinding.Jobs.JobDependencyTracker.AllWritesDependency jobdependencytracker.html#AllWritesDependency JobHandle that represents a dependency for all jobs. \n\nAll native arrays that are written (and have been tracked by this tracker) to will have their final results in them when the returned job handle is complete. +Pathfinding.Jobs.JobDependencyTracker.JobInstance.handle jobinstance.html#handle +Pathfinding.Jobs.JobDependencyTracker.JobInstance.hash jobinstance.html#hash +Pathfinding.Jobs.JobDependencyTracker.JobOverlapCapsuleCommandDummy.commands joboverlapcapsulecommanddummy.html#commands +Pathfinding.Jobs.JobDependencyTracker.JobOverlapCapsuleCommandDummy.results joboverlapcapsulecommanddummy.html#results +Pathfinding.Jobs.JobDependencyTracker.JobOverlapSphereCommandDummy.commands joboverlapspherecommanddummy.html#commands +Pathfinding.Jobs.JobDependencyTracker.JobOverlapSphereCommandDummy.results joboverlapspherecommanddummy.html#results +Pathfinding.Jobs.JobDependencyTracker.JobRaycastCommandDummy.commands jobraycastcommanddummy.html#commands +Pathfinding.Jobs.JobDependencyTracker.JobRaycastCommandDummy.results jobraycastcommanddummy.html#results +Pathfinding.Jobs.JobDependencyTracker.NativeArraySlot.hasWrite nativearrayslot.html#hasWrite +Pathfinding.Jobs.JobDependencyTracker.NativeArraySlot.hash nativearrayslot.html#hash +Pathfinding.Jobs.JobDependencyTracker.NativeArraySlot.initialized nativearrayslot.html#initialized +Pathfinding.Jobs.JobDependencyTracker.NativeArraySlot.lastReads nativearrayslot.html#lastReads +Pathfinding.Jobs.JobDependencyTracker.NativeArraySlot.lastWrite nativearrayslot.html#lastWrite +Pathfinding.Jobs.JobDependencyTracker.arena jobdependencytracker.html#arena +Pathfinding.Jobs.JobDependencyTracker.dependenciesScratchBuffer jobdependencytracker.html#dependenciesScratchBuffer +Pathfinding.Jobs.JobDependencyTracker.forceLinearDependencies jobdependencytracker.html#forceLinearDependencies +Pathfinding.Jobs.JobDependencyTracker.linearDependencies jobdependencytracker.html#linearDependencies +Pathfinding.Jobs.JobDependencyTracker.slots jobdependencytracker.html#slots +Pathfinding.Jobs.JobDependencyTracker.supportsMultithreading jobdependencytracker.html#supportsMultithreading +Pathfinding.Jobs.JobDependencyTracker.timeSlice jobdependencytracker.html#timeSlice +Pathfinding.Jobs.JobHandleWithMainThreadWork.coroutine jobhandlewithmainthreadwork.html#coroutine +Pathfinding.Jobs.JobHandleWithMainThreadWork.tracker jobhandlewithmainthreadwork.html#tracker +Pathfinding.Jobs.JobMaxHitCount.hits jobmaxhitcount.html#hits +Pathfinding.Jobs.JobMaxHitCount.layerStride jobmaxhitcount.html#layerStride +Pathfinding.Jobs.JobMaxHitCount.maxHitCount jobmaxhitcount.html#maxHitCount +Pathfinding.Jobs.JobMaxHitCount.maxHits jobmaxhitcount.html#maxHits +Pathfinding.Jobs.JobMemSet.data jobmemset.html#data +Pathfinding.Jobs.JobMemSet.value jobmemset.html#value +Pathfinding.Jobs.JobParallelForBatchedExtensions.ParallelForBatchJobStruct.jobReflectionData parallelforbatchjobstruct.html#jobReflectionData +Pathfinding.Jobs.JobRaycastAll.JobCombineResults.maxHits jobcombineresults.html#maxHits +Pathfinding.Jobs.JobRaycastAll.JobCombineResults.results jobcombineresults.html#results +Pathfinding.Jobs.JobRaycastAll.JobCombineResults.semiResults jobcombineresults.html#semiResults +Pathfinding.Jobs.JobRaycastAll.JobCreateCommands.commands jobcreatecommands.html#commands +Pathfinding.Jobs.JobRaycastAll.JobCreateCommands.minStep jobcreatecommands.html#minStep +Pathfinding.Jobs.JobRaycastAll.JobCreateCommands.physicsScene jobcreatecommands.html#physicsScene +Pathfinding.Jobs.JobRaycastAll.JobCreateCommands.raycastHits jobcreatecommands.html#raycastHits +Pathfinding.Jobs.JobRaycastAll.commands jobraycastall.html#commands +Pathfinding.Jobs.JobRaycastAll.maxHits jobraycastall.html#maxHits +Pathfinding.Jobs.JobRaycastAll.minStep jobraycastall.html#minStep +Pathfinding.Jobs.JobRaycastAll.physicsScene jobraycastall.html#physicsScene +Pathfinding.Jobs.JobRaycastAll.results jobraycastall.html#results +Pathfinding.Jobs.JobRaycastAll.semiResults jobraycastall.html#semiResults +Pathfinding.Jobs.JobRotate3DArray.arr jobrotate3darray.html#arr +Pathfinding.Jobs.JobRotate3DArray.dx jobrotate3darray.html#dx +Pathfinding.Jobs.JobRotate3DArray.dz jobrotate3darray.html#dz +Pathfinding.Jobs.JobRotate3DArray.size jobrotate3darray.html#size +Pathfinding.Jobs.LinearDependencies jobs2.html#LinearDependencies +Pathfinding.Jobs.RWLock.CombinedReadLockAsync.dependency combinedreadlockasync.html#dependency +Pathfinding.Jobs.RWLock.CombinedReadLockAsync.lock1 combinedreadlockasync.html#lock1 +Pathfinding.Jobs.RWLock.CombinedReadLockAsync.lock2 combinedreadlockasync.html#lock2 +Pathfinding.Jobs.RWLock.LockSync.inner locksync.html#inner +Pathfinding.Jobs.RWLock.ReadLockAsync.dependency readlockasync.html#dependency +Pathfinding.Jobs.RWLock.ReadLockAsync.inner readlockasync.html#inner +Pathfinding.Jobs.RWLock.WriteLockAsync.dependency writelockasync.html#dependency +Pathfinding.Jobs.RWLock.WriteLockAsync.inner writelockasync.html#inner +Pathfinding.Jobs.RWLock.lastRead rwlock.html#lastRead +Pathfinding.Jobs.RWLock.lastWrite rwlock.html#lastWrite +Pathfinding.Jobs.Slice3D.coversEverything slice3d.html#coversEverything True if the slice covers the whole outer array. +Pathfinding.Jobs.Slice3D.innerStrides slice3d.html#innerStrides +Pathfinding.Jobs.Slice3D.int slice3d.html#int +Pathfinding.Jobs.Slice3D.length slice3d.html#length +Pathfinding.Jobs.Slice3D.outerSize slice3d.html#outerSize +Pathfinding.Jobs.Slice3D.outerStartIndex slice3d.html#outerStartIndex +Pathfinding.Jobs.Slice3D.outerStrides slice3d.html#outerStrides +Pathfinding.Jobs.Slice3D.slice slice3d.html#slice +Pathfinding.Jobs.SliceActionJob.action sliceactionjob.html#action +Pathfinding.Jobs.SliceActionJob.slice sliceactionjob.html#slice +Pathfinding.Jobs.SpinLock.locked spinlock.html#locked +Pathfinding.Jobs.TimeSlice.Infinite timeslice.html#Infinite +Pathfinding.Jobs.TimeSlice.endTick timeslice.html#endTick +Pathfinding.Jobs.TimeSlice.expired timeslice.html#expired +Pathfinding.LayerGridGraph.LayerCount layergridgraph.html#LayerCount +Pathfinding.LayerGridGraph.MaxLayers layergridgraph.html#MaxLayers +Pathfinding.LayerGridGraph.characterHeight layergridgraph.html#characterHeight Nodes with a short distance to the node above it will be set unwalkable. +Pathfinding.LayerGridGraph.lastScannedDepth layergridgraph.html#lastScannedDepth +Pathfinding.LayerGridGraph.lastScannedWidth layergridgraph.html#lastScannedWidth +Pathfinding.LayerGridGraph.layerCount layergridgraph.html#layerCount Number of layers. \n\n[more in online documentation] +Pathfinding.LevelGridNode.AllConnectionsMask levelgridnode.html#AllConnectionsMask +Pathfinding.LevelGridNode.AxisAlignedConnectionsMask levelgridnode.html#AxisAlignedConnectionsMask +Pathfinding.LevelGridNode.ConnectionMask levelgridnode.html#ConnectionMask +Pathfinding.LevelGridNode.ConnectionStride levelgridnode.html#ConnectionStride +Pathfinding.LevelGridNode.DiagonalConnectionsMask levelgridnode.html#DiagonalConnectionsMask +Pathfinding.LevelGridNode.HasAnyGridConnections levelgridnode.html#HasAnyGridConnections +Pathfinding.LevelGridNode.HasConnectionsToAllAxisAlignedNeighbours levelgridnode.html#HasConnectionsToAllAxisAlignedNeighbours +Pathfinding.LevelGridNode.HasConnectionsToAllEightNeighbours levelgridnode.html#HasConnectionsToAllEightNeighbours +Pathfinding.LevelGridNode.LayerCoordinateInGrid levelgridnode.html#LayerCoordinateInGrid Layer coordinate of the node in the grid. \n\nIf there are multiple nodes in the same (x,z) cell, then they will be stored in different layers. Together with NodeInGridIndex, you can look up the node in the nodes array <b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.LevelGridNode.MaxLayerCount levelgridnode.html#MaxLayerCount Maximum number of layers the layered grid graph supports. \n\nThis can be changed in the A* Inspector -> Optimizations tab by enabling or disabling the ASTAR_LEVELGRIDNODE_MORE_LAYERS option. +Pathfinding.LevelGridNode.MaxNeighbours levelgridnode.html#MaxNeighbours +Pathfinding.LevelGridNode.NoConnection levelgridnode.html#NoConnection +Pathfinding.LevelGridNode._gridGraphs levelgridnode.html#_gridGraphs +Pathfinding.LevelGridNode.gridConnections levelgridnode.html#gridConnections +Pathfinding.LevelGridNode.gridGraphs levelgridnode.html#gridGraphs +Pathfinding.LinkGraph.LinkGraphUpdatePromise.graph linkgraphupdatepromise.html#graph +Pathfinding.LinkGraph.isScanned linkgraph.html#isScanned +Pathfinding.LinkGraph.nodeCount linkgraph.html#nodeCount +Pathfinding.LinkGraph.nodes linkgraph.html#nodes +Pathfinding.LinkGraph.persistent linkgraph.html#persistent +Pathfinding.LinkGraph.showInInspector linkgraph.html#showInInspector +Pathfinding.LinkNode.linkConcrete linknode.html#linkConcrete +Pathfinding.LinkNode.linkSource linknode.html#linkSource +Pathfinding.LinkNode.nodeInGraphIndex linknode.html#nodeInGraphIndex +Pathfinding.LocalSpaceGraph.graphTransform localspacegraph.html#graphTransform +Pathfinding.LocalSpaceGraph.originalMatrix localspacegraph.html#originalMatrix +Pathfinding.LocalSpaceGraph.transformation localspacegraph.html#transformation +Pathfinding.Math pathfinding.html#Math +Pathfinding.MeshNode.connections meshnode.html#connections All connections from this node. \n\n[more in online documentation]\n\n\nMay be null if the node has no connections. +Pathfinding.MonoModifier.Order monomodifier.html#Order Modifiers will be executed from lower order to higher order. \n\nThis value is assumed to stay constant. +Pathfinding.MonoModifier.seeker monomodifier.html#seeker +Pathfinding.MoveInCircle.ai moveincircle.html#ai +Pathfinding.MoveInCircle.offset moveincircle.html#offset Distance between the agent's current position, and the destination it will get. \n\nUse a negative value to make the agent move in the opposite direction around the circle. +Pathfinding.MoveInCircle.radius moveincircle.html#radius Radius of the circle. +Pathfinding.MoveInCircle.target moveincircle.html#target Target point to rotate around. +Pathfinding.MultiTargetPath.callbacks multitargetpath.html#callbacks Callbacks to call for each individual path. +Pathfinding.MultiTargetPath.chosenTarget multitargetpath.html#chosenTarget The closest target index (if any target was found) +Pathfinding.MultiTargetPath.endPointKnownBeforeCalculation multitargetpath.html#endPointKnownBeforeCalculation +Pathfinding.MultiTargetPath.inverted multitargetpath.html#inverted False if the path goes from one point to multiple targets. \n\nTrue if it goes from multiple start points to one target point +Pathfinding.MultiTargetPath.nodePaths multitargetpath.html#nodePaths Stores all paths to the targets. \n\nElements are null if no path was found +Pathfinding.MultiTargetPath.originalTargetPoints multitargetpath.html#originalTargetPoints Target points specified when creating the path. \n\nThese are not snapped to the nearest nodes +Pathfinding.MultiTargetPath.pathsForAll multitargetpath.html#pathsForAll If true, a path to all targets will be returned, otherwise just the one to the closest one. +Pathfinding.MultiTargetPath.targetNodeCount multitargetpath.html#targetNodeCount Number of target nodes left to find. +Pathfinding.MultiTargetPath.targetNodes multitargetpath.html#targetNodes Nearest nodes to the targetPoints. +Pathfinding.MultiTargetPath.targetPathCosts multitargetpath.html#targetPathCosts The cost of the calculated path for each target. \n\nWill be 0 if a path was not found. +Pathfinding.MultiTargetPath.targetPoints multitargetpath.html#targetPoints Target points specified when creating the path. \n\nThese are snapped to the nearest nodes +Pathfinding.MultiTargetPath.targetsFound multitargetpath.html#targetsFound Indicates if the target has been found. \n\nAlso true if the target cannot be reached (is in another area) +Pathfinding.MultiTargetPath.vectorPaths multitargetpath.html#vectorPaths Stores all vector paths to the targets. \n\nElements are null if no path was found +Pathfinding.NNConstraint.Default nnconstraint.html#Default The default NNConstraint. \n\nEquivalent to new NNConstraint (). This NNConstraint has settings which works for most, it only finds walkable nodes and it constrains distance set by A* Inspector -> Settings -> Max Nearest Node Distance\n\n[more in online documentation] +Pathfinding.NNConstraint.None nnconstraint.html#None Returns a constraint which does not filter the results. +Pathfinding.NNConstraint.Walkable nnconstraint.html#Walkable An NNConstraint which filters out unwalkable nodes. \n\nThis is the most commonly used NNConstraint.\n\nIt also constrains the nearest node to be within the distance set by A* Inspector -> Settings -> Max Nearest Node Distance +Pathfinding.NNConstraint.area nnconstraint.html#area Area ID to constrain to. \n\nWill not affect anything if less than 0 (zero) or if constrainArea is false +Pathfinding.NNConstraint.constrainArea nnconstraint.html#constrainArea Only treat nodes in the area area as suitable. \n\nDoes not affect anything if area is less than 0 (zero) +Pathfinding.NNConstraint.constrainDistance nnconstraint.html#constrainDistance Constrain distance to node. \n\nUses distance from AstarPath.maxNearestNodeDistance. If this is false, it will completely ignore the distance limit.\n\nIf there are no suitable nodes within the distance limit then the search will terminate with a null node as a result. \n\n[more in online documentation] +Pathfinding.NNConstraint.constrainTags nnconstraint.html#constrainTags Sets if tags should be constrained. \n\n[more in online documentation] +Pathfinding.NNConstraint.constrainWalkability nnconstraint.html#constrainWalkability Constrain the search to only walkable or unwalkable nodes depending on walkable. +Pathfinding.NNConstraint.distanceMetric nnconstraint.html#distanceMetric Determines how to measure distances to the navmesh. \n\nThe default is a euclidean distance, which works well for most things.\n\n[more in online documentation] +Pathfinding.NNConstraint.distanceXZ nnconstraint.html#distanceXZ if available, do an XZ check instead of checking on all axes. \n\nThe navmesh/recast graph as well as the grid/layered grid graph supports this.\n\nThis can be important on sloped surfaces. See the image below in which the closest point for each blue point is queried for: <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.NNConstraint.graphMask nnconstraint.html#graphMask Graphs treated as valid to search on. \n\nThis is a bitmask meaning that bit 0 specifies whether or not the first graph in the graphs list should be able to be included in the search, bit 1 specifies whether or not the second graph should be included and so on. <b>[code in online documentation]</b><b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.NNConstraint.tags nnconstraint.html#tags Nodes which have any of these tags set are suitable. \n\nThis is a bitmask, i.e bit 0 indicates that tag 0 is good, bit 3 indicates tag 3 is good etc. \n\n[more in online documentation] +Pathfinding.NNConstraint.walkable nnconstraint.html#walkable Only search for walkable or unwalkable nodes if constrainWalkability is enabled. \n\nIf true, only walkable nodes will be searched for, otherwise only unwalkable nodes will be searched for. Does not affect anything if constrainWalkability if false. +Pathfinding.NNInfo.Empty nninfo.html#Empty +Pathfinding.NNInfo.clampedPosition nninfo.html#clampedPosition Closest point on the navmesh. \n\n[more in online documentation] +Pathfinding.NNInfo.distanceCostSqr nninfo.html#distanceCostSqr Cost for picking this node as the closest node. \n\nThis is typically the squared distance from the query point to position.\n\nHowever, it may be different if the NNConstraint used a different cost function. For example, if NNConstraint.distanceMetric is DistanceMetric.ClosestAsSeenFromAbove(), then this value will be the squared distance in the XZ plane.\n\nThis value is not guaranteed to be smaller or equal to the squared euclidean distance from the query point to position. In particular for a navmesh/recast graph with a DistanceMetric.ClosestAsSeenFromAboveSoft NNConstraint it may be slightly greater for some configurations. This is fine because we are only using this value for the rough distance limit performanced by AstarPath.maxNearestNodeDistance, and it's not a problem if it is slightly inaccurate.\n\n[more in online documentation]\nIf node is null, then this value is positive infinity. +Pathfinding.NNInfo.node nninfo.html#node Closest node. \n\nMay be null if there was no node which satisfied all constraints of the search. +Pathfinding.NNInfo.position nninfo.html#position Closest point on the navmesh. \n\nThis is the query position clamped to the closest point on the node.\n\nIf node is null, then this value is (+inf, +inf, +inf). +Pathfinding.NavGraph.SerializedEditorSettings navgraph.html#SerializedEditorSettings +Pathfinding.NavGraph.active navgraph.html#active Reference to the AstarPath object in the scene. +Pathfinding.NavGraph.bounds navgraph.html#bounds World bounding box for the graph. \n\nThis always contains the whole graph.\n\n[more in online documentation]\nIt is ok for a graph type to return an infinitely large bounding box, but this may make some operations less efficient. The point graph will always return an infinitely large bounding box. +Pathfinding.NavGraph.drawGizmos navgraph.html#drawGizmos Enable to draw gizmos in the Unity scene view. \n\nIn the inspector this value corresponds to the state of the 'eye' icon in the top left corner of every graph inspector. +Pathfinding.NavGraph.exists navgraph.html#exists True if the graph exists, false if it has been destroyed. +Pathfinding.NavGraph.graphIndex navgraph.html#graphIndex Index of the graph, used for identification purposes. +Pathfinding.NavGraph.guid navgraph.html#guid Used as an ID of the graph, considered to be unique. \n\n[more in online documentation] +Pathfinding.NavGraph.infoScreenOpen navgraph.html#infoScreenOpen Used in the editor to check if the info screen is open. \n\nShould be inside UNITY_EDITOR only #ifs but just in case anyone tries to serialize a NavGraph instance using Unity, I have left it like this as it would otherwise cause a crash when building. Version 3.0.8.1 was released because of this bug only +Pathfinding.NavGraph.initialPenalty navgraph.html#initialPenalty Default penalty to apply to all nodes. \n\n[more in online documentation] +Pathfinding.NavGraph.isScanned navgraph.html#isScanned True if the graph has been scanned and contains nodes. \n\nGraphs are typically scanned when the game starts, but they can also be scanned manually.\n\nIf a graph has not been scanned, it does not contain any nodes and it not possible to use it for pathfinding.\n\n[more in online documentation] +Pathfinding.NavGraph.name navgraph.html#name Name of the graph. \n\nCan be set in the unity editor +Pathfinding.NavGraph.open navgraph.html#open Is the graph open in the editor. +Pathfinding.NavGraph.persistent navgraph.html#persistent True if the graph will be included when serializing graph data. \n\nIf false, the graph will be ignored when saving graph data.\n\nMost graphs are persistent, but the LinkGraph is not persistent because links are always re-created from components at runtime. +Pathfinding.NavGraph.serializedEditorSettings navgraph.html#serializedEditorSettings Used in the Unity editor to store serialized settings for graph inspectors. +Pathfinding.NavGraph.showInInspector navgraph.html#showInInspector True if the graph should be visible in the editor. \n\nFalse is used for some internal graph types that users don't have to worry about. +Pathfinding.NavMeshGraph.MaxTileConnectionEdgeDistance navmeshgraph.html#MaxTileConnectionEdgeDistance +Pathfinding.NavMeshGraph.NavMeshGraphScanPromise.emptyGraph navmeshgraphscanpromise.html#emptyGraph +Pathfinding.NavMeshGraph.NavMeshGraphScanPromise.forcedBoundsSize navmeshgraphscanpromise.html#forcedBoundsSize +Pathfinding.NavMeshGraph.NavMeshGraphScanPromise.graph navmeshgraphscanpromise.html#graph +Pathfinding.NavMeshGraph.NavMeshGraphScanPromise.tileRect navmeshgraphscanpromise.html#tileRect +Pathfinding.NavMeshGraph.NavMeshGraphScanPromise.tiles navmeshgraphscanpromise.html#tiles +Pathfinding.NavMeshGraph.NavMeshGraphScanPromise.transform navmeshgraphscanpromise.html#transform +Pathfinding.NavMeshGraph.NavMeshGraphUpdatePromise.graph navmeshgraphupdatepromise.html#graph +Pathfinding.NavMeshGraph.NavMeshGraphUpdatePromise.graphUpdates navmeshgraphupdatepromise.html#graphUpdates +Pathfinding.NavMeshGraph.NavmeshCuttingCharacterRadius navmeshgraph.html#NavmeshCuttingCharacterRadius +Pathfinding.NavMeshGraph.RecalculateNormals navmeshgraph.html#RecalculateNormals +Pathfinding.NavMeshGraph.TileWorldSizeX navmeshgraph.html#TileWorldSizeX +Pathfinding.NavMeshGraph.TileWorldSizeZ navmeshgraph.html#TileWorldSizeZ +Pathfinding.NavMeshGraph.bounds navmeshgraph.html#bounds World bounding box for the graph. \n\nThis always contains the whole graph.\n\n[more in online documentation]\nIf no mesh has been assigned, this will return a zero sized bounding box at the origin.\n\n <b>[image in online documentation]</b> +Pathfinding.NavMeshGraph.cachedSourceMeshBoundsMin navmeshgraph.html#cachedSourceMeshBoundsMin Cached bounding box minimum of sourceMesh. \n\nThis is important when the graph has been saved to a file and is later loaded again, but the original mesh does not exist anymore (or has been moved). In that case we still need to be able to find the bounding box since the CalculateTransform method uses it. +Pathfinding.NavMeshGraph.navmeshCuttingCharacterRadius navmeshgraph.html#navmeshCuttingCharacterRadius Radius to use when expanding navmesh cuts. \n\n[more in online documentation] +Pathfinding.NavMeshGraph.offset navmeshgraph.html#offset Offset in world space. +Pathfinding.NavMeshGraph.recalculateNormals navmeshgraph.html#recalculateNormals Determines how normals are calculated. \n\nDisable for spherical graphs or other complicated surfaces that allow the agents to e.g walk on walls or ceilings.\n\nBy default the normals of the mesh will be flipped so that they point as much as possible in the upwards direction. The normals are important when connecting adjacent nodes. Two adjacent nodes will only be connected if they are oriented the same way. This is particularly important if you have a navmesh on the walls or even on the ceiling of a room. Or if you are trying to make a spherical navmesh. If you do one of those things then you should set disable this setting and make sure the normals in your source mesh are properly set.\n\nIf you for example take a look at the image below. In the upper case then the nodes on the bottom half of the mesh haven't been connected with the nodes on the upper half because the normals on the lower half will have been modified to point inwards (as that is the direction that makes them face upwards the most) while the normals on the upper half point outwards. This causes the nodes to not connect properly along the seam. When this option is set to false instead the nodes are connected properly as in the original mesh all normals point outwards. <b>[image in online documentation]</b>\n\nThe default value of this field is true to reduce the risk for errors in the common case. If a mesh is supplied that has all normals pointing downwards and this option is false, then some methods like PointOnNavmesh will not work correctly as they assume that the normals point upwards. For a more complicated surface like a spherical graph those methods make no sense anyway as there is no clear definition of what it means to be "inside" a triangle when there is no clear up direction. +Pathfinding.NavMeshGraph.rotation navmeshgraph.html#rotation Rotation in degrees. +Pathfinding.NavMeshGraph.scale navmeshgraph.html#scale Scale of the graph. +Pathfinding.NavMeshGraph.sourceMesh navmeshgraph.html#sourceMesh Mesh to construct navmesh from. +Pathfinding.NavmeshAdd.Center navmeshadd.html#Center +Pathfinding.NavmeshAdd.GizmoColor navmeshadd.html#GizmoColor +Pathfinding.NavmeshAdd.MeshType navmeshadd.html#MeshType +Pathfinding.NavmeshAdd.center navmeshadd.html#center +Pathfinding.NavmeshAdd.gizmoBuffer navmeshadd.html#gizmoBuffer +Pathfinding.NavmeshAdd.mesh navmeshadd.html#mesh Custom mesh to use. \n\nThe contour(s) of the mesh will be extracted. If you get the "max perturbations" error when cutting with this, check the normals on the mesh. They should all point in the same direction. Try flipping them if that does not help. +Pathfinding.NavmeshAdd.meshScale navmeshadd.html#meshScale +Pathfinding.NavmeshAdd.rectangleSize navmeshadd.html#rectangleSize Size of the rectangle. +Pathfinding.NavmeshAdd.tr navmeshadd.html#tr cached transform component +Pathfinding.NavmeshAdd.tris navmeshadd.html#tris Cached triangles. +Pathfinding.NavmeshAdd.type navmeshadd.html#type +Pathfinding.NavmeshAdd.updateDistance navmeshadd.html#updateDistance Distance between positions to require an update of the navmesh. \n\nA smaller distance gives better accuracy, but requires more updates when moving the object over time, so it is often slower. +Pathfinding.NavmeshAdd.updateRotationDistance navmeshadd.html#updateRotationDistance How many degrees rotation that is required for an update to the navmesh. \n\nShould be between 0 and 180. +Pathfinding.NavmeshAdd.useRotationAndScale navmeshadd.html#useRotationAndScale Includes rotation and scale in calculations. \n\nThis is slower since a lot more matrix multiplications are needed but gives more flexibility. +Pathfinding.NavmeshAdd.verts navmeshadd.html#verts Cached vertices. +Pathfinding.NavmeshBase.LinecastShapeEdgeLookup navmeshbase.html#LinecastShapeEdgeLookup Used to optimize linecasts by precomputing some values. +Pathfinding.NavmeshBase.MaxTileConnectionEdgeDistance navmeshbase.html#MaxTileConnectionEdgeDistance Maximum (vertical) distance between the sides of two nodes for them to be connected across a tile edge. \n\nWhen tiles are connected to each other, the nodes sometimes do not line up perfectly so some allowance must be made to allow tiles that do not match exactly to be connected with each other. +Pathfinding.NavmeshBase.NNConstraintNoneXZ navmeshbase.html#NNConstraintNoneXZ Cached NNConstraint.None with distanceXZ=true to reduce allocations. +Pathfinding.NavmeshBase.NavmeshCuttingCharacterRadius navmeshbase.html#NavmeshCuttingCharacterRadius +Pathfinding.NavmeshBase.OnRecalculatedTiles navmeshbase.html#OnRecalculatedTiles Called when tiles have been completely recalculated. \n\nThis is called after scanning the graph and after performing graph updates that completely recalculate tiles (not ones that simply modify e.g penalties). It is not called after NavmeshCut updates. +Pathfinding.NavmeshBase.RecalculateNormals navmeshbase.html#RecalculateNormals Determines how normals are calculated. \n\nDisable for spherical graphs or other complicated surfaces that allow the agents to e.g walk on walls or ceilings.\n\nBy default the normals of the mesh will be flipped so that they point as much as possible in the upwards direction. The normals are important when connecting adjacent nodes. Two adjacent nodes will only be connected if they are oriented the same way. This is particularly important if you have a navmesh on the walls or even on the ceiling of a room. Or if you are trying to make a spherical navmesh. If you do one of those things then you should set disable this setting and make sure the normals in your source mesh are properly set.\n\nIf you for example take a look at the image below. In the upper case then the nodes on the bottom half of the mesh haven't been connected with the nodes on the upper half because the normals on the lower half will have been modified to point inwards (as that is the direction that makes them face upwards the most) while the normals on the upper half point outwards. This causes the nodes to not connect properly along the seam. When this option is set to false instead the nodes are connected properly as in the original mesh all normals point outwards. <b>[image in online documentation]</b>\n\nThe default value of this field is true to reduce the risk for errors in the common case. If a mesh is supplied that has all normals pointing downwards and this option is false, then some methods like PointOnNavmesh will not work correctly as they assume that the normals point upwards. For a more complicated surface like a spherical graph those methods make no sense anyway as there is no clear definition of what it means to be "inside" a triangle when there is no clear up direction. +Pathfinding.NavmeshBase.TileIndexMask navmeshbase.html#TileIndexMask +Pathfinding.NavmeshBase.TileIndexOffset navmeshbase.html#TileIndexOffset +Pathfinding.NavmeshBase.TileWorldSizeX navmeshbase.html#TileWorldSizeX Size of a tile in world units along the X axis. +Pathfinding.NavmeshBase.TileWorldSizeZ navmeshbase.html#TileWorldSizeZ Size of a tile in world units along the Z axis. +Pathfinding.NavmeshBase.VertexIndexMask navmeshbase.html#VertexIndexMask +Pathfinding.NavmeshBase.batchNodesToDestroy navmeshbase.html#batchNodesToDestroy List of nodes that are going to be destroyed as part of a batch update. +Pathfinding.NavmeshBase.batchTileUpdate navmeshbase.html#batchTileUpdate Currently updating tiles in a batch. +Pathfinding.NavmeshBase.batchUpdatedTiles navmeshbase.html#batchUpdatedTiles List of tiles updating during batch. +Pathfinding.NavmeshBase.enableNavmeshCutting navmeshbase.html#enableNavmeshCutting Should navmesh cuts affect this graph. \n\n[more in online documentation] +Pathfinding.NavmeshBase.forcedBoundsSize navmeshbase.html#forcedBoundsSize Size of the bounding box. +Pathfinding.NavmeshBase.isScanned navmeshbase.html#isScanned +Pathfinding.NavmeshBase.navmeshUpdateData navmeshbase.html#navmeshUpdateData Handles navmesh cutting. \n\n[more in online documentation] +Pathfinding.NavmeshBase.nearestSearchOnlyXZ navmeshbase.html#nearestSearchOnlyXZ Perform nearest node searches in XZ space only. \n\nRecomended for single-layered environments. Faster but can be inaccurate esp. in multilayered contexts. You should not use this if the graph is rotated since then the XZ plane no longer corresponds to the ground plane.\n\nThis can be important on sloped surfaces. See the image below in which the closest point for each blue point is queried for: <b>[image in online documentation]</b>\n\nYou can also control this using a field on an NNConstraint object.\n\n[more in online documentation] +Pathfinding.NavmeshBase.nodeRecyclingHashBuffer navmeshbase.html#nodeRecyclingHashBuffer Temporary buffer used in PrepareNodeRecycling. +Pathfinding.NavmeshBase.showMeshOutline navmeshbase.html#showMeshOutline Show an outline of the polygons in the Unity Editor. +Pathfinding.NavmeshBase.showMeshSurface navmeshbase.html#showMeshSurface Show the surface of the navmesh. +Pathfinding.NavmeshBase.showNodeConnections navmeshbase.html#showNodeConnections Show the connections between the polygons in the Unity Editor. +Pathfinding.NavmeshBase.tileXCount navmeshbase.html#tileXCount Number of tiles along the X-axis. +Pathfinding.NavmeshBase.tileZCount navmeshbase.html#tileZCount Number of tiles along the Z-axis. +Pathfinding.NavmeshBase.tiles navmeshbase.html#tiles All tiles. \n\n[more in online documentation] +Pathfinding.NavmeshBase.transform navmeshbase.html#transform Determines how the graph transforms graph space to world space. \n\n[more in online documentation] +Pathfinding.NavmeshClamp.prevNode navmeshclamp.html#prevNode +Pathfinding.NavmeshClamp.prevPos navmeshclamp.html#prevPos +Pathfinding.NavmeshClipper.OnDisableCallback navmeshclipper.html#OnDisableCallback Called every time a NavmeshCut/NavmeshAdd component is disabled. +Pathfinding.NavmeshClipper.OnEnableCallback navmeshclipper.html#OnEnableCallback Called every time a NavmeshCut/NavmeshAdd component is enabled. +Pathfinding.NavmeshClipper.all navmeshclipper.html#all +Pathfinding.NavmeshClipper.allEnabled navmeshclipper.html#allEnabled All navmesh clipper components in the scene. \n\nNot ordered in any particular way. \n\n[more in online documentation] +Pathfinding.NavmeshClipper.graphMask navmeshclipper.html#graphMask Which graphs that are affected by this component. \n\nYou can use this to make a graph ignore a particular navmesh cut altogether.\n\nNote that navmesh cuts can only affect navmesh/recast graphs.\n\nIf you change this field during runtime you must disable the component and enable it again for the changes to be detected.\n\n[more in online documentation] +Pathfinding.NavmeshClipper.listIndex navmeshclipper.html#listIndex +Pathfinding.NavmeshCut.Contour.contour contour.html#contour +Pathfinding.NavmeshCut.Contour.ymax contour.html#ymax +Pathfinding.NavmeshCut.Contour.ymin contour.html#ymin +Pathfinding.NavmeshCut.ContourBurst.endIndex contourburst.html#endIndex +Pathfinding.NavmeshCut.ContourBurst.startIndex contourburst.html#startIndex +Pathfinding.NavmeshCut.ContourBurst.ymax contourburst.html#ymax +Pathfinding.NavmeshCut.ContourBurst.ymin contourburst.html#ymin +Pathfinding.NavmeshCut.GizmoColor navmeshcut.html#GizmoColor +Pathfinding.NavmeshCut.GizmoColor2 navmeshcut.html#GizmoColor2 +Pathfinding.NavmeshCut.MeshType navmeshcut.html#MeshType +Pathfinding.NavmeshCut.RadiusExpansionMode navmeshcut.html#RadiusExpansionMode +Pathfinding.NavmeshCut.center navmeshcut.html#center +Pathfinding.NavmeshCut.circleRadius navmeshcut.html#circleRadius Radius of the circle. +Pathfinding.NavmeshCut.circleResolution navmeshcut.html#circleResolution Number of vertices on the circle. +Pathfinding.NavmeshCut.contourTransformationMatrix navmeshcut.html#contourTransformationMatrix +Pathfinding.NavmeshCut.cutsAddedGeom navmeshcut.html#cutsAddedGeom Cuts geometry added by a NavmeshAdd component. \n\nYou rarely need to change this +Pathfinding.NavmeshCut.edges navmeshcut.html#edges Cached variable, to avoid allocations. +Pathfinding.NavmeshCut.height navmeshcut.html#height The cut will be extruded to this height. +Pathfinding.NavmeshCut.isDual navmeshcut.html#isDual Only makes a split in the navmesh, but does not remove the geometry to make a hole. \n\nThis is slower than a normal cut +Pathfinding.NavmeshCut.lastMesh navmeshcut.html#lastMesh +Pathfinding.NavmeshCut.mesh navmeshcut.html#mesh Custom mesh to use. \n\nThe contour(s) of the mesh will be extracted. If you get the "max perturbations" error when cutting with this, check the normals on the mesh. They should all point in the same direction. Try flipping them if that does not help.\n\nThis mesh should only be a 2D surface, not a volume. +Pathfinding.NavmeshCut.meshContourVertices navmeshcut.html#meshContourVertices +Pathfinding.NavmeshCut.meshContours navmeshcut.html#meshContours +Pathfinding.NavmeshCut.meshScale navmeshcut.html#meshScale Scale of the custom mesh, if used. +Pathfinding.NavmeshCut.pointers navmeshcut.html#pointers Cached variable, to avoid allocations. +Pathfinding.NavmeshCut.radiusExpansionMode navmeshcut.html#radiusExpansionMode If the cut should be expanded by the agent radius or not. \n\nSee RadiusExpansionMode for more details. +Pathfinding.NavmeshCut.rectangleSize navmeshcut.html#rectangleSize Size of the rectangle. +Pathfinding.NavmeshCut.tr navmeshcut.html#tr cached transform component +Pathfinding.NavmeshCut.type navmeshcut.html#type Shape of the cut. +Pathfinding.NavmeshCut.updateDistance navmeshcut.html#updateDistance How much the cut must move before the navmesh is updated. \n\nA smaller distance gives better accuracy, but requires more updates when moving the object over time, so it is often slower.\n\nEven if the graph update itself is fast, having a low value can make agents have to recalculate their paths a lot more often, leading to lower performance. +Pathfinding.NavmeshCut.updateRotationDistance navmeshcut.html#updateRotationDistance How many degrees the object must rotate before the navmesh is updated. \n\nShould be between 0 and 180. +Pathfinding.NavmeshCut.useRotationAndScale navmeshcut.html#useRotationAndScale Includes rotation and scale in calculations. \n\nIf this is disabled, the object's rotation and scale is not taken into account when determining the shape of the cut.\n\nEnabling this is a bit slower, since a lot more matrix multiplications are needed. +Pathfinding.NavmeshCutEditor.MeshTypeOptions navmeshcuteditor.html#MeshTypeOptions +Pathfinding.NavmeshCutJobs.AngleComparator.origin anglecomparator.html#origin +Pathfinding.NavmeshCutJobs.BoxCorners navmeshcutjobs.html#BoxCorners +Pathfinding.NavmeshCutJobs.JobCalculateContour.circleRadius jobcalculatecontour.html#circleRadius +Pathfinding.NavmeshCutJobs.JobCalculateContour.circleResolution jobcalculatecontour.html#circleResolution +Pathfinding.NavmeshCutJobs.JobCalculateContour.height jobcalculatecontour.html#height +Pathfinding.NavmeshCutJobs.JobCalculateContour.localToWorldMatrix jobcalculatecontour.html#localToWorldMatrix +Pathfinding.NavmeshCutJobs.JobCalculateContour.matrix jobcalculatecontour.html#matrix +Pathfinding.NavmeshCutJobs.JobCalculateContour.meshContourVertices jobcalculatecontour.html#meshContourVertices +Pathfinding.NavmeshCutJobs.JobCalculateContour.meshContours jobcalculatecontour.html#meshContours +Pathfinding.NavmeshCutJobs.JobCalculateContour.meshScale jobcalculatecontour.html#meshScale +Pathfinding.NavmeshCutJobs.JobCalculateContour.meshType jobcalculatecontour.html#meshType +Pathfinding.NavmeshCutJobs.JobCalculateContour.outputContours jobcalculatecontour.html#outputContours +Pathfinding.NavmeshCutJobs.JobCalculateContour.outputVertices jobcalculatecontour.html#outputVertices +Pathfinding.NavmeshCutJobs.JobCalculateContour.radiusMargin jobcalculatecontour.html#radiusMargin +Pathfinding.NavmeshCutJobs.JobCalculateContour.rectangleSize jobcalculatecontour.html#rectangleSize +Pathfinding.NavmeshCutJobsCached.CalculateContourBurst navmeshcutjobscached.html#CalculateContourBurst Cached delegate to a burst function pointer for running NavmeshCutJobs.CalculateContour. +Pathfinding.NavmeshEdges.JobCalculateObstacles.MarkerBBox jobcalculateobstacles.html#MarkerBBox +Pathfinding.NavmeshEdges.JobCalculateObstacles.MarkerCollect jobcalculateobstacles.html#MarkerCollect +Pathfinding.NavmeshEdges.JobCalculateObstacles.MarkerObstacles jobcalculateobstacles.html#MarkerObstacles +Pathfinding.NavmeshEdges.JobCalculateObstacles.MarkerTrace jobcalculateobstacles.html#MarkerTrace +Pathfinding.NavmeshEdges.JobCalculateObstacles.allocationLock jobcalculateobstacles.html#allocationLock +Pathfinding.NavmeshEdges.JobCalculateObstacles.bounds jobcalculateobstacles.html#bounds +Pathfinding.NavmeshEdges.JobCalculateObstacles.dirtyHierarchicalNodes jobcalculateobstacles.html#dirtyHierarchicalNodes +Pathfinding.NavmeshEdges.JobCalculateObstacles.hGraphGC jobcalculateobstacles.html#hGraphGC +Pathfinding.NavmeshEdges.JobCalculateObstacles.obstacleVertexGroups jobcalculateobstacles.html#obstacleVertexGroups +Pathfinding.NavmeshEdges.JobCalculateObstacles.obstacleVertices jobcalculateobstacles.html#obstacleVertices +Pathfinding.NavmeshEdges.JobCalculateObstacles.obstacles jobcalculateobstacles.html#obstacles +Pathfinding.NavmeshEdges.JobRecalculateObstaclesBatchCount navmeshedges.html#JobRecalculateObstaclesBatchCount +Pathfinding.NavmeshEdges.JobResizeObstacles.numHierarchicalNodes jobresizeobstacles.html#numHierarchicalNodes +Pathfinding.NavmeshEdges.JobResizeObstacles.obstacles jobresizeobstacles.html#obstacles +Pathfinding.NavmeshEdges.NavmeshBorderData.hierarhicalNodeData navmeshborderdata.html#hierarhicalNodeData +Pathfinding.NavmeshEdges.NavmeshBorderData.obstacleData navmeshborderdata.html#obstacleData +Pathfinding.NavmeshEdges.allocationLock navmeshedges.html#allocationLock +Pathfinding.NavmeshEdges.gizmoVersion navmeshedges.html#gizmoVersion +Pathfinding.NavmeshEdges.hierarchicalGraph navmeshedges.html#hierarchicalGraph +Pathfinding.NavmeshEdges.obstacleData navmeshedges.html#obstacleData +Pathfinding.NavmeshEdges.rwLock navmeshedges.html#rwLock +Pathfinding.NavmeshPrefab.SerializeJob.output serializejob.html#output +Pathfinding.NavmeshPrefab.SerializeJob.tileMeshesPromise serializejob.html#tileMeshesPromise +Pathfinding.NavmeshPrefab.SerializedOutput.Progress serializedoutput.html#Progress +Pathfinding.NavmeshPrefab.SerializedOutput.arena serializedoutput.html#arena +Pathfinding.NavmeshPrefab.SerializedOutput.data serializedoutput.html#data +Pathfinding.NavmeshPrefab.SerializedOutput.promise serializedoutput.html#promise +Pathfinding.NavmeshPrefab.applyOnStart navmeshprefab.html#applyOnStart If true, the tiles stored in this prefab will be loaded and applied to the first recast graph in the scene when this component is enabled. \n\nIf false, you will have to call the Apply(RecastGraph) method manually.\n\nIf this component is disabled and then enabled again, the tiles will be reloaded. +Pathfinding.NavmeshPrefab.bounds navmeshprefab.html#bounds Bounding box for the navmesh to be stored in this prefab. \n\nShould be a multiple of the tile size of the associated recast graph.\n\n[more in online documentation] +Pathfinding.NavmeshPrefab.removeTilesWhenDisabled navmeshprefab.html#removeTilesWhenDisabled If true, the tiles that this prefab loaded into the graph will be removed when this component is disabled or destroyed. \n\nIf false, the tiles will remain in the graph. +Pathfinding.NavmeshPrefab.serializedNavmesh navmeshprefab.html#serializedNavmesh Reference to the serialized tile data. +Pathfinding.NavmeshPrefab.startHasRun navmeshprefab.html#startHasRun +Pathfinding.NavmeshPrefabEditor.pendingScanProgressId navmeshprefabeditor.html#pendingScanProgressId +Pathfinding.NodeLink.End nodelink.html#End +Pathfinding.NodeLink.Start nodelink.html#Start +Pathfinding.NodeLink.costFactor nodelink.html#costFactor The connection will be this times harder/slower to traverse. \n\nNote that values lower than one will not always make the pathfinder choose this path instead of another path even though this one should lead to a lower total cost unless you also adjust the Heuristic Scale in A* Inspector -> Settings -> Pathfinding or disable the heuristic altogether. +Pathfinding.NodeLink.deleteConnection nodelink.html#deleteConnection Delete existing connection instead of adding one. +Pathfinding.NodeLink.end nodelink.html#end End position of the link. +Pathfinding.NodeLink.oneWay nodelink.html#oneWay Make a one-way connection. +Pathfinding.NodeLink2.EndTransform nodelink2.html#EndTransform +Pathfinding.NodeLink2.GizmosColor nodelink2.html#GizmosColor +Pathfinding.NodeLink2.GizmosColorSelected nodelink2.html#GizmosColorSelected +Pathfinding.NodeLink2.StartTransform nodelink2.html#StartTransform +Pathfinding.NodeLink2.costFactor nodelink2.html#costFactor The connection will be this times harder/slower to traverse. \n\nA cost factor of 1 means that the link is equally expensive as moving the same distance on the normal navmesh. But a cost factor greater than 1 means that it is proportionally more expensive.\n\nYou should not use a cost factor less than 1 unless you also change the AstarPath.heuristicScale field (A* Inspector -> Settings -> Pathfinding) to at most the minimum cost factor that you use anywhere in the scene (or disable the heuristic altogether). This is because the pathfinding algorithm assumes that paths are at least as costly as walking just the straight line distance to the target, and if you use a cost factor less than 1, that assumption is no longer true. What then happens is that the pathfinding search may ignore some links because it doesn't even think to search in that direction, even if they would have lead to a lower path cost.\n\n[more in online documentation]\nRead more about this at <a href="https://en.wikipedia.org/wiki/Admissible_heuristic">https://en.wikipedia.org/wiki/Admissible_heuristic</a>. +Pathfinding.NodeLink2.end nodelink2.html#end End position of the link. +Pathfinding.NodeLink2.graphMask nodelink2.html#graphMask Which graphs this link is allowed to connect. \n\nThe link will always connect the nodes closest to the start and end points on the graphs that it is allowed to connect. +Pathfinding.NodeLink2.isActive nodelink2.html#isActive True if the link is connected to the graph. \n\nThis will be true if the link has been successfully connected to the graph, and false if it either has failed, or if the component/gameobject is disabled.\n\nWhen the component is enabled, the link will be scheduled to be added to the graph, it will not take effect immediately. This means that this property will return false until the next time graph updates are processed (usually later this frame, or next frame). To ensure the link is refreshed immediately, you can call AstarPath.active.FlushWorkItems. +Pathfinding.NodeLink2.linkSource nodelink2.html#linkSource +Pathfinding.NodeLink2.onTraverseOffMeshLink nodelink2.html#onTraverseOffMeshLink Callback to be called when an agent starts traversing an off-mesh link. \n\nThe handler will be called when the agent starts traversing an off-mesh link. It allows you to to control the agent for the full duration of the link traversal.\n\nUse the passed context struct to get information about the link and to control the agent.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation]\nYou can alternatively set the corresponding property property on the agent ( FollowerEntity.onTraverseOffMeshLink) to specify a callback for a all off-mesh links.\n\n[more in online documentation]\n\n\n\n[more in online documentation] +Pathfinding.NodeLink2.onTraverseOffMeshLinkHandler nodelink2.html#onTraverseOffMeshLinkHandler +Pathfinding.NodeLink2.oneWay nodelink2.html#oneWay Make a one-way connection. +Pathfinding.NodeLink2.pathfindingTag nodelink2.html#pathfindingTag The tag to apply to the link. \n\nThis can be used to exclude certain agents from using the link, or make it more expensive to use.\n\n[more in online documentation] +Pathfinding.NodeLink2Editor.HandlerContent nodelink2editor.html#HandlerContent +Pathfinding.NodeLink3.EndNode nodelink3.html#EndNode +Pathfinding.NodeLink3.EndTransform nodelink3.html#EndTransform +Pathfinding.NodeLink3.GizmosColor nodelink3.html#GizmosColor +Pathfinding.NodeLink3.GizmosColorSelected nodelink3.html#GizmosColorSelected +Pathfinding.NodeLink3.StartNode nodelink3.html#StartNode +Pathfinding.NodeLink3.StartTransform nodelink3.html#StartTransform +Pathfinding.NodeLink3.clamped1 nodelink3.html#clamped1 +Pathfinding.NodeLink3.clamped2 nodelink3.html#clamped2 +Pathfinding.NodeLink3.connectedNode1 nodelink3.html#connectedNode1 +Pathfinding.NodeLink3.connectedNode2 nodelink3.html#connectedNode2 +Pathfinding.NodeLink3.costFactor nodelink3.html#costFactor The connection will be this times harder/slower to traverse. \n\nNote that values lower than one will not always make the pathfinder choose this path instead of another path even though this one should lead to a lower total cost unless you also adjust the Heuristic Scale in A* Inspector -> Settings -> Pathfinding or disable the heuristic altogether. +Pathfinding.NodeLink3.end nodelink3.html#end End position of the link. +Pathfinding.NodeLink3.endNode nodelink3.html#endNode +Pathfinding.NodeLink3.postScanCalled nodelink3.html#postScanCalled +Pathfinding.NodeLink3.reference nodelink3.html#reference +Pathfinding.NodeLink3.startNode nodelink3.html#startNode +Pathfinding.NodeLink3Node.link nodelink3node.html#link +Pathfinding.NodeLink3Node.portalA nodelink3node.html#portalA +Pathfinding.NodeLink3Node.portalB nodelink3node.html#portalB +Pathfinding.NumNeighbours pathfinding.html#NumNeighbours Number of neighbours for a single grid node. \n\n[more in online documentation] +Pathfinding.OffMeshLinks.Anchor.center anchor.html#center Where the link connects to the navmesh. +Pathfinding.OffMeshLinks.Anchor.point1 anchor.html#point1 First point on the segment that makes up this anchor. +Pathfinding.OffMeshLinks.Anchor.point2 anchor.html#point2 Second point on the segment that makes up this anchor. +Pathfinding.OffMeshLinks.Anchor.rotation anchor.html#rotation Rotation that the character should align itself with when traversing the link. +Pathfinding.OffMeshLinks.Anchor.width anchor.html#width Width of the link. \n\n[more in online documentation] +Pathfinding.OffMeshLinks.Directionality offmeshlinks.html#Directionality Determines how a link is connected in the graph. +Pathfinding.OffMeshLinks.OffMeshLinkCombined.concrete offmeshlinkcombined.html#concrete +Pathfinding.OffMeshLinks.OffMeshLinkCombined.source offmeshlinkcombined.html#source +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.component offmeshlinkconcrete.html#component The Component associated with this link. \n\nTypically this will be a NodeLink2 component. But users can also create their own components and fill out this field as appropriate.\n\nThis field is not used for anything by the pathfinding system itself, it is only used to make it easier for users to find the component associated with a link.\n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.costFactor offmeshlinkconcrete.html#costFactor +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.directionality offmeshlinkconcrete.html#directionality +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.end offmeshlinkconcrete.html#end The end of the link. +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.endLinkNode offmeshlinkconcrete.html#endLinkNode +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.endNodes offmeshlinkconcrete.html#endNodes +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.gameObject offmeshlinkconcrete.html#gameObject The GameObject associated with this link. \n\nThis field is not used for anything by the pathfinding system itself, it is only used to make it easier for users to find the GameObject associated with a link.\n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.handler offmeshlinkconcrete.html#handler +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.source offmeshlinkconcrete.html#source +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.staleConnections offmeshlinkconcrete.html#staleConnections +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.start offmeshlinkconcrete.html#start The start of the link. +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.startLinkNode offmeshlinkconcrete.html#startLinkNode +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.startNodes offmeshlinkconcrete.html#startNodes +Pathfinding.OffMeshLinks.OffMeshLinkConcrete.tag offmeshlinkconcrete.html#tag Tag to apply to this link. \n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkSource.bounds offmeshlinksource.html#bounds Bounding box which encapsulates the link and any position on the navmesh it could possibly be connected to. \n\nThis is used to determine which links need to be recalculated when a graph update happens. +Pathfinding.OffMeshLinks.OffMeshLinkSource.component offmeshlinksource.html#component The Component associated with this link. \n\nTypically this will be a NodeLink2 component. But users can also create their own components and fill out this field as appropriate.\n\nThis field is not used for anything by the pathfinding system itself, it is only used to make it easier for users to find the component associated with a link.\n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkSource.costFactor offmeshlinksource.html#costFactor Multiplies the cost of traversing this link by this amount. +Pathfinding.OffMeshLinks.OffMeshLinkSource.directionality offmeshlinksource.html#directionality +Pathfinding.OffMeshLinks.OffMeshLinkSource.end offmeshlinksource.html#end The end of the link. +Pathfinding.OffMeshLinks.OffMeshLinkSource.gameObject offmeshlinksource.html#gameObject The GameObject associated with this link. \n\nThis field is not used for anything by the pathfinding system itself, it is only used to make it easier for users to find the GameObject associated with a link.\n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkSource.graphMask offmeshlinksource.html#graphMask Graph mask for which graphs the link is allowed to connect to. \n\nThe link's endpoints will be connected to the closest valid node on any graph that matches the mask. +Pathfinding.OffMeshLinks.OffMeshLinkSource.handler offmeshlinksource.html#handler +Pathfinding.OffMeshLinks.OffMeshLinkSource.maxSnappingDistance offmeshlinksource.html#maxSnappingDistance Maximum distance from the start/end points to the navmesh. \n\nIf the distance is greater than this, the link will not be connected to the navmesh. +Pathfinding.OffMeshLinks.OffMeshLinkSource.start offmeshlinksource.html#start The start of the link. +Pathfinding.OffMeshLinks.OffMeshLinkSource.status offmeshlinksource.html#status +Pathfinding.OffMeshLinks.OffMeshLinkSource.tag offmeshlinksource.html#tag Tag to apply to this link. \n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkSource.treeKey offmeshlinksource.html#treeKey +Pathfinding.OffMeshLinks.OffMeshLinkStatus offmeshlinks.html#OffMeshLinkStatus +Pathfinding.OffMeshLinks.OffMeshLinkTracer.component offmeshlinktracer.html#component The Component associated with this link. \n\nTypically this will be a NodeLink2 component. But users can also create their own components and fill out this field as appropriate.\n\nThis field is not used for anything by the pathfinding system itself, it is only used to make it easier for users to find the component associated with a link.\n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkTracer.gameObject offmeshlinktracer.html#gameObject The GameObject associated with this link. \n\nThis field is not used for anything by the pathfinding system itself, it is only used to make it easier for users to find the GameObject associated with a link.\n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkTracer.isReverse offmeshlinktracer.html#isReverse True if the agent is traversing the off-mesh link from original link's end to its start point. \n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkTracer.link offmeshlinktracer.html#link The off-mesh link that the agent is traversing. \n\n[more in online documentation] +Pathfinding.OffMeshLinks.OffMeshLinkTracer.relativeEnd offmeshlinktracer.html#relativeEnd The end point of the off-mesh link from the agent's perspective. \n\nThis is the point where the agent will finish traversing the off-mesh link, regardless of if the link is traversed from start to end or from end to start. +Pathfinding.OffMeshLinks.OffMeshLinkTracer.relativeStart offmeshlinktracer.html#relativeStart The start point of the off-mesh link from the agent's perspective. \n\nThis is the point where the agent starts traversing the off-mesh link, regardless of if the link is traversed from the start to end or from end to start. +Pathfinding.OffMeshLinks.astar offmeshlinks.html#astar +Pathfinding.OffMeshLinks.cachedNNConstraint offmeshlinks.html#cachedNNConstraint +Pathfinding.OffMeshLinks.pendingAdd offmeshlinks.html#pendingAdd +Pathfinding.OffMeshLinks.tree offmeshlinks.html#tree +Pathfinding.OffMeshLinks.updateScheduled offmeshlinks.html#updateScheduled +Pathfinding.OptimizationHandler.DefineDefinition.consistent definedefinition.html#consistent +Pathfinding.OptimizationHandler.DefineDefinition.description definedefinition.html#description +Pathfinding.OptimizationHandler.DefineDefinition.enabled definedefinition.html#enabled +Pathfinding.OptimizationHandler.DefineDefinition.name definedefinition.html#name +Pathfinding.OptimizationHandler.deprecatedBuildTargets optimizationhandler.html#deprecatedBuildTargets Various build targets that Unity have deprecated. \n\nThere is apparently no way to figure out which these are without hard coding them. +Pathfinding.OrientationMode pathfinding.html#OrientationMode Determines which direction the agent moves in. \n\nFor 3D games you most likely want the ZAxisIsForward option as that is the convention for 3D games. For 2D games you most likely want the YAxisIsForward option as that is the convention for 2D games. +Pathfinding.PID.AnglePIDControlOutput.maxDesiredWallDistance anglepidcontroloutput.html#maxDesiredWallDistance +Pathfinding.PID.AnglePIDControlOutput.positionDelta anglepidcontroloutput.html#positionDelta How much to move in a single time-step. \n\nIn world units. +Pathfinding.PID.AnglePIDControlOutput.rotationDelta anglepidcontroloutput.html#rotationDelta How much to rotate in a single time-step. +Pathfinding.PID.AnglePIDControlOutput2D.positionDelta anglepidcontroloutput2d.html#positionDelta How much to move in a single time-step. \n\nIn world units. +Pathfinding.PID.AnglePIDControlOutput2D.rotationDelta anglepidcontroloutput2d.html#rotationDelta How much to rotate in a single time-step. \n\nIn radians. +Pathfinding.PID.AnglePIDControlOutput2D.targetRotation anglepidcontroloutput2d.html#targetRotation +Pathfinding.PID.AnglePIDController.DampingRatio anglepidcontroller.html#DampingRatio +Pathfinding.PID.PIDMovement.ALLOWED_OVERLAP_FACTOR pidmovement.html#ALLOWED_OVERLAP_FACTOR +Pathfinding.PID.PIDMovement.ControlParams.agentRadius controlparams.html#agentRadius +Pathfinding.PID.PIDMovement.ControlParams.closestOnNavmesh controlparams.html#closestOnNavmesh +Pathfinding.PID.PIDMovement.ControlParams.debugFlags controlparams.html#debugFlags +Pathfinding.PID.PIDMovement.ControlParams.edges controlparams.html#edges +Pathfinding.PID.PIDMovement.ControlParams.endOfPath controlparams.html#endOfPath +Pathfinding.PID.PIDMovement.ControlParams.facingDirectionAtEndOfPath controlparams.html#facingDirectionAtEndOfPath +Pathfinding.PID.PIDMovement.ControlParams.maxDesiredWallDistance controlparams.html#maxDesiredWallDistance +Pathfinding.PID.PIDMovement.ControlParams.movementPlane controlparams.html#movementPlane +Pathfinding.PID.PIDMovement.ControlParams.nextCorner controlparams.html#nextCorner +Pathfinding.PID.PIDMovement.ControlParams.p controlparams.html#p +Pathfinding.PID.PIDMovement.ControlParams.remainingDistance controlparams.html#remainingDistance +Pathfinding.PID.PIDMovement.ControlParams.rotation controlparams.html#rotation +Pathfinding.PID.PIDMovement.ControlParams.speed controlparams.html#speed +Pathfinding.PID.PIDMovement.DESTINATION_CLEARANCE_FACTOR pidmovement.html#DESTINATION_CLEARANCE_FACTOR +Pathfinding.PID.PIDMovement.DebugFlags pidmovement.html#DebugFlags +Pathfinding.PID.PIDMovement.EdgeBuffers.straightRegionEdgesL edgebuffers.html#straightRegionEdgesL +Pathfinding.PID.PIDMovement.EdgeBuffers.straightRegionEdgesR edgebuffers.html#straightRegionEdgesR +Pathfinding.PID.PIDMovement.EdgeBuffers.triangleRegionEdgesL edgebuffers.html#triangleRegionEdgesL +Pathfinding.PID.PIDMovement.EdgeBuffers.triangleRegionEdgesR edgebuffers.html#triangleRegionEdgesR +Pathfinding.PID.PIDMovement.MAX_FRACTION_OF_REMAINING_DISTANCE pidmovement.html#MAX_FRACTION_OF_REMAINING_DISTANCE +Pathfinding.PID.PIDMovement.MarkerConvertObstacles pidmovement.html#MarkerConvertObstacles +Pathfinding.PID.PIDMovement.MarkerOptimizeDirection pidmovement.html#MarkerOptimizeDirection +Pathfinding.PID.PIDMovement.MarkerPID pidmovement.html#MarkerPID +Pathfinding.PID.PIDMovement.MarkerSidewaysAvoidance pidmovement.html#MarkerSidewaysAvoidance +Pathfinding.PID.PIDMovement.MarkerSmallestDistance pidmovement.html#MarkerSmallestDistance +Pathfinding.PID.PIDMovement.OPTIMIZATION_ITERATIONS pidmovement.html#OPTIMIZATION_ITERATIONS +Pathfinding.PID.PIDMovement.PersistentState.maxDesiredWallDistance persistentstate.html#maxDesiredWallDistance +Pathfinding.PID.PIDMovement.STEP_MULTIPLIER pidmovement.html#STEP_MULTIPLIER +Pathfinding.PID.PIDMovement.allowRotatingOnSpot pidmovement.html#allowRotatingOnSpot If rotation on the spot is allowed or not. +Pathfinding.PID.PIDMovement.allowRotatingOnSpotBacking pidmovement.html#allowRotatingOnSpotBacking If rotation on the spot is allowed or not. \n\n1 for allowed, 0 for not allowed.\n\nThat we have to use a byte instead of a boolean is due to a Burst limitation. +Pathfinding.PID.PIDMovement.desiredWallDistance pidmovement.html#desiredWallDistance How big of a distance to try to keep from obstacles. \n\nTypically around 1 or 2 times the agent radius is a good value for this.\n\nTry to avoid making it so large that there might not be enough space for the agent to keep this amount of distance from obstacles. It may start to move less optimally if it is not possible to keep this distance.\n\nThis works well in open spaces, but if your game consists of a lot of tight corridors, a low, or zero value may be better.\n\nThis will be multiplied by the agent's scale to get the actual distance. +Pathfinding.PID.PIDMovement.leadInRadiusWhenApproachingDestination pidmovement.html#leadInRadiusWhenApproachingDestination How wide of a turn to make when approaching a destination for which a desired facing direction has been set. \n\nThe following video shows three agents, one with no facing direction set, and then two agents with varying values of the lead in radius. <b>[video in online documentation]</b>\n\nSetting this to zero will make the agent move directly to the end of the path and rotate on the spot to face the desired facing direction, once it is there.\n\nWhen approaching a destination for which no desired facing direction has been set, this field has no effect.\n\n[more in online documentation]\nThis will be multiplied by the agent's scale to get the actual radius. +Pathfinding.PID.PIDMovement.maxOnSpotRotationSpeed pidmovement.html#maxOnSpotRotationSpeed Maximum rotation speed in degrees per second while rotating on the spot. \n\nOnly used if allowRotatingOnSpot is enabled. +Pathfinding.PID.PIDMovement.maxRotationSpeed pidmovement.html#maxRotationSpeed Maximum rotation speed in degrees per second. \n\nIf the agent would have to rotate faster than this, it will instead slow down to get more time to rotate.\n\nThe agent may want to rotate faster than rotationSpeed if there's not enough space, so that it has to move in a more narrow arc. It may also want to rotate faster if it is very close to its destination and it wants to make sure it ends up on the right spot without any circling.\n\nIt is recommended to keep this at a value slightly greater than rotationSpeed.\n\n[more in online documentation] +Pathfinding.PID.PIDMovement.rotationSpeed pidmovement.html#rotationSpeed Desired rotation speed in degrees per second. \n\nIf the agent is in an open area and gets a new destination directly behind itself, it will start to rotate around with exactly this rotation speed.\n\nThe agent will slow down its rotation speed as it approaches its desired facing direction. So for example, when it is only 90 degrees away from its desired facing direction, it will only rotate with about half this speed.\n\n[more in online documentation] +Pathfinding.PID.PIDMovement.slowdownTime pidmovement.html#slowdownTime Time for the agent to slow down to a complete stop when it approaches the destination point, in seconds. \n\nOne can calculate the deceleration like: speed/slowdownTime (with units m/s^2). +Pathfinding.PID.PIDMovement.slowdownTimeWhenTurningOnSpot pidmovement.html#slowdownTimeWhenTurningOnSpot Time for the agent to slow down to a complete stop when it decides to change direction by turning on the spot. \n\nIf set to zero, the agent will instantly stop and start to turn around.\n\nOnly used if allowRotatingOnSpot is enabled. +Pathfinding.PID.PIDMovement.speed pidmovement.html#speed Desired speed of the agent in meters per second. \n\nThis will be multiplied by the agent's scale to get the actual speed. +Pathfinding.PID.Palette pid.html#Palette +Pathfinding.Palette pathfinding.html#Palette +Pathfinding.Path.CompleteState path.html#CompleteState Current state of the path. +Pathfinding.Path.MarkerOpenCandidateConnectionsToEnd path.html#MarkerOpenCandidateConnectionsToEnd +Pathfinding.Path.MarkerTrace path.html#MarkerTrace +Pathfinding.Path.OpenCandidateParams.candidateG opencandidateparams.html#candidateG +Pathfinding.Path.OpenCandidateParams.fractionAlongEdge opencandidateparams.html#fractionAlongEdge +Pathfinding.Path.OpenCandidateParams.parentPathNode opencandidateparams.html#parentPathNode +Pathfinding.Path.OpenCandidateParams.pathID opencandidateparams.html#pathID +Pathfinding.Path.OpenCandidateParams.pathNodes opencandidateparams.html#pathNodes +Pathfinding.Path.OpenCandidateParams.targetNodeIndex opencandidateparams.html#targetNodeIndex +Pathfinding.Path.OpenCandidateParams.targetNodePosition opencandidateparams.html#targetNodePosition +Pathfinding.Path.OpenCandidateParams.targetPathNode opencandidateparams.html#targetPathNode +Pathfinding.Path.PathHandler path.html#PathHandler +Pathfinding.Path.PipelineState path.html#PipelineState Returns the state of the path in the pathfinding pipeline. +Pathfinding.Path.Pooled path.html#Pooled True if the path is currently pooled. \n\nDo not set this value. Only read. It is used internally.\n\n[more in online documentation] +Pathfinding.Path.ZeroTagPenalties path.html#ZeroTagPenalties List of zeroes to use as default tag penalties. +Pathfinding.Path.callback path.html#callback Callback to call when the path is complete. \n\nThis is usually sent to the Seeker component which post processes the path and then calls a callback to the script which requested the path +Pathfinding.Path.claimed path.html#claimed List of claims on this path with reference objects. +Pathfinding.Path.completeState path.html#completeState Backing field for CompleteState. +Pathfinding.Path.duration path.html#duration How long it took to calculate this path in milliseconds. +Pathfinding.Path.enabledTags path.html#enabledTags Which graph tags are traversable. \n\nThis is a bitmask so -1 = all bits set = all tags traversable. For example, to set bit 5 to true, you would do <b>[code in online documentation]</b><b>[code in online documentation]</b>\n\nThe Seeker has a popup field where you can set which tags to use. \n\n[more in online documentation] +Pathfinding.Path.error path.html#error If the path failed, this is true. \n\n[more in online documentation] +Pathfinding.Path.errorLog path.html#errorLog Additional info on why a path failed. \n\n[more in online documentation] +Pathfinding.Path.hTargetNode path.html#hTargetNode Target to use for H score calculation. +Pathfinding.Path.hasBeenReset path.html#hasBeenReset True if the Reset function has been called. \n\nUsed to alert users when they are doing something wrong. +Pathfinding.Path.heuristic path.html#heuristic Determines which heuristic to use. +Pathfinding.Path.heuristicObjective path.html#heuristicObjective Target to use for H score calculations. \n\n[more in online documentation] +Pathfinding.Path.heuristicObjectiveInternal path.html#heuristicObjectiveInternal +Pathfinding.Path.heuristicScale path.html#heuristicScale Scale of the heuristic values. \n\n[more in online documentation] +Pathfinding.Path.immediateCallback path.html#immediateCallback Immediate callback to call when the path is complete. \n\n[more in online documentation] +Pathfinding.Path.internalTagPenalties path.html#internalTagPenalties The tag penalties that are actually used. \n\n[more in online documentation] +Pathfinding.Path.nnConstraint path.html#nnConstraint Constraint for how to search for nodes. +Pathfinding.Path.path path.html#path Holds the path as a GraphNode list. \n\nThese are all nodes that the path traversed, as calculated by the pathfinding algorithm. This may not be the same nodes as the post processed path traverses.\n\n[more in online documentation] +Pathfinding.Path.pathHandler path.html#pathHandler Data for the thread calculating this path. +Pathfinding.Path.pathID path.html#pathID ID of this path. \n\nUsed to distinguish between different paths +Pathfinding.Path.releasedNotSilent path.html#releasedNotSilent True if the path has been released with a non-silent call yet. \n\n[more in online documentation] +Pathfinding.Path.searchedNodes path.html#searchedNodes Number of nodes this path has searched. +Pathfinding.Path.tagPenalties path.html#tagPenalties Penalties for each tag. \n\nTag 0 which is the default tag, will get a penalty of tagPenalties[0]. These should only be non-negative values since the A* algorithm cannot handle negative penalties.\n\nWhen assigning an array to this property it must have a length of 32.\n\n[more in online documentation] +Pathfinding.Path.traversalProvider path.html#traversalProvider Provides additional traversal information to a path request. \n\n[more in online documentation] +Pathfinding.Path.vectorPath path.html#vectorPath Holds the (possibly post-processed) path as a Vector3 list. \n\nThis list may be modified by path modifiers to be smoother or simpler compared to the raw path generated by the pathfinding algorithm.\n\n[more in online documentation] +Pathfinding.PathCompleteState pathfinding.html#PathCompleteState State of a path request. +Pathfinding.PathEndingCondition.path pathendingcondition.html#path Path which this ending condition is used on. +Pathfinding.PathHandler.DebugStringBuilder pathhandler.html#DebugStringBuilder StringBuilder that paths can use to build debug strings. \n\nBetter for performance and memory usage to use a single StringBuilder instead of each path creating its own +Pathfinding.PathHandler.PathID pathhandler.html#PathID ID for the path currently being calculated or last path that was calculated. +Pathfinding.PathHandler.debugPathNodes pathhandler.html#debugPathNodes +Pathfinding.PathHandler.heap pathhandler.html#heap Binary heap to keep track of nodes on the "Open list". \n\n[more in online documentation] +Pathfinding.PathHandler.nodeStorage pathhandler.html#nodeStorage +Pathfinding.PathHandler.numTemporaryNodes pathhandler.html#numTemporaryNodes +Pathfinding.PathHandler.pathID pathhandler.html#pathID Current PathID. \n\n[more in online documentation] +Pathfinding.PathHandler.pathNodes pathhandler.html#pathNodes Reference to the per-node data for this thread. \n\n[more in online documentation] +Pathfinding.PathHandler.temporaryNodeStartIndex pathhandler.html#temporaryNodeStartIndex All path nodes with an index greater or equal to this are temporary nodes that only exist for the duration of a single path. \n\nThis is a copy of NodeStorage.nextNodeIndex. This is used to avoid having to access the NodeStorage while pathfinding as it's an extra indirection. +Pathfinding.PathHandler.temporaryNodes pathhandler.html#temporaryNodes +Pathfinding.PathHandler.threadID pathhandler.html#threadID +Pathfinding.PathHandler.totalThreadCount pathhandler.html#totalThreadCount +Pathfinding.PathLog pathfinding.html#PathLog How path results are logged by the system. +Pathfinding.PathModifier.Order pathmodifier.html#Order Modifiers will be executed from lower order to higher order. \n\nThis value is assumed to stay constant. +Pathfinding.PathModifier.seeker pathmodifier.html#seeker +Pathfinding.PathNNConstraint.Walkable pathnnconstraint.html#Walkable +Pathfinding.PathNode.Default pathnode.html#Default +Pathfinding.PathNode.Flag1Mask pathnode.html#Flag1Mask +Pathfinding.PathNode.Flag1Offset pathnode.html#Flag1Offset Flag 1 is at bit 30. +Pathfinding.PathNode.Flag2Mask pathnode.html#Flag2Mask +Pathfinding.PathNode.Flag2Offset pathnode.html#Flag2Offset Flag 2 is at bit 31. +Pathfinding.PathNode.FractionAlongEdgeMask pathnode.html#FractionAlongEdgeMask +Pathfinding.PathNode.FractionAlongEdgeOffset pathnode.html#FractionAlongEdgeOffset +Pathfinding.PathNode.FractionAlongEdgeQuantization pathnode.html#FractionAlongEdgeQuantization +Pathfinding.PathNode.ParentIndexMask pathnode.html#ParentIndexMask Parent index uses the first 26 bits. +Pathfinding.PathNode.flag1 pathnode.html#flag1 Use as temporary flag during pathfinding. \n\nPath types can use this during pathfinding to mark nodes. When done, this flag should be reverted to its default state (false) to avoid messing up other pathfinding requests. +Pathfinding.PathNode.flag2 pathnode.html#flag2 Use as temporary flag during pathfinding. \n\nPath types can use this during pathfinding to mark nodes. When done, this flag should be reverted to its default state (false) to avoid messing up other pathfinding requests. +Pathfinding.PathNode.flags pathnode.html#flags Bitpacked variable which stores several fields. +Pathfinding.PathNode.fractionAlongEdge pathnode.html#fractionAlongEdge +Pathfinding.PathNode.heapIndex pathnode.html#heapIndex Index of the node in the binary heap. \n\nThe open list in the A* algorithm is backed by a binary heap. To support fast 'decrease key' operations, the index of the node is saved here. +Pathfinding.PathNode.parentIndex pathnode.html#parentIndex +Pathfinding.PathNode.pathID pathnode.html#pathID The path request (in this thread, if multithreading is used) which last used this node. +Pathfinding.PathPool.pool pathpool.html#pool +Pathfinding.PathPool.totalCreated pathpool.html#totalCreated +Pathfinding.PathProcessor.GraphUpdateLock.Held graphupdatelock.html#Held True while this lock is preventing the pathfinding threads from processing more paths. \n\nNote that the pathfinding threads may not be paused yet (if this lock was obtained using PausePathfinding(false)). +Pathfinding.PathProcessor.GraphUpdateLock.id graphupdatelock.html#id +Pathfinding.PathProcessor.GraphUpdateLock.pathProcessor graphupdatelock.html#pathProcessor +Pathfinding.PathProcessor.IsUsingMultithreading pathprocessor.html#IsUsingMultithreading Returns whether or not multithreading is used. +Pathfinding.PathProcessor.MarkerCalculatePath pathprocessor.html#MarkerCalculatePath +Pathfinding.PathProcessor.MarkerPreparePath pathprocessor.html#MarkerPreparePath +Pathfinding.PathProcessor.NumThreads pathprocessor.html#NumThreads Number of parallel pathfinders. \n\nReturns the number of concurrent processes which can calculate paths at once. When using multithreading, this will be the number of threads, if not using multithreading it is always 1 (since only 1 coroutine is used). \n\n[more in online documentation] +Pathfinding.PathProcessor.OnPathPostSearch pathprocessor.html#OnPathPostSearch +Pathfinding.PathProcessor.OnPathPreSearch pathprocessor.html#OnPathPreSearch +Pathfinding.PathProcessor.OnQueueUnblocked pathprocessor.html#OnQueueUnblocked +Pathfinding.PathProcessor.astar pathprocessor.html#astar +Pathfinding.PathProcessor.coroutineReceiver pathprocessor.html#coroutineReceiver +Pathfinding.PathProcessor.locks pathprocessor.html#locks +Pathfinding.PathProcessor.multithreaded pathprocessor.html#multithreaded +Pathfinding.PathProcessor.nextLockID pathprocessor.html#nextLockID +Pathfinding.PathProcessor.pathHandlers pathprocessor.html#pathHandlers +Pathfinding.PathProcessor.queue pathprocessor.html#queue +Pathfinding.PathProcessor.returnQueue pathprocessor.html#returnQueue +Pathfinding.PathProcessor.threadCoroutine pathprocessor.html#threadCoroutine When no multithreading is used, the IEnumerator is stored here. \n\nWhen no multithreading is used, a coroutine is used instead. It is not directly called with StartCoroutine but a separate function has just a while loop which increments the main IEnumerator. This is done so other functions can step the thread forward at any time, without having to wait for Unity to update it. \n\n[more in online documentation] +Pathfinding.PathProcessor.threads pathprocessor.html#threads References to each of the pathfinding threads. +Pathfinding.PathRequestSettings.Default pathrequestsettings.html#Default +Pathfinding.PathRequestSettings.graphMask pathrequestsettings.html#graphMask Graphs that this agent can use. \n\nThis field determines which graphs will be considered when searching for the start and end nodes of a path. It is useful in numerous situations, for example if you want to make one graph for small units and one graph for large units.\n\nThis is a bitmask so if you for example want to make the agent only use graph index 3 then you can set this to: <b>[code in online documentation]</b>\n\n[more in online documentation]\nNote that this field only stores which graph indices that are allowed. This means that if the graphs change their ordering then this mask may no longer be correct.\n\nIf you know the name of the graph you can use the Pathfinding.GraphMask.FromGraphName method: <b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.PathRequestSettings.tagPenalties pathrequestsettings.html#tagPenalties The penalty for each tag. \n\nIf null, all penalties will be treated as zero. Otherwise, the array should always have a length of exactly 32. +Pathfinding.PathRequestSettings.traversableTags pathrequestsettings.html#traversableTags The tags which this agent can traverse. \n\n[more in online documentation] +Pathfinding.PathRequestSettings.traversalProvider pathrequestsettings.html#traversalProvider Filters which nodes the agent can traverse, and can also add penalties to each traversed node. \n\nIn most common situations, this is left as null (which implies the default traversal provider: DefaultITraversalProvider). But if you need custom pathfinding behavior which cannot be done using the graphMask, tagPenalties and traversableTags, then setting an ITraversalProvider is a great option. It provides you a lot more control over how the pathfinding works.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.PathReturnQueue.OnReturnedPaths pathreturnqueue.html#OnReturnedPaths +Pathfinding.PathReturnQueue.pathReturnQueue pathreturnqueue.html#pathReturnQueue Holds all paths which are waiting to be flagged as completed. \n\n[more in online documentation] +Pathfinding.PathReturnQueue.pathsClaimedSilentlyBy pathreturnqueue.html#pathsClaimedSilentlyBy Paths are claimed silently by some object to prevent them from being recycled while still in use. \n\nThis will be set to the AstarPath object. +Pathfinding.PathState pathfinding.html#PathState Internal state of a path in the pipeline. +Pathfinding.PathTracer.MarkerClosest pathtracer.html#MarkerClosest +Pathfinding.PathTracer.MarkerContains pathtracer.html#MarkerContains +Pathfinding.PathTracer.MarkerGetNearest pathtracer.html#MarkerGetNearest +Pathfinding.PathTracer.MarkerSimplify pathtracer.html#MarkerSimplify +Pathfinding.PathTracer.NODES_TO_CHECK_FOR_DESTRUCTION pathtracer.html#NODES_TO_CHECK_FOR_DESTRUCTION +Pathfinding.PathTracer.PartGraphType pathtracer.html#PartGraphType Type of graph that the current path part is on. +Pathfinding.PathTracer.QueueItem.distance queueitem.html#distance +Pathfinding.PathTracer.QueueItem.node queueitem.html#node +Pathfinding.PathTracer.QueueItem.parent queueitem.html#parent +Pathfinding.PathTracer.RepairQuality pathtracer.html#RepairQuality +Pathfinding.PathTracer.SplittingCoefficients pathtracer.html#SplittingCoefficients +Pathfinding.PathTracer.TempConnectionLists pathtracer.html#TempConnectionLists +Pathfinding.PathTracer.TempQueues pathtracer.html#TempQueues +Pathfinding.PathTracer.desiredCornersForGoodSimplification pathtracer.html#desiredCornersForGoodSimplification The minimum number of corners to request from GetNextCornerIndices to ensure the path can be simplified well. \n\nThe path simplification algorithm requires at least 2 corners on navmesh graphs, but 3 corners on grid graphs. +Pathfinding.PathTracer.endIsUpToDate pathtracer.html#endIsUpToDate +Pathfinding.PathTracer.endPoint pathtracer.html#endPoint End point of the path. \n\nThis is not necessarily the same as the destination, as this point may be clamped to the graph. +Pathfinding.PathTracer.endPointOfFirstPart pathtracer.html#endPointOfFirstPart End point of the current path part. \n\nIf the path has multiple parts, this is typically the start of an off-mesh link. If the path has only one part, this is the same as endPoint. +Pathfinding.PathTracer.firstPartContainsDestroyedNodes pathtracer.html#firstPartContainsDestroyedNodes If true, the first part contains destroyed nodes. \n\nThis can happen if the graph is updated and some nodes are destroyed.\n\nIf this is true, the path is considered stale and should be recalculated.\n\nThe opposite is not necessarily true. If this is false, the path may still be stale.\n\n[more in online documentation] +Pathfinding.PathTracer.firstPartIndex pathtracer.html#firstPartIndex +Pathfinding.PathTracer.funnelState pathtracer.html#funnelState +Pathfinding.PathTracer.hasPath pathtracer.html#hasPath True if there is a path to follow. +Pathfinding.PathTracer.isCreated pathtracer.html#isCreated True until Dispose is called. +Pathfinding.PathTracer.isNextPartValidLink pathtracer.html#isNextPartValidLink True if the next part in the path exists, and is a valid link. \n\nThis is true if the path has at least 2 parts and the second part is an off-mesh link.\n\nIf any nodes in the second part have been destroyed, this will return false. +Pathfinding.PathTracer.isStale pathtracer.html#isStale True if the path is stale and should be recalculated as quickly as possible. \n\nThis is true if the path has become invalid (e.g. due to a graph update), or if the destination has changed so much that we don't have a path to the destination at all.\n\nFor performance reasons, the agent tries to avoid checking if nodes have been destroyed unless it needs to access them to calculate its movement. Therefore, if a path is invalidated further ahead, the agent may not realize this until it has moved close enough. +Pathfinding.PathTracer.nnConstraint pathtracer.html#nnConstraint +Pathfinding.PathTracer.nodeHashes pathtracer.html#nodeHashes Hashes of some important data for each node, to determine if the node has been invalidated in some way. \n\nFor e.g. the grid graph, this is done using the node's index in the grid. This ensures that the node is counted as invalid if the node is for example moved to the other side of the graph using the ProceduralGraphMover.\n\nFor all nodes, this includes if info about if the node has been destroyed, and if it is walkable.\n\nThis will always have the same length as the nodes array, and the absolute indices in this array will correspond to the absolute indices in the nodes array. +Pathfinding.PathTracer.nodes pathtracer.html#nodes All nodes in the path. +Pathfinding.PathTracer.partCount pathtracer.html#partCount Number of parts in the path. \n\nA part is either a sequence of adjacent nodes, or an off-mesh link. +Pathfinding.PathTracer.partGraphType pathtracer.html#partGraphType The type of graph that the current path part is on. \n\nThis is either a grid-like graph, or a navmesh-like graph. +Pathfinding.PathTracer.parts pathtracer.html#parts +Pathfinding.PathTracer.portalIsNotInnerCorner pathtracer.html#portalIsNotInnerCorner Indicates if portals are definitely not inner corners, or if they may be. \n\nFor each portal, if bit 0 is set then the left side of the portal is definitely not an inner corner. If bit 1 is set that means the same thing but for the right side of the portal.\n\nShould always have the same length as the portals in funnelState. +Pathfinding.PathTracer.scratchList pathtracer.html#scratchList +Pathfinding.PathTracer.startIsUpToDate pathtracer.html#startIsUpToDate +Pathfinding.PathTracer.startNode pathtracer.html#startNode Current start node of the path. \n\nSince the path is updated every time the agent moves, this will be the node which the agent is inside.\n\nIn case the path has become invalid, this will be set to the closest node to the agent, or if no such node could be found, it will be set to null.\n\n[more in online documentation] +Pathfinding.PathTracer.startNodeInternal pathtracer.html#startNodeInternal +Pathfinding.PathTracer.startPoint pathtracer.html#startPoint Start point of the path. +Pathfinding.PathTracer.unclampedEndPoint pathtracer.html#unclampedEndPoint +Pathfinding.PathTracer.unclampedStartPoint pathtracer.html#unclampedStartPoint +Pathfinding.PathTracer.version pathtracer.html#version Incremented whenever the path is changed. +Pathfinding.PathUtilities.BFSMap pathutilities.html#BFSMap +Pathfinding.PathUtilities.BFSQueue pathutilities.html#BFSQueue +Pathfinding.PathUtilities.ConstrainToSet.nodes constraintoset.html#nodes +Pathfinding.PathUtilities.FormationMode pathutilities.html#FormationMode +Pathfinding.PathUtilities.JobFormationPacked.DistanceComparer.positions distancecomparer.html#positions +Pathfinding.PathUtilities.JobFormationPacked.agentRadius jobformationpacked.html#agentRadius +Pathfinding.PathUtilities.JobFormationPacked.destination jobformationpacked.html#destination +Pathfinding.PathUtilities.JobFormationPacked.movementPlane jobformationpacked.html#movementPlane +Pathfinding.PathUtilities.JobFormationPacked.positions jobformationpacked.html#positions +Pathfinding.PathfindingEditorSettings.hasShownWelcomeScreen pathfindingeditorsettings.html#hasShownWelcomeScreen +Pathfinding.PathfindingTag.value pathfindingtag.html#value Underlaying tag value. \n\nShould always be between 0 and GraphNode.MaxTagIndex (inclusive). +Pathfinding.Patrol.agent patrol.html#agent +Pathfinding.Patrol.delay patrol.html#delay Time in seconds to wait at each target. +Pathfinding.Patrol.index patrol.html#index Current target index. +Pathfinding.Patrol.switchTime patrol.html#switchTime +Pathfinding.Patrol.targets patrol.html#targets Target points to move to in order. +Pathfinding.Patrol.updateDestinationEveryFrame patrol.html#updateDestinationEveryFrame If true, the agent's destination will be updated every frame instead of only when switching targets. \n\nThis is good if you have moving targets, but is otherwise unnecessary and slightly slower. +Pathfinding.PointGraph.NodeDistanceMode pointgraph.html#NodeDistanceMode Distance query mode. \n\n <b>[image in online documentation]</b>\n\nIn the image above there are a few red nodes. Assume the agent is the orange circle. Using the Node mode the closest point on the graph that would be found would be the node at the bottom center which may not be what you want. Using the Connection mode it will find the closest point on the connection between the two nodes in the top half of the image.\n\nWhen using the Connection option you may also want to use the Connection option for the Seeker's Start End Modifier snapping options. This is not strictly necessary, but it most cases it is what you want.\n\n[more in online documentation] +Pathfinding.PointGraph.PointGraphScanPromise.graph pointgraphscanpromise.html#graph +Pathfinding.PointGraph.PointGraphScanPromise.lookupTree pointgraphscanpromise.html#lookupTree +Pathfinding.PointGraph.PointGraphScanPromise.nodes pointgraphscanpromise.html#nodes +Pathfinding.PointGraph.PointGraphUpdatePromise.graph pointgraphupdatepromise.html#graph +Pathfinding.PointGraph.PointGraphUpdatePromise.graphUpdates pointgraphupdatepromise.html#graphUpdates +Pathfinding.PointGraph.isScanned pointgraph.html#isScanned +Pathfinding.PointGraph.limits pointgraph.html#limits Max distance along the axis for a connection to be valid. \n\n0 = infinity +Pathfinding.PointGraph.lookupTree pointgraph.html#lookupTree +Pathfinding.PointGraph.mask pointgraph.html#mask Layer mask to use for raycast. +Pathfinding.PointGraph.maxDistance pointgraph.html#maxDistance Max distance for a connection to be valid. \n\nThe value 0 (zero) will be read as infinity and thus all nodes not restricted by other constraints will be added as connections.\n\nA negative value will disable any neighbours to be added. It will completely stop the connection processing to be done, so it can save you processing power if you don't these connections. +Pathfinding.PointGraph.maximumConnectionLength pointgraph.html#maximumConnectionLength Longest known connection. \n\nIn squared Int3 units.\n\n[more in online documentation] +Pathfinding.PointGraph.nearestNodeDistanceMode pointgraph.html#nearestNodeDistanceMode Distance query mode. \n\n <b>[image in online documentation]</b>\n\nIn the image above there are a few red nodes. Assume the agent is the orange circle. Using the Node mode the closest point on the graph that would be found would be the node at the bottom center which may not be what you want. Using the Connection mode it will find the closest point on the connection between the two nodes in the top half of the image.\n\nWhen using the Connection option you may also want to use the Connection option for the Seeker's Start End Modifier snapping options. This is not strictly necessary, but it most cases it is what you want.\n\n[more in online documentation]\nIf you enable this during runtime, you will need to call RebuildConnectionDistanceLookup to make sure some cache data is properly recalculated. If the graph doesn't have any nodes yet or if you are going to scan the graph afterwards then you do not need to do this. +Pathfinding.PointGraph.nodeCount pointgraph.html#nodeCount Number of nodes in this graph. +Pathfinding.PointGraph.nodes pointgraph.html#nodes All nodes in this graph. \n\nNote that only the first nodeCount will be non-null.\n\nYou can also use the GetNodes method to get all nodes. +Pathfinding.PointGraph.optimizeForSparseGraph pointgraph.html#optimizeForSparseGraph Optimizes the graph for sparse graphs. \n\nThis can reduce calculation times for both scanning and for normal path requests by huge amounts. It reduces the number of node-node checks that need to be done during scan, and can also optimize getting the nearest node from the graph (such as when querying for a path).\n\nTry enabling and disabling this option, check the scan times logged when you scan the graph to see if your graph is suited for this optimization or if it makes it slower.\n\nThe gain of using this optimization increases with larger graphs, the default scan algorithm is brute force and requires O(n^2) checks, this optimization along with a graph suited for it, requires only O(n) checks during scan (assuming the connection distance limits are reasonable).\n\n[more in online documentation]\n\n\nIf you enable this during runtime, you will need to call RebuildNodeLookup to make sure any existing nodes are added to the lookup structure. If the graph doesn't have any nodes yet or if you are going to scan the graph afterwards then you do not need to do this. +Pathfinding.PointGraph.raycast pointgraph.html#raycast Use raycasts to check connections. +Pathfinding.PointGraph.recursive pointgraph.html#recursive Recursively search for child nodes to the root. +Pathfinding.PointGraph.root pointgraph.html#root Childs of this transform are treated as nodes. +Pathfinding.PointGraph.searchTag pointgraph.html#searchTag If no root is set, all nodes with the tag is used as nodes. +Pathfinding.PointGraph.thickRaycast pointgraph.html#thickRaycast Use thick raycast. +Pathfinding.PointGraph.thickRaycastRadius pointgraph.html#thickRaycastRadius Thick raycast radius. +Pathfinding.PointGraph.use2DPhysics pointgraph.html#use2DPhysics Use the 2D Physics API. +Pathfinding.PointGraphEditor.nearestNodeDistanceModeLabels pointgrapheditor.html#nearestNodeDistanceModeLabels +Pathfinding.PointKDTree.LeafArraySize pointkdtree.html#LeafArraySize +Pathfinding.PointKDTree.LeafSize pointkdtree.html#LeafSize +Pathfinding.PointKDTree.Node.count node.html#count Number of non-null entries in data. +Pathfinding.PointKDTree.Node.data node.html#data Nodes in this leaf node (null if not a leaf node) +Pathfinding.PointKDTree.Node.split node.html#split Split point along the splitAxis if not a leaf node. +Pathfinding.PointKDTree.Node.splitAxis node.html#splitAxis Axis to split along if not a leaf node (x=0, y=1, z=2) +Pathfinding.PointKDTree.arrayCache pointkdtree.html#arrayCache +Pathfinding.PointKDTree.comparers pointkdtree.html#comparers +Pathfinding.PointKDTree.largeList pointkdtree.html#largeList +Pathfinding.PointKDTree.numNodes pointkdtree.html#numNodes +Pathfinding.PointKDTree.tree pointkdtree.html#tree +Pathfinding.PointNode.connections pointnode.html#connections All connections from this node. \n\n[more in online documentation] +Pathfinding.PointNode.gameObject pointnode.html#gameObject GameObject this node was created from (if any). \n\n[more in online documentation]\n<b>[code in online documentation]</b> +Pathfinding.Polygon.cached_Int3_int_dict polygon.html#cached_Int3_int_dict Cached dictionary to avoid excessive allocations. +Pathfinding.ProceduralGraphMover.graph proceduralgraphmover.html#graph Graph to update. \n\nThis will be set at Start based on graphIndex. During runtime you may set this to any graph or to null to disable updates. +Pathfinding.ProceduralGraphMover.graphIndex proceduralgraphmover.html#graphIndex Index for the graph to update. \n\nThis will be used at Start to set graph.\n\nThis is an index into the AstarPath.active.data.graphs array. +Pathfinding.ProceduralGraphMover.target proceduralgraphmover.html#target Graph will be moved to follow this target. +Pathfinding.ProceduralGraphMover.updateDistance proceduralgraphmover.html#updateDistance Grid graphs will be updated if the target is more than this number of nodes from the graph center. \n\nNote that this is in nodes, not world units.\n\n[more in online documentation] +Pathfinding.ProceduralGraphMover.updatingGraph proceduralgraphmover.html#updatingGraph True while the graph is being updated by this script. +Pathfinding.ProceduralGridMoverEditor.graphLabels proceduralgridmovereditor.html#graphLabels +Pathfinding.Progress.graphCount progress.html#graphCount +Pathfinding.Progress.graphIndex progress.html#graphIndex +Pathfinding.Progress.progress progress.html#progress Current progress as a value between 0 and 1. +Pathfinding.Progress.stage progress.html#stage +Pathfinding.RVO.AgentDebugFlags rvo.html#AgentDebugFlags +Pathfinding.RVO.ArbitraryMovementPlane.matrix arbitrarymovementplane.html#matrix +Pathfinding.RVO.ArbitraryMovementPlane.plane arbitrarymovementplane.html#plane +Pathfinding.RVO.IAgent.AgentIndex iagent.html#AgentIndex Internal index of the agent. \n\n[more in online documentation] +Pathfinding.RVO.IAgent.AgentTimeHorizon iagent.html#AgentTimeHorizon Max number of estimated seconds to look into the future for collisions with agents. \n\nAs it turns out, this variable is also very good for controling agent avoidance priorities. Agents with lower values will avoid other agents less and thus you can make 'high priority agents' by giving them a lower value. +Pathfinding.RVO.IAgent.AvoidingAnyAgents iagent.html#AvoidingAnyAgents True if the agent's movement is affected by any other agents or obstacles. \n\nIf the agent is all alone, and can just move in a straight line to its target, this will be false. If it has to adjust its velocity, even slightly, to avoid collisions, this will be true. +Pathfinding.RVO.IAgent.CalculatedEffectivelyReachedDestination iagent.html#CalculatedEffectivelyReachedDestination +Pathfinding.RVO.IAgent.CalculatedSpeed iagent.html#CalculatedSpeed Optimal speed of the agent to avoid collisions. \n\nThe movement script should move towards CalculatedTargetPoint with this speed. +Pathfinding.RVO.IAgent.CalculatedTargetPoint iagent.html#CalculatedTargetPoint Optimal point to move towards to avoid collisions. \n\nThe movement script should move towards this point with a speed of CalculatedSpeed.\n\n[more in online documentation] +Pathfinding.RVO.IAgent.CollidesWith iagent.html#CollidesWith Layer mask specifying which layers this agent will avoid. \n\nYou can set it as CollidesWith = RVOLayer.DefaultAgent | RVOLayer.Layer3 | RVOLayer.Layer6 ...\n\n[more in online documentation] +Pathfinding.RVO.IAgent.DebugFlags iagent.html#DebugFlags Draw debug information in the scene view. +Pathfinding.RVO.IAgent.DestroyedCallback iagent.html#DestroyedCallback Callback which will be called right the agent is removed from the simulation. \n\nThis agent should not be used anymore after this callback has been called. +Pathfinding.RVO.IAgent.FlowFollowingStrength iagent.html#FlowFollowingStrength Determines how strongly this agent just follows the flow instead of making other agents avoid it. \n\nThe default value is 0, if it is greater than zero (up to the maximum value of 1) other agents will not avoid this character as much. However it works in a different way to Priority.\n\nA group of agents with FlowFollowingStrength set to a high value that all try to reach the same point will end up just settling to stationary positions around that point, none will push the others away to any significant extent. This is tricky to achieve with priorities as priorities are all relative, so setting all agents to a low priority is the same thing as not changing priorities at all.\n\nShould be a value in the range [0, 1]. +Pathfinding.RVO.IAgent.Height iagent.html#Height Height of the agent in world units. \n\nAgents are modelled as circles/cylinders. +Pathfinding.RVO.IAgent.HierarchicalNodeIndex iagent.html#HierarchicalNodeIndex +Pathfinding.RVO.IAgent.Layer iagent.html#Layer Specifies the avoidance layer for this agent. \n\nThe CollidesWith mask on other agents will determine if they will avoid this agent. +Pathfinding.RVO.IAgent.Locked iagent.html#Locked Locked agents will be assumed not to move. +Pathfinding.RVO.IAgent.MaxNeighbours iagent.html#MaxNeighbours Max number of agents to take into account. \n\nDecreasing this value can lead to better performance, increasing it can lead to better quality of the simulation. +Pathfinding.RVO.IAgent.MovementPlane iagent.html#MovementPlane Plane in which the agent moves. \n\nLocal avoidance calculations are always done in 2D and this plane determines how to convert from 3D to 2D.\n\nIn a typical 3D game the agents move in the XZ plane and in a 2D game they move in the XY plane. By default this is set to the XZ plane.\n\n[more in online documentation] +Pathfinding.RVO.IAgent.NeighbourCount iagent.html#NeighbourCount Number of neighbours that the agent took into account during the last simulation step. +Pathfinding.RVO.IAgent.ObstacleTimeHorizon iagent.html#ObstacleTimeHorizon Max number of estimated seconds to look into the future for collisions with obstacles. +Pathfinding.RVO.IAgent.Position iagent.html#Position Position of the agent. \n\nThe agent does not move by itself, a movement script has to be responsible for reading the CalculatedTargetPoint and CalculatedSpeed properties and move towards that point with that speed. This property should ideally be set every frame. +Pathfinding.RVO.IAgent.PreCalculationCallback iagent.html#PreCalculationCallback Callback which will be called right before avoidance calculations are started. \n\nUsed to update the other properties with the most up to date values +Pathfinding.RVO.IAgent.Priority iagent.html#Priority How strongly other agents will avoid this agent. \n\nUsually a value between 0 and 1. Agents with similar priorities will avoid each other with an equal strength. If an agent sees another agent with a higher priority than itself it will avoid that agent more strongly. In the extreme case (e.g this agent has a priority of 0 and the other agent has a priority of 1) it will treat the other agent as being a moving obstacle. Similarly if an agent sees another agent with a lower priority than itself it will avoid that agent less.\n\nIn general the avoidance strength for this agent is: <b>[code in online documentation]</b> +Pathfinding.RVO.IAgent.Radius iagent.html#Radius Radius of the agent in world units. \n\nAgents are modelled as circles/cylinders. +Pathfinding.RVO.IMovementPlaneWrapper.matrix imovementplanewrapper.html#matrix Maps from 2D (X, Y, 0) coordinates to world coordinates. +Pathfinding.RVO.IReadOnlySlice.Count ireadonlyslice.html#Count +Pathfinding.RVO.IReadOnlySlice.data ireadonlyslice.html#data +Pathfinding.RVO.IReadOnlySlice.length ireadonlyslice.html#length +Pathfinding.RVO.IReadOnlySlice.this[int index] ireadonlyslice.html#thisintindex +Pathfinding.RVO.JobDestinationReached.MarkerAlloc jobdestinationreached.html#MarkerAlloc +Pathfinding.RVO.JobDestinationReached.MarkerFirstPass jobdestinationreached.html#MarkerFirstPass +Pathfinding.RVO.JobDestinationReached.MarkerInvert jobdestinationreached.html#MarkerInvert +Pathfinding.RVO.JobDestinationReached.TempAgentData.blockedAndSlow tempagentdata.html#blockedAndSlow +Pathfinding.RVO.JobDestinationReached.TempAgentData.distToEndSq tempagentdata.html#distToEndSq +Pathfinding.RVO.JobDestinationReached.agentData jobdestinationreached.html#agentData +Pathfinding.RVO.JobDestinationReached.draw jobdestinationreached.html#draw +Pathfinding.RVO.JobDestinationReached.numAgents jobdestinationreached.html#numAgents +Pathfinding.RVO.JobDestinationReached.obstacleData jobdestinationreached.html#obstacleData +Pathfinding.RVO.JobDestinationReached.output jobdestinationreached.html#output +Pathfinding.RVO.JobDestinationReached.temporaryAgentData jobdestinationreached.html#temporaryAgentData +Pathfinding.RVO.JobHardCollisions.CollisionStrength jobhardcollisions.html#CollisionStrength How aggressively hard collisions are resolved. \n\nShould be a value between 0 and 1. +Pathfinding.RVO.JobHardCollisions.agentData jobhardcollisions.html#agentData +Pathfinding.RVO.JobHardCollisions.allowBoundsChecks jobhardcollisions.html#allowBoundsChecks +Pathfinding.RVO.JobHardCollisions.collisionVelocityOffsets jobhardcollisions.html#collisionVelocityOffsets +Pathfinding.RVO.JobHardCollisions.deltaTime jobhardcollisions.html#deltaTime +Pathfinding.RVO.JobHardCollisions.enabled jobhardcollisions.html#enabled +Pathfinding.RVO.JobHardCollisions.neighbours jobhardcollisions.html#neighbours +Pathfinding.RVO.JobHorizonAvoidancePhase1.agentData jobhorizonavoidancephase1.html#agentData +Pathfinding.RVO.JobHorizonAvoidancePhase1.allowBoundsChecks jobhorizonavoidancephase1.html#allowBoundsChecks +Pathfinding.RVO.JobHorizonAvoidancePhase1.desiredTargetPointInVelocitySpace jobhorizonavoidancephase1.html#desiredTargetPointInVelocitySpace +Pathfinding.RVO.JobHorizonAvoidancePhase1.draw jobhorizonavoidancephase1.html#draw +Pathfinding.RVO.JobHorizonAvoidancePhase1.horizonAgentData jobhorizonavoidancephase1.html#horizonAgentData +Pathfinding.RVO.JobHorizonAvoidancePhase1.neighbours jobhorizonavoidancephase1.html#neighbours +Pathfinding.RVO.JobHorizonAvoidancePhase2.allowBoundsChecks jobhorizonavoidancephase2.html#allowBoundsChecks +Pathfinding.RVO.JobHorizonAvoidancePhase2.desiredTargetPointInVelocitySpace jobhorizonavoidancephase2.html#desiredTargetPointInVelocitySpace +Pathfinding.RVO.JobHorizonAvoidancePhase2.desiredVelocity jobhorizonavoidancephase2.html#desiredVelocity +Pathfinding.RVO.JobHorizonAvoidancePhase2.horizonAgentData jobhorizonavoidancephase2.html#horizonAgentData +Pathfinding.RVO.JobHorizonAvoidancePhase2.movementPlane jobhorizonavoidancephase2.html#movementPlane +Pathfinding.RVO.JobHorizonAvoidancePhase2.neighbours jobhorizonavoidancephase2.html#neighbours +Pathfinding.RVO.JobHorizonAvoidancePhase2.versions jobhorizonavoidancephase2.html#versions +Pathfinding.RVO.JobRVO.LinearProgram2Output.firstFailedLineIndex linearprogram2output.html#firstFailedLineIndex +Pathfinding.RVO.JobRVO.LinearProgram2Output.velocity linearprogram2output.html#velocity +Pathfinding.RVO.JobRVO.MarkerConvertObstacles1 jobrvo.html#MarkerConvertObstacles1 +Pathfinding.RVO.JobRVO.MarkerConvertObstacles2 jobrvo.html#MarkerConvertObstacles2 +Pathfinding.RVO.JobRVO.MaxObstacleCount jobrvo.html#MaxObstacleCount +Pathfinding.RVO.JobRVO.ORCALine.direction orcaline.html#direction +Pathfinding.RVO.JobRVO.ORCALine.point orcaline.html#point +Pathfinding.RVO.JobRVO.SortByKey.keys sortbykey.html#keys +Pathfinding.RVO.JobRVO.agentData jobrvo.html#agentData +Pathfinding.RVO.JobRVO.allowBoundsChecks jobrvo.html#allowBoundsChecks +Pathfinding.RVO.JobRVO.deltaTime jobrvo.html#deltaTime +Pathfinding.RVO.JobRVO.draw jobrvo.html#draw +Pathfinding.RVO.JobRVO.navmeshEdgeData jobrvo.html#navmeshEdgeData +Pathfinding.RVO.JobRVO.output jobrvo.html#output +Pathfinding.RVO.JobRVO.priorityMultiplier jobrvo.html#priorityMultiplier +Pathfinding.RVO.JobRVO.symmetryBreakingBias jobrvo.html#symmetryBreakingBias +Pathfinding.RVO.JobRVO.temporaryAgentData jobrvo.html#temporaryAgentData +Pathfinding.RVO.JobRVO.useNavmeshAsObstacle jobrvo.html#useNavmeshAsObstacle +Pathfinding.RVO.JobRVOCalculateNeighbours.agentData jobrvocalculateneighbours.html#agentData +Pathfinding.RVO.JobRVOCalculateNeighbours.allowBoundsChecks jobrvocalculateneighbours.html#allowBoundsChecks +Pathfinding.RVO.JobRVOCalculateNeighbours.outNeighbours jobrvocalculateneighbours.html#outNeighbours +Pathfinding.RVO.JobRVOCalculateNeighbours.output jobrvocalculateneighbours.html#output +Pathfinding.RVO.JobRVOCalculateNeighbours.quadtree jobrvocalculateneighbours.html#quadtree +Pathfinding.RVO.JobRVOPreprocess.agentData jobrvopreprocess.html#agentData +Pathfinding.RVO.JobRVOPreprocess.endIndex jobrvopreprocess.html#endIndex +Pathfinding.RVO.JobRVOPreprocess.previousOutput jobrvopreprocess.html#previousOutput +Pathfinding.RVO.JobRVOPreprocess.startIndex jobrvopreprocess.html#startIndex +Pathfinding.RVO.JobRVOPreprocess.temporaryAgentData jobrvopreprocess.html#temporaryAgentData +Pathfinding.RVO.MovementPlane rvo.html#MovementPlane Plane which movement is primarily happening in. +Pathfinding.RVO.NativeHashMapIntInt rvo.html#NativeHashMapIntInt +Pathfinding.RVO.ObstacleType rvo.html#ObstacleType Type of obstacle shape. \n\n[more in online documentation] +Pathfinding.RVO.ObstacleVertexGroup.boundsMn obstaclevertexgroup.html#boundsMn +Pathfinding.RVO.ObstacleVertexGroup.boundsMx obstaclevertexgroup.html#boundsMx +Pathfinding.RVO.ObstacleVertexGroup.type obstaclevertexgroup.html#type Type of obstacle shape. +Pathfinding.RVO.ObstacleVertexGroup.vertexCount obstaclevertexgroup.html#vertexCount Number of vertices that this group consists of. +Pathfinding.RVO.RVOController.AvoidingAnyAgents rvocontroller.html#AvoidingAnyAgents True if the agent's movement is affected by any other agents or obstacles. \n\nIf the agent is all alone, and can just move in a straight line to its target, this will be false. If it has to adjust its velocity, even slightly, to avoid collisions, this will be true. +Pathfinding.RVO.RVOController.RVOControllerMigrations rvocontroller.html#RVOControllerMigrations +Pathfinding.RVO.RVOController.agentTimeHorizon rvocontroller.html#agentTimeHorizon How far into the future to look for collisions with other agents (in seconds) +Pathfinding.RVO.RVOController.ai rvocontroller.html#ai Cached reference to a movement script (if one is used) +Pathfinding.RVO.RVOController.aiBackingField rvocontroller.html#aiBackingField +Pathfinding.RVO.RVOController.center rvocontroller.html#center Center of the agent relative to the pivot point of this game object. \n\n[more in online documentation] +Pathfinding.RVO.RVOController.centerBackingField rvocontroller.html#centerBackingField +Pathfinding.RVO.RVOController.collidesWith rvocontroller.html#collidesWith Layer mask specifying which layers this agent will avoid. \n\nYou can set it as CollidesWith = RVOLayer.DefaultAgent | RVOLayer.Layer3 | RVOLayer.Layer6 ...\n\nThis can be very useful in games which have multiple teams of some sort. For example you usually want the agents in one team to avoid each other, but you do not want them to avoid the enemies.\n\nThis field only affects which other agents that this agent will avoid, it does not affect how other agents react to this agent.\n\n[more in online documentation] +Pathfinding.RVO.RVOController.debug rvocontroller.html#debug Enables drawing debug information in the scene view. +Pathfinding.RVO.RVOController.enableRotation rvocontroller.html#enableRotation [more in online documentation] +Pathfinding.RVO.RVOController.flowFollowingStrength rvocontroller.html#flowFollowingStrength Determines how strongly this agent just follows the flow instead of making other agents avoid it. \n\nThe default value is 0, if it is greater than zero (up to the maximum value of 1) other agents will not avoid this character as much. However it works in a different way to Priority.\n\nA group of agents with FlowFollowingStrength set to a high value that all try to reach the same point will end up just settling to stationary positions around that point, none will push the others away to any significant extent. This is tricky to achieve with priorities as priorities are all relative, so setting all agents to a low priority is the same thing as not changing priorities at all.\n\nShould be a value in the range [0, 1]. +Pathfinding.RVO.RVOController.height rvocontroller.html#height Height of the agent in world units. \n\n[more in online documentation] +Pathfinding.RVO.RVOController.heightBackingField rvocontroller.html#heightBackingField +Pathfinding.RVO.RVOController.layer rvocontroller.html#layer Specifies the avoidance layer for this agent. \n\nThe collidesWith mask on other agents will determine if they will avoid this agent. +Pathfinding.RVO.RVOController.lockWhenNotMoving rvocontroller.html#lockWhenNotMoving Automatically set locked to true when desired velocity is approximately zero. \n\nThis prevents other units from pushing them away when they are supposed to e.g block a choke point.\n\nWhen this is true every call to SetTarget or Move will set the locked field to true if the desired velocity was non-zero or false if it was zero. +Pathfinding.RVO.RVOController.locked rvocontroller.html#locked A locked unit cannot move. \n\nOther units will still avoid it but avoidance quality is not the best. +Pathfinding.RVO.RVOController.mask rvocontroller.html#mask [more in online documentation] +Pathfinding.RVO.RVOController.maxNeighbours rvocontroller.html#maxNeighbours Max number of other agents to take into account. \n\nA smaller value can reduce CPU load, a higher value can lead to better local avoidance quality. +Pathfinding.RVO.RVOController.maxSpeed rvocontroller.html#maxSpeed [more in online documentation] +Pathfinding.RVO.RVOController.movementPlane rvocontroller.html#movementPlane Determines if the XY (2D) or XZ (3D) plane is used for movement. +Pathfinding.RVO.RVOController.movementPlaneBackingField rvocontroller.html#movementPlaneBackingField +Pathfinding.RVO.RVOController.movementPlaneMode rvocontroller.html#movementPlaneMode +Pathfinding.RVO.RVOController.obstacleQuery rvocontroller.html#obstacleQuery +Pathfinding.RVO.RVOController.obstacleTimeHorizon rvocontroller.html#obstacleTimeHorizon How far into the future to look for collisions with obstacles (in seconds) +Pathfinding.RVO.RVOController.position rvocontroller.html#position Current position of the agent. \n\nNote that this is only updated every local avoidance simulation step, not every frame. +Pathfinding.RVO.RVOController.priority rvocontroller.html#priority How strongly other agents will avoid this agent. \n\nUsually a value between 0 and 1. Agents with similar priorities will avoid each other with an equal strength. If an agent sees another agent with a higher priority than itself it will avoid that agent more strongly. In the extreme case (e.g this agent has a priority of 0 and the other agent has a priority of 1) it will treat the other agent as being a moving obstacle. Similarly if an agent sees another agent with a lower priority than itself it will avoid that agent less.\n\nIn general the avoidance strength for this agent is: <b>[code in online documentation]</b> +Pathfinding.RVO.RVOController.priorityMultiplier rvocontroller.html#priorityMultiplier Priority multiplier. \n\nThis functions identically to the priority, however it is not exposed in the Unity inspector. It is primarily used by the Pathfinding.RVO.RVODestinationCrowdedBehavior. +Pathfinding.RVO.RVOController.radius rvocontroller.html#radius Radius of the agent in world units. \n\n[more in online documentation] +Pathfinding.RVO.RVOController.radiusBackingField rvocontroller.html#radiusBackingField +Pathfinding.RVO.RVOController.rotationSpeed rvocontroller.html#rotationSpeed [more in online documentation] +Pathfinding.RVO.RVOController.rvoAgent rvocontroller.html#rvoAgent Reference to the internal agent. +Pathfinding.RVO.RVOController.simulator rvocontroller.html#simulator Reference to the rvo simulator. +Pathfinding.RVO.RVOController.tr rvocontroller.html#tr Cached tranform component. +Pathfinding.RVO.RVOController.velocity rvocontroller.html#velocity Current calculated velocity of the agent. \n\nThis is not necessarily the velocity the agent is actually moving with (that is up to the movement script to decide) but it is the velocity that the RVO system has calculated is best for avoiding obstacles and reaching the target.\n\n[more in online documentation]\nYou can also set the velocity of the agent. This will override the local avoidance input completely. It is useful if you have a player controlled character and want other agents to avoid it.\n\nSetting the velocity using this property will mark the agent as being externally controlled for 1 simulation step. Local avoidance calculations will be skipped for the next simulation step but will be resumed after that unless this property is set again.\n\nNote that if you set the velocity the value that can be read from this property will not change until the next simulation step.\n\n[more in online documentation] +Pathfinding.RVO.RVOController.wallAvoidFalloff rvocontroller.html#wallAvoidFalloff How much the wallAvoidForce decreases with distance. \n\nThe strenght of avoidance is: <b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.RVO.RVOController.wallAvoidForce rvocontroller.html#wallAvoidForce An extra force to avoid walls. \n\nThis can be good way to reduce "wall hugging" behaviour.\n\n[more in online documentation] +Pathfinding.RVO.RVODestinationCrowdedBehavior.DefaultPriority rvodestinationcrowdedbehavior.html#DefaultPriority +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.QueryData.agentDestination querydata.html#agentDestination +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.QueryData.agentIndex querydata.html#agentIndex +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.QueryData.densityThreshold querydata.html#densityThreshold +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.agentDesiredSpeed jobdensitycheck.html#agentDesiredSpeed +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.agentOutputSpeed jobdensitycheck.html#agentOutputSpeed +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.agentOutputTargetPoint jobdensitycheck.html#agentOutputTargetPoint +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.agentPosition jobdensitycheck.html#agentPosition +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.agentRadius jobdensitycheck.html#agentRadius +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.agentTargetPoint jobdensitycheck.html#agentTargetPoint +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.allowBoundsChecks jobdensitycheck.html#allowBoundsChecks +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.data jobdensitycheck.html#data +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.deltaTime jobdensitycheck.html#deltaTime +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.outThresholdResult jobdensitycheck.html#outThresholdResult +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.progressAverage jobdensitycheck.html#progressAverage +Pathfinding.RVO.RVODestinationCrowdedBehavior.JobDensityCheck.quadtree jobdensitycheck.html#quadtree +Pathfinding.RVO.RVODestinationCrowdedBehavior.MaximumCirclePackingDensity rvodestinationcrowdedbehavior.html#MaximumCirclePackingDensity See <a href="https://en.wikipedia.org/wiki/Circle_packing">https://en.wikipedia.org/wiki/Circle_packing</a>. +Pathfinding.RVO.RVODestinationCrowdedBehavior.MoveBackPriority rvodestinationcrowdedbehavior.html#MoveBackPriority +Pathfinding.RVO.RVODestinationCrowdedBehavior.StoppedPriority rvodestinationcrowdedbehavior.html#StoppedPriority +Pathfinding.RVO.RVODestinationCrowdedBehavior.densityThreshold rvodestinationcrowdedbehavior.html#densityThreshold The threshold for when to stop. \n\nSee the class description for more info. +Pathfinding.RVO.RVODestinationCrowdedBehavior.enabled rvodestinationcrowdedbehavior.html#enabled Enables or disables this module. +Pathfinding.RVO.RVODestinationCrowdedBehavior.lastJobDensityResult rvodestinationcrowdedbehavior.html#lastJobDensityResult +Pathfinding.RVO.RVODestinationCrowdedBehavior.lastShouldStopDestination rvodestinationcrowdedbehavior.html#lastShouldStopDestination +Pathfinding.RVO.RVODestinationCrowdedBehavior.lastShouldStopResult rvodestinationcrowdedbehavior.html#lastShouldStopResult +Pathfinding.RVO.RVODestinationCrowdedBehavior.progressAverage rvodestinationcrowdedbehavior.html#progressAverage +Pathfinding.RVO.RVODestinationCrowdedBehavior.reachedDestination rvodestinationcrowdedbehavior.html#reachedDestination True if the agent has reached its destination. \n\nIf the agents destination changes this may return false until the next frame. Note that changing the destination every frame may cause this value to never return true.\n\nTrue will be returned if the agent has stopped due to being close enough to the destination. This may be quite some distance away if there are many other agents around the destination.\n\n[more in online documentation] +Pathfinding.RVO.RVODestinationCrowdedBehavior.reachedDestinationPoint rvodestinationcrowdedbehavior.html#reachedDestinationPoint +Pathfinding.RVO.RVODestinationCrowdedBehavior.returnAfterBeingPushedAway rvodestinationcrowdedbehavior.html#returnAfterBeingPushedAway If true, the agent will start to move to the destination again if it determines that it is now less crowded. \n\nIf false and the destination becomes less crowded (or if the agent is pushed away from the destination in some way), then the agent will still stay put. +Pathfinding.RVO.RVODestinationCrowdedBehavior.shouldStopDelayTimer rvodestinationcrowdedbehavior.html#shouldStopDelayTimer +Pathfinding.RVO.RVODestinationCrowdedBehavior.timer1 rvodestinationcrowdedbehavior.html#timer1 +Pathfinding.RVO.RVODestinationCrowdedBehavior.wasEnabled rvodestinationcrowdedbehavior.html#wasEnabled +Pathfinding.RVO.RVODestinationCrowdedBehavior.wasStopped rvodestinationcrowdedbehavior.html#wasStopped +Pathfinding.RVO.RVOLayer rvo.html#RVOLayer +Pathfinding.RVO.RVONavmesh.wallHeight rvonavmesh.html#wallHeight Height of the walls added for each obstacle edge. \n\nIf a graph contains overlapping regions (e.g multiple floor in a building) you should set this low enough so that edges on different levels do not interfere, but high enough so that agents cannot move over them by mistake. +Pathfinding.RVO.RVOObstacle.ExecuteInEditor rvoobstacle.html#ExecuteInEditor Enable executing in editor to draw gizmos. \n\nIf enabled, the CreateObstacles function will be executed in the editor as well in order to draw gizmos. +Pathfinding.RVO.RVOObstacle.Height rvoobstacle.html#Height +Pathfinding.RVO.RVOObstacle.LocalCoordinates rvoobstacle.html#LocalCoordinates If enabled, all coordinates are handled as local. +Pathfinding.RVO.RVOObstacle.ObstacleVertexWinding rvoobstacle.html#ObstacleVertexWinding RVO Obstacle Modes. \n\nDetermines winding order of obstacle vertices +Pathfinding.RVO.RVOObstacle.StaticObstacle rvoobstacle.html#StaticObstacle Static or dynamic. \n\nThis determines if the obstacle can be updated by e.g moving the transform around in the scene. +Pathfinding.RVO.RVOObstacle.layer rvoobstacle.html#layer +Pathfinding.RVO.RVOObstacle.obstacleMode rvoobstacle.html#obstacleMode Mode of the obstacle. \n\nDetermines winding order of the vertices +Pathfinding.RVO.RVOObstacleCache.MarkerAllocate rvoobstaclecache.html#MarkerAllocate +Pathfinding.RVO.RVOObstacleCache.ObstacleSegment.vertex1 obstaclesegment.html#vertex1 +Pathfinding.RVO.RVOObstacleCache.ObstacleSegment.vertex1LinkId obstaclesegment.html#vertex1LinkId +Pathfinding.RVO.RVOObstacleCache.ObstacleSegment.vertex2 obstaclesegment.html#vertex2 +Pathfinding.RVO.RVOObstacleCache.ObstacleSegment.vertex2LinkId obstaclesegment.html#vertex2LinkId +Pathfinding.RVO.RVOQuadtreeBurst.BitPackingMask rvoquadtreeburst.html#BitPackingMask +Pathfinding.RVO.RVOQuadtreeBurst.BitPackingShift rvoquadtreeburst.html#BitPackingShift +Pathfinding.RVO.RVOQuadtreeBurst.ChildLookup rvoquadtreeburst.html#ChildLookup For a given number, contains the index of the first non-zero bit. \n\nOnly the values 0 through 15 are used when movementPlane is XZ or XY.\n\nUse bytes instead of ints to save some precious L1 cache memory. +Pathfinding.RVO.RVOQuadtreeBurst.DebugDrawJob.draw debugdrawjob.html#draw +Pathfinding.RVO.RVOQuadtreeBurst.DebugDrawJob.quadtree debugdrawjob.html#quadtree +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.agentPositions jobbuild.html#agentPositions +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.agentRadii jobbuild.html#agentRadii +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.agentSpeeds jobbuild.html#agentSpeeds +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.agentVersions jobbuild.html#agentVersions +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.agents jobbuild.html#agents Length should be greater or equal to agentPositions.Length. +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.movementPlane jobbuild.html#movementPlane +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.numAgents jobbuild.html#numAgents +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.outAgentCount jobbuild.html#outAgentCount Should have size 1. +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.outAgentPositions jobbuild.html#outAgentPositions +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.outAgentRadii jobbuild.html#outAgentRadii +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.outArea jobbuild.html#outArea Should have size: InnerNodeCountUpperBound(numAgents) +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.outBoundingBox jobbuild.html#outBoundingBox Should have size 2. +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.outChildPointers jobbuild.html#outChildPointers Should have size: InnerNodeCountUpperBound(numAgents) +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.outMaxRadius jobbuild.html#outMaxRadius Should have size: InnerNodeCountUpperBound(numAgents) +Pathfinding.RVO.RVOQuadtreeBurst.JobBuild.outMaxSpeeds jobbuild.html#outMaxSpeeds Should have size: InnerNodeCountUpperBound(numAgents) +Pathfinding.RVO.RVOQuadtreeBurst.LeafNodeBit rvoquadtreeburst.html#LeafNodeBit +Pathfinding.RVO.RVOQuadtreeBurst.LeafSize rvoquadtreeburst.html#LeafSize +Pathfinding.RVO.RVOQuadtreeBurst.MaxAgents rvoquadtreeburst.html#MaxAgents +Pathfinding.RVO.RVOQuadtreeBurst.MaxDepth rvoquadtreeburst.html#MaxDepth +Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery.agentRadius quadtreequery.html#agentRadius +Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery.maxCount quadtreequery.html#maxCount +Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery.outputStartIndex quadtreequery.html#outputStartIndex +Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery.position quadtreequery.html#position +Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery.result quadtreequery.html#result +Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery.resultDistances quadtreequery.html#resultDistances +Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery.speed quadtreequery.html#speed +Pathfinding.RVO.RVOQuadtreeBurst.QuadtreeQuery.timeHorizon quadtreequery.html#timeHorizon +Pathfinding.RVO.RVOQuadtreeBurst.agentCountBuffer rvoquadtreeburst.html#agentCountBuffer +Pathfinding.RVO.RVOQuadtreeBurst.agentPositions rvoquadtreeburst.html#agentPositions +Pathfinding.RVO.RVOQuadtreeBurst.agentRadii rvoquadtreeburst.html#agentRadii +Pathfinding.RVO.RVOQuadtreeBurst.agents rvoquadtreeburst.html#agents +Pathfinding.RVO.RVOQuadtreeBurst.boundingBoxBuffer rvoquadtreeburst.html#boundingBoxBuffer +Pathfinding.RVO.RVOQuadtreeBurst.bounds rvoquadtreeburst.html#bounds +Pathfinding.RVO.RVOQuadtreeBurst.childPointers rvoquadtreeburst.html#childPointers +Pathfinding.RVO.RVOQuadtreeBurst.maxRadius rvoquadtreeburst.html#maxRadius +Pathfinding.RVO.RVOQuadtreeBurst.maxSpeeds rvoquadtreeburst.html#maxSpeeds +Pathfinding.RVO.RVOQuadtreeBurst.movementPlane rvoquadtreeburst.html#movementPlane +Pathfinding.RVO.RVOQuadtreeBurst.nodeAreas rvoquadtreeburst.html#nodeAreas +Pathfinding.RVO.RVOSimulator.active rvosimulator.html#active First RVOSimulator in the scene (usually there is only one) +Pathfinding.RVO.RVOSimulator.desiredSimulationFPS rvosimulator.html#desiredSimulationFPS Desired FPS for rvo simulation. \n\nIt is usually not necessary to run a crowd simulation at a very high fps. Usually 10-30 fps is enough, but it can be increased for better quality. The rvo simulation will never run at a higher fps than the game +Pathfinding.RVO.RVOSimulator.doubleBuffering rvosimulator.html#doubleBuffering Calculate local avoidance in between frames. \n\nIf this is enabled and multithreading is used, the local avoidance calculations will continue to run until the next frame instead of waiting for them to be done the same frame. This can increase the performance but it can make the agents seem a little less responsive.\n\nThis will only be read at Awake. \n\n[more in online documentation] +Pathfinding.RVO.RVOSimulator.drawQuadtree rvosimulator.html#drawQuadtree +Pathfinding.RVO.RVOSimulator.hardCollisions rvosimulator.html#hardCollisions Prevent agent overlap more aggressively. \n\nThis will it much harder for agents to overlap, even in crowded scenarios. It is particularly noticable when running at a low simulation fps. This does not influence agent avoidance when the agents are not overlapping.\n\nEnabling this has a small performance penalty, usually not high enough to care about.\n\nDisabling this may be beneficial if you want softer behaviour when larger groups of agents collide. +Pathfinding.RVO.RVOSimulator.movementPlane rvosimulator.html#movementPlane Determines if the XY (2D) or XZ (3D) plane is used for movement. \n\nFor 2D games you would set this to XY and for 3D games you would usually set it to XZ. +Pathfinding.RVO.RVOSimulator.simulatorBurst rvosimulator.html#simulatorBurst Reference to the internal simulator. +Pathfinding.RVO.RVOSimulator.symmetryBreakingBias rvosimulator.html#symmetryBreakingBias Bias agents to pass each other on the right side. \n\nIf the desired velocity of an agent puts it on a collision course with another agent or an obstacle its desired velocity will be rotated this number of radians (1 radian is approximately 57°) to the right. This helps to break up symmetries and makes it possible to resolve some situations much faster.\n\nWhen many agents have the same goal this can however have the side effect that the group clustered around the target point may as a whole start to spin around the target point.\n\nRecommended values are in the range of 0 to 0.2.\n\nIf this value is negative, the agents will be biased towards passing each other on the left side instead. +Pathfinding.RVO.RVOSimulator.useNavmeshAsObstacle rvosimulator.html#useNavmeshAsObstacle Allows the local avoidance system to take the edges of the navmesh into account. \n\nThis will make agents try to avoid moving into, and getting pushed into the borders of the navmesh.\n\nThis works best on navmesh/recast graphs, but can also be used on grid graphs.\n\nEnabling this has a performance impact.\n\n[more in online documentation]\nIf you are writing your own movement script, you must call RVOController.SetObstacleQuery every frame for the navmesh obstacle detection to work. +Pathfinding.RVO.RVOSimulator.workerThreads rvosimulator.html#workerThreads Number of RVO worker threads. \n\nIf set to None, no multithreading will be used. Using multithreading can significantly improve performance by offloading work to other CPU cores.\n\n[more in online documentation] +Pathfinding.RVO.RVOSquareObstacle.ExecuteInEditor rvosquareobstacle.html#ExecuteInEditor +Pathfinding.RVO.RVOSquareObstacle.Height rvosquareobstacle.html#Height +Pathfinding.RVO.RVOSquareObstacle.LocalCoordinates rvosquareobstacle.html#LocalCoordinates +Pathfinding.RVO.RVOSquareObstacle.StaticObstacle rvosquareobstacle.html#StaticObstacle +Pathfinding.RVO.RVOSquareObstacle.center rvosquareobstacle.html#center Center of the square. +Pathfinding.RVO.RVOSquareObstacle.height rvosquareobstacle.html#height Height of the obstacle. +Pathfinding.RVO.RVOSquareObstacle.size rvosquareobstacle.html#size Size of the square. +Pathfinding.RVO.ReachedEndOfPath rvo.html#ReachedEndOfPath +Pathfinding.RVO.SimulatorBurst.Agent.AgentIndex agent.html#AgentIndex +Pathfinding.RVO.SimulatorBurst.Agent.AgentTimeHorizon agent.html#AgentTimeHorizon +Pathfinding.RVO.SimulatorBurst.Agent.AvoidingAnyAgents agent.html#AvoidingAnyAgents +Pathfinding.RVO.SimulatorBurst.Agent.CalculatedEffectivelyReachedDestination agent.html#CalculatedEffectivelyReachedDestination +Pathfinding.RVO.SimulatorBurst.Agent.CalculatedSpeed agent.html#CalculatedSpeed +Pathfinding.RVO.SimulatorBurst.Agent.CalculatedTargetPoint agent.html#CalculatedTargetPoint +Pathfinding.RVO.SimulatorBurst.Agent.CollidesWith agent.html#CollidesWith +Pathfinding.RVO.SimulatorBurst.Agent.DebugFlags agent.html#DebugFlags +Pathfinding.RVO.SimulatorBurst.Agent.DestroyedCallback agent.html#DestroyedCallback +Pathfinding.RVO.SimulatorBurst.Agent.FlowFollowingStrength agent.html#FlowFollowingStrength +Pathfinding.RVO.SimulatorBurst.Agent.Height agent.html#Height +Pathfinding.RVO.SimulatorBurst.Agent.HierarchicalNodeIndex agent.html#HierarchicalNodeIndex +Pathfinding.RVO.SimulatorBurst.Agent.Layer agent.html#Layer +Pathfinding.RVO.SimulatorBurst.Agent.Locked agent.html#Locked +Pathfinding.RVO.SimulatorBurst.Agent.MaxNeighbours agent.html#MaxNeighbours +Pathfinding.RVO.SimulatorBurst.Agent.MovementPlane agent.html#MovementPlane +Pathfinding.RVO.SimulatorBurst.Agent.NeighbourCount agent.html#NeighbourCount +Pathfinding.RVO.SimulatorBurst.Agent.ObstacleTimeHorizon agent.html#ObstacleTimeHorizon +Pathfinding.RVO.SimulatorBurst.Agent.Position agent.html#Position +Pathfinding.RVO.SimulatorBurst.Agent.PreCalculationCallback agent.html#PreCalculationCallback +Pathfinding.RVO.SimulatorBurst.Agent.Priority agent.html#Priority +Pathfinding.RVO.SimulatorBurst.Agent.Radius agent.html#Radius +Pathfinding.RVO.SimulatorBurst.Agent.agentIndex agent.html#agentIndex +Pathfinding.RVO.SimulatorBurst.Agent.simulator agent.html#simulator +Pathfinding.RVO.SimulatorBurst.AgentBounds simulatorburst.html#AgentBounds +Pathfinding.RVO.SimulatorBurst.AgentCount simulatorburst.html#AgentCount Number of agents in the simulation. +Pathfinding.RVO.SimulatorBurst.AgentData.agentObstacleMapping agentdata.html#agentObstacleMapping Which obstacle data in the ObstacleData.obstacles array the agent should use for avoidance. +Pathfinding.RVO.SimulatorBurst.AgentData.agentTimeHorizon agentdata.html#agentTimeHorizon +Pathfinding.RVO.SimulatorBurst.AgentData.allowedVelocityDeviationAngles agentdata.html#allowedVelocityDeviationAngles x = signed left angle in radians, y = signed right angle in radians (should be greater than x) +Pathfinding.RVO.SimulatorBurst.AgentData.collidesWith agentdata.html#collidesWith +Pathfinding.RVO.SimulatorBurst.AgentData.collisionNormal agentdata.html#collisionNormal +Pathfinding.RVO.SimulatorBurst.AgentData.debugFlags agentdata.html#debugFlags +Pathfinding.RVO.SimulatorBurst.AgentData.desiredSpeed agentdata.html#desiredSpeed +Pathfinding.RVO.SimulatorBurst.AgentData.endOfPath agentdata.html#endOfPath +Pathfinding.RVO.SimulatorBurst.AgentData.flowFollowingStrength agentdata.html#flowFollowingStrength +Pathfinding.RVO.SimulatorBurst.AgentData.height agentdata.html#height +Pathfinding.RVO.SimulatorBurst.AgentData.hierarchicalNodeIndex agentdata.html#hierarchicalNodeIndex +Pathfinding.RVO.SimulatorBurst.AgentData.layer agentdata.html#layer +Pathfinding.RVO.SimulatorBurst.AgentData.locked agentdata.html#locked +Pathfinding.RVO.SimulatorBurst.AgentData.manuallyControlled agentdata.html#manuallyControlled +Pathfinding.RVO.SimulatorBurst.AgentData.maxNeighbours agentdata.html#maxNeighbours +Pathfinding.RVO.SimulatorBurst.AgentData.maxSpeed agentdata.html#maxSpeed +Pathfinding.RVO.SimulatorBurst.AgentData.movementPlane agentdata.html#movementPlane +Pathfinding.RVO.SimulatorBurst.AgentData.obstacleTimeHorizon agentdata.html#obstacleTimeHorizon +Pathfinding.RVO.SimulatorBurst.AgentData.position agentdata.html#position +Pathfinding.RVO.SimulatorBurst.AgentData.priority agentdata.html#priority +Pathfinding.RVO.SimulatorBurst.AgentData.radius agentdata.html#radius +Pathfinding.RVO.SimulatorBurst.AgentData.targetPoint agentdata.html#targetPoint +Pathfinding.RVO.SimulatorBurst.AgentData.version agentdata.html#version +Pathfinding.RVO.SimulatorBurst.AgentOutputData.blockedByAgents agentoutputdata.html#blockedByAgents +Pathfinding.RVO.SimulatorBurst.AgentOutputData.effectivelyReachedDestination agentoutputdata.html#effectivelyReachedDestination +Pathfinding.RVO.SimulatorBurst.AgentOutputData.forwardClearance agentoutputdata.html#forwardClearance +Pathfinding.RVO.SimulatorBurst.AgentOutputData.numNeighbours agentoutputdata.html#numNeighbours +Pathfinding.RVO.SimulatorBurst.AgentOutputData.speed agentoutputdata.html#speed +Pathfinding.RVO.SimulatorBurst.AgentOutputData.targetPoint agentoutputdata.html#targetPoint +Pathfinding.RVO.SimulatorBurst.DesiredDeltaTime simulatorburst.html#DesiredDeltaTime Time in seconds between each simulation step. \n\nThis is the desired delta time, the simulation will never run at a higher fps than the rate at which the Update function is called. +Pathfinding.RVO.SimulatorBurst.HardCollisions simulatorburst.html#HardCollisions Use hard collisions. +Pathfinding.RVO.SimulatorBurst.HorizonAgentData.horizonMaxAngle horizonagentdata.html#horizonMaxAngle +Pathfinding.RVO.SimulatorBurst.HorizonAgentData.horizonMinAngle horizonagentdata.html#horizonMinAngle +Pathfinding.RVO.SimulatorBurst.HorizonAgentData.horizonSide horizonagentdata.html#horizonSide +Pathfinding.RVO.SimulatorBurst.MaxBlockingAgentCount simulatorburst.html#MaxBlockingAgentCount +Pathfinding.RVO.SimulatorBurst.MaxNeighbourCount simulatorburst.html#MaxNeighbourCount +Pathfinding.RVO.SimulatorBurst.MaxObstacleVertices simulatorburst.html#MaxObstacleVertices +Pathfinding.RVO.SimulatorBurst.MovementPlane simulatorburst.html#MovementPlane +Pathfinding.RVO.SimulatorBurst.ObstacleData.obstacleVertexGroups obstacledata.html#obstacleVertexGroups Groups of vertices representing obstacles. \n\nAn obstacle is either a cycle or a chain of vertices +Pathfinding.RVO.SimulatorBurst.ObstacleData.obstacleVertices obstacledata.html#obstacleVertices Vertices of all obstacles. +Pathfinding.RVO.SimulatorBurst.ObstacleData.obstacles obstacledata.html#obstacles Obstacle sets, each one is represented as a set of obstacle vertex groups. +Pathfinding.RVO.SimulatorBurst.SymmetryBreakingBias simulatorburst.html#SymmetryBreakingBias Bias agents to pass each other on the right side. \n\nIf the desired velocity of an agent puts it on a collision course with another agent or an obstacle its desired velocity will be rotated this number of radians (1 radian is approximately 57°) to the right. This helps to break up symmetries and makes it possible to resolve some situations much faster.\n\nWhen many agents have the same goal this can however have the side effect that the group clustered around the target point may as a whole start to spin around the target point.\n\nRecommended values are in the range of 0 to 0.2.\n\nIf this value is negative, the agents will be biased towards passing each other on the left side instead. +Pathfinding.RVO.SimulatorBurst.TemporaryAgentData.collisionVelocityOffsets temporaryagentdata.html#collisionVelocityOffsets +Pathfinding.RVO.SimulatorBurst.TemporaryAgentData.currentVelocity temporaryagentdata.html#currentVelocity +Pathfinding.RVO.SimulatorBurst.TemporaryAgentData.desiredTargetPointInVelocitySpace temporaryagentdata.html#desiredTargetPointInVelocitySpace +Pathfinding.RVO.SimulatorBurst.TemporaryAgentData.desiredVelocity temporaryagentdata.html#desiredVelocity +Pathfinding.RVO.SimulatorBurst.TemporaryAgentData.neighbours temporaryagentdata.html#neighbours +Pathfinding.RVO.SimulatorBurst.UseNavmeshAsObstacle simulatorburst.html#UseNavmeshAsObstacle +Pathfinding.RVO.SimulatorBurst.agentDestroyCallbacks simulatorburst.html#agentDestroyCallbacks +Pathfinding.RVO.SimulatorBurst.agentPreCalculationCallbacks simulatorburst.html#agentPreCalculationCallbacks +Pathfinding.RVO.SimulatorBurst.debugDrawingScope simulatorburst.html#debugDrawingScope Scope for drawing gizmos even on frames during which the simulation is not running. \n\nThis is used to draw the obstacles, quadtree and agent debug lines. +Pathfinding.RVO.SimulatorBurst.desiredDeltaTime simulatorburst.html#desiredDeltaTime Inverse desired simulation fps. \n\n[more in online documentation] +Pathfinding.RVO.SimulatorBurst.drawQuadtree simulatorburst.html#drawQuadtree +Pathfinding.RVO.SimulatorBurst.freeAgentIndices simulatorburst.html#freeAgentIndices +Pathfinding.RVO.SimulatorBurst.horizonAgentData simulatorburst.html#horizonAgentData +Pathfinding.RVO.SimulatorBurst.lastJob simulatorburst.html#lastJob Job handle for the last update. +Pathfinding.RVO.SimulatorBurst.movementPlane simulatorburst.html#movementPlane Determines if the XY (2D) or XZ (3D) plane is used for movement. +Pathfinding.RVO.SimulatorBurst.numAgents simulatorburst.html#numAgents Number of agents in this simulation. +Pathfinding.RVO.SimulatorBurst.obstacleData simulatorburst.html#obstacleData Internal obstacle data. \n\nNormally you will never need to access this directly +Pathfinding.RVO.SimulatorBurst.outputData simulatorburst.html#outputData Internal simulation data. \n\nCan be used if you need very high performance access to the agent data. Normally you would use the SimulatorBurst.Agent class instead (implements the IAgent interface). +Pathfinding.RVO.SimulatorBurst.quadtree simulatorburst.html#quadtree Quadtree for this simulation. \n\nUsed internally by the simulation to perform fast neighbour lookups for each agent. Please only read from this tree, do not rebuild it since that can interfere with the simulation. It is rebuilt when necessary. +Pathfinding.RVO.SimulatorBurst.simulationData simulatorburst.html#simulationData Internal simulation data. \n\nCan be used if you need very high performance access to the agent data. Normally you would use the SimulatorBurst.Agent class instead (implements the IAgent interface). +Pathfinding.RVO.SimulatorBurst.temporaryAgentData simulatorburst.html#temporaryAgentData +Pathfinding.RVO.UnmanagedObstacle.groupsAllocation unmanagedobstacle.html#groupsAllocation The allocation in ObstacleData.obstacles which represents the obstacle groups. +Pathfinding.RVO.UnmanagedObstacle.verticesAllocation unmanagedobstacle.html#verticesAllocation The allocation in ObstacleData.obstacleVertices which represents all vertices used for these obstacles. +Pathfinding.RVO.XYMovementPlane.matrix xymovementplane.html#matrix +Pathfinding.RVO.XZMovementPlane.matrix xzmovementplane.html#matrix +Pathfinding.RVOSimulatorEditor.movementPlaneOptions rvosimulatoreditor.html#movementPlaneOptions +Pathfinding.RadiusModifier.Order radiusmodifier.html#Order +Pathfinding.RadiusModifier.TangentType radiusmodifier.html#TangentType +Pathfinding.RadiusModifier.a1 radiusmodifier.html#a1 +Pathfinding.RadiusModifier.a2 radiusmodifier.html#a2 +Pathfinding.RadiusModifier.detail radiusmodifier.html#detail Detail of generated circle segments. \n\nMeasured as steps per full circle.\n\nIt is more performant to use a low value. For movement, using a high value will barely improve path quality. +Pathfinding.RadiusModifier.dir radiusmodifier.html#dir +Pathfinding.RadiusModifier.radi radiusmodifier.html#radi +Pathfinding.RadiusModifier.radius radiusmodifier.html#radius Radius of the circle segments generated. \n\nUsually similar to the character radius. +Pathfinding.RandomPath.aim randompath.html#aim An aim can be used to guide the pathfinder to not take totally random paths. \n\nFor example you might want your AI to continue in generally the same direction as before, then you can specify aim to be transform.postion + transform.forward*10 which will make it more often take paths nearer that point \n\n[more in online documentation] +Pathfinding.RandomPath.aimStrength randompath.html#aimStrength If an aim is set, the higher this value is, the more it will try to reach aim. \n\nRecommended values are between 0 and 10. +Pathfinding.RandomPath.chosenPathNodeGScore randompath.html#chosenPathNodeGScore +Pathfinding.RandomPath.chosenPathNodeIndex randompath.html#chosenPathNodeIndex Currently chosen end node. +Pathfinding.RandomPath.endPointKnownBeforeCalculation randompath.html#endPointKnownBeforeCalculation +Pathfinding.RandomPath.hasEndPoint randompath.html#hasEndPoint +Pathfinding.RandomPath.maxGScore randompath.html#maxGScore The G score of maxGScorePathNodeIndex. +Pathfinding.RandomPath.maxGScorePathNodeIndex randompath.html#maxGScorePathNodeIndex The node with the highest G score which is still lower than searchLength. \n\nUsed as a backup if a node with a G score higher than searchLength could not be found +Pathfinding.RandomPath.nodesEvaluatedRep randompath.html#nodesEvaluatedRep +Pathfinding.RandomPath.rnd randompath.html#rnd Random number generator. +Pathfinding.RandomPath.searchLength randompath.html#searchLength G score to stop searching at. \n\nThe G score is rougly the distance to get from the start node to a node multiplied by 1000 (per default, see Pathfinding.Int3.Precision), plus any penalties.\n\n <b>[video in online documentation]</b> +Pathfinding.RandomPath.spread randompath.html#spread All G scores between searchLength and searchLength+spread are valid end points, a random one of them is chosen as the final point. \n\nOn grid graphs a low spread usually works (but keep it higher than nodeSize*1000 since that it the default cost of moving between two nodes), on NavMesh graphs I would recommend a higher spread so it can evaluate more nodes.\n\n <b>[video in online documentation]</b> +Pathfinding.RaycastModifier.DPCosts raycastmodifier.html#DPCosts +Pathfinding.RaycastModifier.DPParents raycastmodifier.html#DPParents +Pathfinding.RaycastModifier.Filter.cachedDelegate filter.html#cachedDelegate +Pathfinding.RaycastModifier.Filter.path filter.html#path +Pathfinding.RaycastModifier.Order raycastmodifier.html#Order +Pathfinding.RaycastModifier.Quality raycastmodifier.html#Quality +Pathfinding.RaycastModifier.buffer raycastmodifier.html#buffer +Pathfinding.RaycastModifier.cachedFilter raycastmodifier.html#cachedFilter +Pathfinding.RaycastModifier.cachedNNConstraint raycastmodifier.html#cachedNNConstraint +Pathfinding.RaycastModifier.iterationsByQuality raycastmodifier.html#iterationsByQuality +Pathfinding.RaycastModifier.mask raycastmodifier.html#mask Layer mask used for physics raycasting. \n\nAll objects with layers that are included in this mask will be treated as obstacles. If you are using a grid graph you usually want this to be the same as the mask in the grid graph's 'Collision Testing' settings. +Pathfinding.RaycastModifier.quality raycastmodifier.html#quality Higher quality modes will try harder to find a shorter path. \n\nHigher qualities may be significantly slower than low quality. <b>[image in online documentation]</b> +Pathfinding.RaycastModifier.raycastOffset raycastmodifier.html#raycastOffset Offset from the original positions to perform the raycast. \n\nCan be useful to avoid the raycast intersecting the ground or similar things you do not want to it intersect +Pathfinding.RaycastModifier.thickRaycast raycastmodifier.html#thickRaycast Checks around the line between two points, not just the exact line. \n\nMake sure the ground is either too far below or is not inside the mask since otherwise the raycast might always hit the ground.\n\n[more in online documentation] +Pathfinding.RaycastModifier.thickRaycastRadius raycastmodifier.html#thickRaycastRadius Distance from the ray which will be checked for colliders. +Pathfinding.RaycastModifier.use2DPhysics raycastmodifier.html#use2DPhysics Check for intersections with 2D colliders instead of 3D colliders. \n\nUseful for 2D games.\n\n[more in online documentation] +Pathfinding.RaycastModifier.useGraphRaycasting raycastmodifier.html#useGraphRaycasting Use raycasting on the graphs. \n\nOnly currently works with GridGraph and NavmeshGraph and RecastGraph. [more in online documentation] +Pathfinding.RaycastModifier.useRaycasting raycastmodifier.html#useRaycasting Use Physics.Raycast to simplify the path. +Pathfinding.RecastGraph.BackgroundTraversability recastgraph.html#BackgroundTraversability Whether the base of the graph should default to being walkable or unwalkable. \n\n[more in online documentation] +Pathfinding.RecastGraph.CharacterRadiusInVoxels recastgraph.html#CharacterRadiusInVoxels Convert character radius to a number of voxels. +Pathfinding.RecastGraph.CollectionSettings.FilterMode collectionsettings.html#FilterMode Determines how the initial filtering of objects is done. +Pathfinding.RecastGraph.CollectionSettings.collectionMode collectionsettings.html#collectionMode Determines how the initial filtering of objects is done. \n\n[more in online documentation] +Pathfinding.RecastGraph.CollectionSettings.colliderRasterizeDetail collectionsettings.html#colliderRasterizeDetail Controls detail on rasterization of sphere and capsule colliders. \n\nThe colliders will be approximated with polygons so that the max distance to the theoretical surface is less than 1/(this number of voxels).\n\nA higher value does not necessarily increase quality of the mesh, but a lower value will often speed it up.\n\nYou should try to keep this value as low as possible without affecting the mesh quality since that will yield the fastest scan times.\n\nThe default value is 1, which corresponds to a maximum error of 1 voxel. In most cases, increasing this to a value higher than 2 (corresponding to a maximum error of 0.5 voxels) is not useful.\n\n[more in online documentation] +Pathfinding.RecastGraph.CollectionSettings.layerMask collectionsettings.html#layerMask Objects in all of these layers will be rasterized. \n\nWill only be used if collectionMode is set to Layers.\n\n[more in online documentation] +Pathfinding.RecastGraph.CollectionSettings.onCollectMeshes collectionsettings.html#onCollectMeshes Callback for collecting custom scene meshes. \n\nThis callback will be called once when scanning the graph, to allow you to add custom meshes to the graph, and once every time a graph update happens. Use the RecastMeshGatherer class to add meshes that are to be rasterized.\n\n[more in online documentation]\n<b>[code in online documentation]</b> +Pathfinding.RecastGraph.CollectionSettings.rasterizeColliders collectionsettings.html#rasterizeColliders Use colliders to calculate the navmesh. \n\nDepending on the dimensionMode, either 3D or 2D colliders will be rasterized.\n\nSphere/Capsule/Circle colliders will be approximated using polygons, with the precision specified in RecastGraph.colliderRasterizeDetail.\n\n[more in online documentation] +Pathfinding.RecastGraph.CollectionSettings.rasterizeMeshes collectionsettings.html#rasterizeMeshes Use scene meshes to calculate the navmesh. \n\nThis can get you higher precision than colliders, since colliders are typically very simplified versions of the mesh. However, it is often slower to scan, and graph updates can be particularly slow.\n\nThe reason that graph updates are slower is that there's no efficient way to find all meshes that intersect a given tile, so the graph has to iterate over all meshes in the scene just to find the ones relevant for the tiles that you want to update. Colliders, on the other hand, can be efficiently queried using the physics system.\n\nYou can disable this and attach a RecastMeshObj component (with dynamic=false) to all meshes that you want to be included in the navmesh instead. That way they will be able to be efficiently queried for, without having to iterate through all meshes in the scene.\n\nIn 2D mode, this setting has no effect. +Pathfinding.RecastGraph.CollectionSettings.rasterizeTerrain collectionsettings.html#rasterizeTerrain Use terrains to calculate the navmesh. \n\nIn 2D mode, this setting has no effect. +Pathfinding.RecastGraph.CollectionSettings.rasterizeTrees collectionsettings.html#rasterizeTrees Rasterize tree colliders on terrains. \n\nIf the tree prefab has a collider, that collider will be rasterized. Otherwise a simple box collider will be used and the script will try to adjust it to the tree's scale, it might not do a very good job though so an attached collider is preferable.\n\n[more in online documentation]\nIn 2D mode, this setting has no effect.\n\n[more in online documentation] +Pathfinding.RecastGraph.CollectionSettings.tagMask collectionsettings.html#tagMask Objects tagged with any of these tags will be rasterized. \n\nWill only be used if collectionMode is set to Tags.\n\n[more in online documentation] +Pathfinding.RecastGraph.CollectionSettings.terrainHeightmapDownsamplingFactor collectionsettings.html#terrainHeightmapDownsamplingFactor Controls how much to downsample the terrain's heightmap before generating the input mesh used for rasterization. \n\nA higher value is faster to scan but less accurate. +Pathfinding.RecastGraph.DimensionMode recastgraph.html#DimensionMode Whether to use 3D or 2D mode. +Pathfinding.RecastGraph.MaxTileConnectionEdgeDistance recastgraph.html#MaxTileConnectionEdgeDistance +Pathfinding.RecastGraph.NavmeshCuttingCharacterRadius recastgraph.html#NavmeshCuttingCharacterRadius +Pathfinding.RecastGraph.PerLayerModification.Default perlayermodification.html#Default +Pathfinding.RecastGraph.PerLayerModification.layer perlayermodification.html#layer Layer that this modification applies to. +Pathfinding.RecastGraph.PerLayerModification.mode perlayermodification.html#mode Surface rasterization mode. \n\n[more in online documentation] +Pathfinding.RecastGraph.PerLayerModification.surfaceID perlayermodification.html#surfaceID Voxel area for mesh. \n\nThis area (not to be confused with pathfinding areas, this is only used when rasterizing meshes for the recast graph) field can be used to explicitly insert edges in the navmesh geometry or to make some parts of the mesh unwalkable.\n\nWhen rasterizing the world and two objects with different surface id values are adjacent to each other, a split in the navmesh geometry will be added between them, characters will still be able to walk between them, but this can be useful when working with navmesh updates.\n\nNavmesh updates which recalculate a whole tile (updatePhysics=True) are very slow So if there are special places which you know are going to be updated quite often, for example at a door opening (opened/closed door) you can use surface IDs to create splits on the navmesh for easier updating using normal graph updates (updatePhysics=False). See the below video for more information.\n\n <b>[video in online documentation]</b>\n\nWhen mode is set to Mode.WalkableSurfaceWithTag then this value will be interpreted as a pathfinding tag. See Working with tags.\n\n[more in online documentation] +Pathfinding.RecastGraph.RecalculateNormals recastgraph.html#RecalculateNormals +Pathfinding.RecastGraph.RecastGraphScanPromise.Progress recastgraphscanpromise.html#Progress +Pathfinding.RecastGraph.RecastGraphScanPromise.emptyGraph recastgraphscanpromise.html#emptyGraph +Pathfinding.RecastGraph.RecastGraphScanPromise.graph recastgraphscanpromise.html#graph +Pathfinding.RecastGraph.RecastGraphScanPromise.meshesUnreadableAtRuntime recastgraphscanpromise.html#meshesUnreadableAtRuntime +Pathfinding.RecastGraph.RecastGraphScanPromise.progressSource recastgraphscanpromise.html#progressSource +Pathfinding.RecastGraph.RecastGraphScanPromise.tileLayout recastgraphscanpromise.html#tileLayout +Pathfinding.RecastGraph.RecastGraphScanPromise.tiles recastgraphscanpromise.html#tiles +Pathfinding.RecastGraph.RecastGraphUpdatePromise.graph recastgraphupdatepromise.html#graph +Pathfinding.RecastGraph.RecastGraphUpdatePromise.graphHash recastgraphupdatepromise.html#graphHash +Pathfinding.RecastGraph.RecastGraphUpdatePromise.graphUpdates recastgraphupdatepromise.html#graphUpdates +Pathfinding.RecastGraph.RecastGraphUpdatePromise.promises recastgraphupdatepromise.html#promises +Pathfinding.RecastGraph.RecastMovePromise.delta recastmovepromise.html#delta +Pathfinding.RecastGraph.RecastMovePromise.graph recastmovepromise.html#graph +Pathfinding.RecastGraph.RecastMovePromise.newTileRect recastmovepromise.html#newTileRect +Pathfinding.RecastGraph.RecastMovePromise.tileMeshes recastmovepromise.html#tileMeshes +Pathfinding.RecastGraph.RelevantGraphSurfaceMode recastgraph.html#RelevantGraphSurfaceMode +Pathfinding.RecastGraph.TileBorderSizeInVoxels recastgraph.html#TileBorderSizeInVoxels Number of extra voxels on each side of a tile to ensure accurate navmeshes near the tile border. \n\nThe width of a tile is expanded by 2 times this value (1x to the left and 1x to the right) +Pathfinding.RecastGraph.TileBorderSizeInWorldUnits recastgraph.html#TileBorderSizeInWorldUnits +Pathfinding.RecastGraph.TileWorldSizeX recastgraph.html#TileWorldSizeX +Pathfinding.RecastGraph.TileWorldSizeZ recastgraph.html#TileWorldSizeZ +Pathfinding.RecastGraph.backgroundTraversability recastgraph.html#backgroundTraversability Whether the base of the graph should default to being walkable or unwalkable. \n\nThis is only used in 2D mode. In 3D mode, this setting has no effect.\n\nFor 2D games, it can be very useful to set the background to be walkable by default, and then constrain walkability using colliders.\n\nIf you don't want to use a walkable background, you can instead create colliders and attach a RecastMeshObj with Surface Type set to Walkable Surface. These will then create walkable regions.\n\n[more in online documentation] +Pathfinding.RecastGraph.bounds recastgraph.html#bounds World bounding box for the graph. \n\nThis always contains the whole graph.\n\n[more in online documentation]\n <b>[image in online documentation]</b> +Pathfinding.RecastGraph.cellSize recastgraph.html#cellSize Voxel sample size (x,z). \n\nWhen generating a recast graph what happens is that the world is voxelized. You can think of this as constructing an approximation of the world out of lots of boxes. If you have played Minecraft it looks very similar (but with smaller boxes). <b>[image in online documentation]</b>\n\nLower values will yield higher quality navmeshes, however the graph will be slower to scan.\n\n <b>[image in online documentation]</b> +Pathfinding.RecastGraph.characterRadius recastgraph.html#characterRadius Radius of the agent which will traverse the navmesh. \n\nThe navmesh will be eroded with this radius. <b>[image in online documentation]</b> +Pathfinding.RecastGraph.collectionSettings recastgraph.html#collectionSettings Determines which objects are used to build the graph, when it is scanned. \n\nAlso contains some settings for how to convert objects into meshes. Spherical colliders, for example, need to be converted into a triangular mesh before they can be used in the graph.\n\n[more in online documentation] +Pathfinding.RecastGraph.colliderRasterizeDetail recastgraph.html#colliderRasterizeDetail Controls detail on rasterization of sphere and capsule colliders. \n\nThe colliders will be approximated with polygons so that the max distance to the theoretical surface is less than 1/(this number of voxels).\n\nA higher value does not necessarily increase quality of the mesh, but a lower value will often speed it up.\n\nYou should try to keep this value as low as possible without affecting the mesh quality since that will yield the fastest scan times.\n\nThe default value is 1, which corresponds to a maximum error of 1 voxel. In most cases, increasing this to a value higher than 2 (corresponding to a maximum error of 0.5 voxels) is not useful.\n\n[more in online documentation]\n\n\n\n[more in online documentation] +Pathfinding.RecastGraph.contourMaxError recastgraph.html#contourMaxError Max distance from simplified edge to real edge. \n\nThis value is measured in voxels. So with the default value of 2 it means that the final navmesh contour may be at most 2 voxels (i.e 2 times cellSize) away from the border that was calculated when voxelizing the world. A higher value will yield a more simplified and cleaner navmesh while a lower value may capture more details. However a too low value will cause the individual voxels to be visible (see image below).\n\n <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.RecastGraph.dimensionMode recastgraph.html#dimensionMode Whether to use 3D or 2D mode. \n\n[more in online documentation] +Pathfinding.RecastGraph.editorTileSize recastgraph.html#editorTileSize Size in voxels of a single tile. \n\nThis is the width of the tile.\n\n <b>[image in online documentation]</b>\n\nA large tile size can be faster to initially scan (but beware of out of memory issues if you try with a too large tile size in a large world) smaller tile sizes are (much) faster to update.\n\nDifferent tile sizes can affect the quality of paths. It is often good to split up huge open areas into several tiles for better quality paths, but too small tiles can also lead to effects looking like invisible obstacles. For more information about this take a look at Notes about navmesh graphs. Usually it is best to experiment and see what works best for your game.\n\nWhen scanning a recast graphs individual tiles can be calculated in parallel which can make it much faster to scan large worlds. When you want to recalculate a part of a recast graph, this can only be done on a tile-by-tile basis which means that if you often try to update a region of the recast graph much smaller than the tile size, then you will be doing a lot of unnecessary calculations. However if you on the other hand update regions of the recast graph that are much larger than the tile size then it may be slower than necessary as there is some overhead in having lots of tiles instead of a few larger ones (not that much though).\n\nRecommended values are between 64 and 256, but these are very soft limits. It is possible to use both larger and smaller values. +Pathfinding.RecastGraph.forcedBoundsCenter recastgraph.html#forcedBoundsCenter Center of the bounding box. \n\nScanning will only be done inside the bounding box +Pathfinding.RecastGraph.mask recastgraph.html#mask Layer mask which filters which objects to include. \n\n[more in online documentation] +Pathfinding.RecastGraph.maxEdgeLength recastgraph.html#maxEdgeLength Longer edges will be subdivided. \n\nReducing this value can sometimes improve path quality since similarly sized triangles yield better paths than really large and really triangles small next to each other. However it will also add a lot more nodes which will make pathfinding slower. For more information about this take a look at Notes about navmesh graphs.\n\n <b>[image in online documentation]</b> +Pathfinding.RecastGraph.maxSlope recastgraph.html#maxSlope Max slope in degrees the character can traverse. \n\n <b>[image in online documentation]</b> +Pathfinding.RecastGraph.meshesUnreadableAtRuntime recastgraph.html#meshesUnreadableAtRuntime Internal field used to warn users when the mesh includes meshes that are not readable at runtime. +Pathfinding.RecastGraph.minRegionSize recastgraph.html#minRegionSize Minumum region size. \n\nSmall regions will be removed from the navmesh. Measured in voxels.\n\n <b>[image in online documentation]</b>\n\nIf a region is adjacent to a tile border, it will not be removed even though it is small since the adjacent tile might join it to form a larger region.\n\n <b>[image in online documentation]</b><b>[image in online documentation]</b> +Pathfinding.RecastGraph.pendingGraphUpdateArena recastgraph.html#pendingGraphUpdateArena +Pathfinding.RecastGraph.perLayerModifications recastgraph.html#perLayerModifications List of rules that modify the graph based on the layer of the rasterized object. \n\n <b>[image in online documentation]</b>\n\nBy default, all layers are treated as walkable surfaces. But by adding rules to this list, one can for example make all surfaces with a specific layer get a specific pathfinding tag.\n\nEach layer should be modified at most once in this list.\n\nIf an object has a RecastMeshObj component attached, the settings on that component will override the settings in this list.\n\n[more in online documentation] +Pathfinding.RecastGraph.rasterizeColliders recastgraph.html#rasterizeColliders Use colliders to calculate the navmesh. \n\nDepending on the dimensionMode, either 3D or 2D colliders will be rasterized.\n\nSphere/Capsule/Circle colliders will be approximated using polygons, with the precision specified in colliderRasterizeDetail. \n\n[more in online documentation] +Pathfinding.RecastGraph.rasterizeMeshes recastgraph.html#rasterizeMeshes Use scene meshes to calculate the navmesh. \n\nThis can get you higher precision than colliders, since colliders are typically very simplified versions of the mesh. However, it is often slower to scan, and graph updates can be particularly slow.\n\nThe reason that graph updates are slower is that there's no efficient way to find all meshes that intersect a given tile, so the graph has to iterate over all meshes in the scene just to find the ones relevant for the tiles that you want to update. Colliders, on the other hand, can be efficiently queried using the physics system.\n\nYou can disable this and attach a RecastMeshObj component (with dynamic=false) to all meshes that you want to be included in the navmesh instead. That way they will be able to be efficiently queried for, without having to iterate through all meshes in the scene.\n\nIn 2D mode, this setting has no effect. \n\n[more in online documentation] +Pathfinding.RecastGraph.rasterizeTerrain recastgraph.html#rasterizeTerrain Use terrains to calculate the navmesh. \n\nIn 2D mode, this setting has no effect. \n\n[more in online documentation] +Pathfinding.RecastGraph.rasterizeTrees recastgraph.html#rasterizeTrees Rasterize tree colliders on terrains. \n\nIf the tree prefab has a collider, that collider will be rasterized. Otherwise a simple box collider will be used and the script will try to adjust it to the tree's scale, it might not do a very good job though so an attached collider is preferable.\n\n[more in online documentation]\nIn 2D mode, this setting has no effect.\n\n[more in online documentation] +Pathfinding.RecastGraph.relevantGraphSurfaceMode recastgraph.html#relevantGraphSurfaceMode Require every region to have a RelevantGraphSurface component inside it. \n\nA RelevantGraphSurface component placed in the scene specifies that the navmesh region it is inside should be included in the navmesh.\n\nIf this is set to OnlyForCompletelyInsideTile a navmesh region is included in the navmesh if it has a RelevantGraphSurface inside it, or if it is adjacent to a tile border. This can leave some small regions which you didn't want to have included because they are adjacent to tile borders, but it removes the need to place a component in every single tile, which can be tedious (see below).\n\nIf this is set to RequireForAll a navmesh region is included only if it has a RelevantGraphSurface inside it. Note that even though the navmesh looks continous between tiles, the tiles are computed individually and therefore you need a RelevantGraphSurface component for each region and for each tile.\n\n <b>[image in online documentation]</b>\n\n <b>[image in online documentation]</b>\n\n <b>[image in online documentation]</b>\n\n <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.RecastGraph.rotation recastgraph.html#rotation Rotation of the graph in degrees. +Pathfinding.RecastGraph.scanEmptyGraph recastgraph.html#scanEmptyGraph If true, scanning the graph will yield a completely empty graph. \n\nUseful if you want to replace the graph with a custom navmesh for example\n\n[more in online documentation] +Pathfinding.RecastGraph.tagMask recastgraph.html#tagMask Objects tagged with any of these tags will be rasterized. \n\nNote that this extends the layer mask, so if you only want to use tags, set mask to 'Nothing'.\n\n[more in online documentation] +Pathfinding.RecastGraph.terrainSampleSize recastgraph.html#terrainSampleSize Controls how large the sample size for the terrain is. \n\nA higher value is faster to scan but less accurate.\n\nThe heightmap resolution is effectively divided by this value, before the terrain is rasterized.\n\n[more in online documentation] +Pathfinding.RecastGraph.tileSizeX recastgraph.html#tileSizeX Size of a tile along the X axis in voxels. \n\nThis is the width of the tile.\n\n <b>[image in online documentation]</b>\n\nA large tile size can be faster to initially scan (but beware of out of memory issues if you try with a too large tile size in a large world) smaller tile sizes are (much) faster to update.\n\nDifferent tile sizes can affect the quality of paths. It is often good to split up huge open areas into several tiles for better quality paths, but too small tiles can also lead to effects looking like invisible obstacles. For more information about this take a look at Notes about navmesh graphs. Usually it is best to experiment and see what works best for your game.\n\nWhen scanning a recast graphs individual tiles can be calculated in parallel which can make it much faster to scan large worlds. When you want to recalculate a part of a recast graph, this can only be done on a tile-by-tile basis which means that if you often try to update a region of the recast graph much smaller than the tile size, then you will be doing a lot of unnecessary calculations. However if you on the other hand update regions of the recast graph that are much larger than the tile size then it may be slower than necessary as there is some overhead in having lots of tiles instead of a few larger ones (not that much though).\n\nRecommended values are between 64 and 256, but these are very soft limits. It is possible to use both larger and smaller values.\n\n[more in online documentation] +Pathfinding.RecastGraph.tileSizeZ recastgraph.html#tileSizeZ Size of a tile along the Z axis in voxels. \n\nThis is the width of the tile.\n\n <b>[image in online documentation]</b>\n\nA large tile size can be faster to initially scan (but beware of out of memory issues if you try with a too large tile size in a large world) smaller tile sizes are (much) faster to update.\n\nDifferent tile sizes can affect the quality of paths. It is often good to split up huge open areas into several tiles for better quality paths, but too small tiles can also lead to effects looking like invisible obstacles. For more information about this take a look at Notes about navmesh graphs. Usually it is best to experiment and see what works best for your game.\n\nWhen scanning a recast graphs individual tiles can be calculated in parallel which can make it much faster to scan large worlds. When you want to recalculate a part of a recast graph, this can only be done on a tile-by-tile basis which means that if you often try to update a region of the recast graph much smaller than the tile size, then you will be doing a lot of unnecessary calculations. However if you on the other hand update regions of the recast graph that are much larger than the tile size then it may be slower than necessary as there is some overhead in having lots of tiles instead of a few larger ones (not that much though).\n\nRecommended values are between 64 and 256, but these are very soft limits. It is possible to use both larger and smaller values.\n\n[more in online documentation] +Pathfinding.RecastGraph.useTiles recastgraph.html#useTiles If true, divide the graph into tiles, otherwise use a single tile covering the whole graph. \n\nUsing tiles is useful for a number of things. But it also has some drawbacks.\n- Using tiles allows you to update only a part of the graph at a time. When doing graph updates on a recast graph, it will always recalculate whole tiles (or the whole graph if there are no tiles). NavmeshCut components also work on a tile-by-tile basis.\n\n- Using tiles allows you to use NavmeshPrefabs.\n\n- Using tiles can break up very large triangles, which can improve path quality in some cases, and make the navmesh more closely follow the y-coordinates of the ground.\n\n- Using tiles can make it much faster to generate the navmesh, because each tile can be calculated in parallel. But if the tiles are made too small, then the overhead of having many tiles can make it slower than having fewer tiles.\n\n- Using small tiles can make the path quality worse in some cases, but setting the FunnelModifiers quality setting to high (or using RichAI.funnelSimplification) will mostly mitigate this.\n\n\n\n[more in online documentation] +Pathfinding.RecastGraph.walkableClimb recastgraph.html#walkableClimb Height the character can climb. \n\n <b>[image in online documentation]</b> +Pathfinding.RecastGraph.walkableHeight recastgraph.html#walkableHeight Character height. \n\n <b>[image in online documentation]</b> +Pathfinding.RecastGraphEditor.DimensionModeLabels recastgrapheditor.html#DimensionModeLabels +Pathfinding.RecastGraphEditor.UseTiles recastgrapheditor.html#UseTiles +Pathfinding.RecastGraphEditor.handlePoints recastgrapheditor.html#handlePoints +Pathfinding.RecastGraphEditor.meshesUnreadableAtRuntimeFoldout recastgrapheditor.html#meshesUnreadableAtRuntimeFoldout +Pathfinding.RecastGraphEditor.perLayerModificationsList recastgrapheditor.html#perLayerModificationsList +Pathfinding.RecastGraphEditor.tagMaskFoldout recastgrapheditor.html#tagMaskFoldout +Pathfinding.RecastGraphEditor.tagMaskList recastgrapheditor.html#tagMaskList +Pathfinding.RecastMeshObj.GeometrySource recastmeshobj.html#GeometrySource Source of geometry when voxelizing this object. +Pathfinding.RecastMeshObj.Mode recastmeshobj.html#Mode +Pathfinding.RecastMeshObj.ScanInclusion recastmeshobj.html#ScanInclusion +Pathfinding.RecastMeshObj.area recastmeshobj.html#area Voxel area for mesh. \n\nThis area (not to be confused with pathfinding areas, this is only used when rasterizing meshes for the recast graph) field can be used to explicitly insert edges in the navmesh geometry or to make some parts of the mesh unwalkable.\n\nWhen rasterizing the world and two objects with different surface id values are adjacent to each other, a split in the navmesh geometry will be added between them, characters will still be able to walk between them, but this can be useful when working with navmesh updates.\n\nNavmesh updates which recalculate a whole tile (updatePhysics=True) are very slow So if there are special places which you know are going to be updated quite often, for example at a door opening (opened/closed door) you can use surface IDs to create splits on the navmesh for easier updating using normal graph updates (updatePhysics=False). See the below video for more information.\n\n <b>[video in online documentation]</b>\n\n[more in online documentation] +Pathfinding.RecastMeshObj.dynamic recastmeshobj.html#dynamic Enable if the object will move during runtime. \n\nIf disabled, the object will be assumed to stay in the same position, and keep the same size, until the component is disabled or destroyed.\n\nDisabling this will provide a small performance boost when doing graph updates, as the graph no longer has to check if this RecastMeshObj might have moved.\n\nEven you set dynamic=false, you can disable the component, move the object, and enable it at the new position. +Pathfinding.RecastMeshObj.geometrySource recastmeshobj.html#geometrySource Source of geometry when voxelizing this object. +Pathfinding.RecastMeshObj.includeInScan recastmeshobj.html#includeInScan Determines if the object should be included in scans or not. \n\n[more in online documentation] +Pathfinding.RecastMeshObj.mode recastmeshobj.html#mode Surface rasterization mode. \n\n[more in online documentation] +Pathfinding.RecastMeshObj.solid recastmeshobj.html#solid If true then the mesh will be treated as solid and its interior will be unwalkable. \n\nThe unwalkable region will be the minimum to maximum y coordinate in each cell.\n\nIf you enable this on a mesh that is actually hollow then the hollow region will also be treated as unwalkable. +Pathfinding.RecastMeshObj.surfaceID recastmeshobj.html#surfaceID Voxel area for mesh. \n\nThis area (not to be confused with pathfinding areas, this is only used when rasterizing meshes for the recast graph) field can be used to explicitly insert edges in the navmesh geometry or to make some parts of the mesh unwalkable.\n\nWhen rasterizing the world and two objects with different surface id values are adjacent to each other, a split in the navmesh geometry will be added between them, characters will still be able to walk between them, but this can be useful when working with navmesh updates.\n\nNavmesh updates which recalculate a whole tile (updatePhysics=True) are very slow So if there are special places which you know are going to be updated quite often, for example at a door opening (opened/closed door) you can use surface IDs to create splits on the navmesh for easier updating using normal graph updates (updatePhysics=False). See the below video for more information.\n\n <b>[video in online documentation]</b>\n\nWhen mode is set to Mode.WalkableSurfaceWithTag then this value will be interpreted as a pathfinding tag. See Working with tags.\n\n[more in online documentation] +Pathfinding.RecastMeshObj.tree recastmeshobj.html#tree Components are stored in a tree for fast lookups. +Pathfinding.RecastMeshObj.treeKey recastmeshobj.html#treeKey +Pathfinding.RecastTileUpdate.OnNeedUpdates recasttileupdate.html#OnNeedUpdates +Pathfinding.RecastTileUpdateHandler.anyDirtyTiles recasttileupdatehandler.html#anyDirtyTiles True if any elements in dirtyTiles are true. +Pathfinding.RecastTileUpdateHandler.dirtyTiles recasttileupdatehandler.html#dirtyTiles True for a tile if it needs updating. +Pathfinding.RecastTileUpdateHandler.earliestDirty recasttileupdatehandler.html#earliestDirty Earliest update request we are handling right now. +Pathfinding.RecastTileUpdateHandler.graph recasttileupdatehandler.html#graph Graph that handles the updates. +Pathfinding.RecastTileUpdateHandler.maxThrottlingDelay recasttileupdatehandler.html#maxThrottlingDelay All tile updates will be performed within (roughly) this number of seconds. +Pathfinding.RichAI.GizmoColorPath richai.html#GizmoColorPath +Pathfinding.RichAI.acceleration richai.html#acceleration Max acceleration of the agent. \n\nIn world units per second per second. +Pathfinding.RichAI.approachingPartEndpoint richai.html#approachingPartEndpoint True if approaching the last waypoint in the current part of the path. \n\nPath parts are separated by off-mesh links.\n\n[more in online documentation] +Pathfinding.RichAI.approachingPathEndpoint richai.html#approachingPathEndpoint True if approaching the last waypoint of all parts in the current path. \n\nPath parts are separated by off-mesh links.\n\n[more in online documentation] +Pathfinding.RichAI.canMove richai.html#canMove Enables or disables movement completely. \n\nIf you want the agent to stand still, but still react to local avoidance and use gravity: use isStopped instead.\n\nThis is also useful if you want to have full control over when the movement calculations run. Take a look at MovementUpdate\n\n[more in online documentation] +Pathfinding.RichAI.canSearch richai.html#canSearch Enables or disables recalculating the path at regular intervals. \n\nSetting this to false does not stop any active path requests from being calculated or stop it from continuing to follow the current path.\n\nNote that this only disables automatic path recalculations. If you call the SearchPath() method a path will still be calculated.\n\n[more in online documentation] +Pathfinding.RichAI.delayUpdatePath richai.html#delayUpdatePath +Pathfinding.RichAI.distanceToSteeringTarget richai.html#distanceToSteeringTarget Distance to steeringTarget in the movement plane. +Pathfinding.RichAI.endOfPath richai.html#endOfPath End point of path the agent is currently following. \n\nIf the agent has no path (or it might not be calculated yet), this will return the destination instead. If the agent has no destination it will return the agent's current position.\n\nThe end of the path is usually identical or very close to the destination, but it may differ if the path for example was blocked by a wall so that the agent couldn't get any closer.\n\nThis is only updated when the path is recalculated. +Pathfinding.RichAI.funnelSimplification richai.html#funnelSimplification Use funnel simplification. \n\nOn tiled navmesh maps, but sometimes on normal ones as well, it can be good to simplify the funnel as a post-processing step to make the paths straighter.\n\nThis has a moderate performance impact during frames when a path calculation is completed.\n\nThe RichAI script uses its own internal funnel algorithm, so you never need to attach the FunnelModifier component.\n\n <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.RichAI.hasPath richai.html#hasPath True if this agent currently has a path that it follows. +Pathfinding.RichAI.height richai.html#height Height of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nThis value is currently only used if an RVOController is attached to the same GameObject, otherwise it is only used for drawing nice gizmos in the scene view. However since the height value is used for some things, the radius field is always visible for consistency and easier visualization of the character. That said, it may be used for something in a future release.\n\n[more in online documentation] +Pathfinding.RichAI.lastCorner richai.html#lastCorner +Pathfinding.RichAI.maxSpeed richai.html#maxSpeed Max speed in world units per second. +Pathfinding.RichAI.movementPlane richai.html#movementPlane The plane the agent is moving in. \n\nThis is typically the ground plane, which will be the XZ plane in a 3D game, and the XY plane in a 2D game. Ultimately it depends on the graph orientation.\n\nIf you are doing pathfinding on a spherical world (see Spherical Worlds), the the movement plane will be the tangent plane of the sphere at the agent's position. +Pathfinding.RichAI.nextCorners richai.html#nextCorners +Pathfinding.RichAI.onTraverseOffMeshLink richai.html#onTraverseOffMeshLink Called when the agent starts to traverse an off-mesh link. \n\nRegister to this callback to handle off-mesh links in a custom way.\n\nIf this event is set to null then the agent will fall back to traversing off-mesh links using a very simple linear interpolation.\n\n<b>[code in online documentation]</b> +Pathfinding.RichAI.pathPending richai.html#pathPending True if a path is currently being calculated. +Pathfinding.RichAI.preventMovingBackwards richai.html#preventMovingBackwards Prevent the velocity from being too far away from the forward direction of the character. \n\nIf the character is ordered to move in the opposite direction from where it is facing then enabling this will cause it to make a small loop instead of turning on the spot.\n\nThis setting only has an effect if slowWhenNotFacingTarget is enabled. +Pathfinding.RichAI.radius richai.html#radius Radius of the agent in world units. \n\nThis is visualized in the scene view as a yellow cylinder around the character.\n\nNote that this does not affect pathfinding in any way. The graph used completely determines where the agent can move.\n\n[more in online documentation] +Pathfinding.RichAI.reachedDestination richai.html#reachedDestination True if the ai has reached the destination. \n\nThis is a best effort calculation to see if the destination has been reached. For the AIPath/RichAI scripts, this is when the character is within AIPath.endReachedDistance world units from the destination. For the AILerp script it is when the character is at the destination (±a very small margin).\n\nThis value will be updated immediately when the destination is changed (in contrast to reachedEndOfPath), however since path requests are asynchronous it will use an approximation until it sees the real path result. What this property does is to check the distance to the end of the current path, and add to that the distance from the end of the path to the destination (i.e. is assumes it is possible to move in a straight line between the end of the current path to the destination) and then checks if that total distance is less than AIPath.endReachedDistance. This property is therefore only a best effort, but it will work well for almost all use cases.\n\nFurthermore it will not report that the destination is reached if the destination is above the head of the character or more than half the height of the character below its feet (so if you have a multilevel building, it is important that you configure the height of the character correctly).\n\nThe cases which could be problematic are if an agent is standing next to a very thin wall and the destination suddenly changes to the other side of that thin wall. During the time that it takes for the path to be calculated the agent may see itself as alredy having reached the destination because the destination only moved a very small distance (the wall was thin), even though it may actually be quite a long way around the wall to the other side.\n\nIn contrast to reachedEndOfPath, this property is immediately updated when the destination is changed.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.RichAI.reachedEndOfPath richai.html#reachedEndOfPath True if the agent has reached the end of the current path. \n\nNote that setting the destination does not immediately update the path, nor is there any guarantee that the AI will actually be able to reach the destination that you set. The AI will try to get as close as possible. Often you want to use reachedDestination instead which is easier to work with.\n\nIt is very hard to provide a method for detecting if the AI has reached the destination that works across all different games because the destination may not even lie on the navmesh and how that is handled differs from game to game (see also the code snippet in the docs for destination).\n\n[more in online documentation] +Pathfinding.RichAI.remainingDistance richai.html#remainingDistance Approximate remaining distance along the current path to the end of the path. \n\nThe RichAI movement script approximates this distance since it is quite expensive to calculate the real distance. However it will be accurate when the agent is within 1 corner of the destination. You can use GetRemainingPath to calculate the actual remaining path more precisely.\n\nThe AIPath and AILerp scripts use a more accurate distance calculation at all times.\n\nIf the agent does not currently have a path, then positive infinity will be returned.\n\n[more in online documentation]\n\n\n\n[more in online documentation] +Pathfinding.RichAI.richPath richai.html#richPath Holds the current path that this agent is following. +Pathfinding.RichAI.rotation richai.html#rotation +Pathfinding.RichAI.rotationFilterState richai.html#rotationFilterState Internal state used for filtering out noise in the agent's rotation. +Pathfinding.RichAI.rotationFilterState2 richai.html#rotationFilterState2 +Pathfinding.RichAI.rotationSpeed richai.html#rotationSpeed Max rotation speed of the agent. \n\nIn degrees per second. +Pathfinding.RichAI.shouldRecalculatePath richai.html#shouldRecalculatePath +Pathfinding.RichAI.slowWhenNotFacingTarget richai.html#slowWhenNotFacingTarget Slow down when not facing the target direction. \n\nIncurs at a small performance overhead.\n\nThis setting only has an effect if enableRotation is enabled. +Pathfinding.RichAI.slowdownTime richai.html#slowdownTime How long before reaching the end of the path to start to slow down. \n\nA lower value will make the agent stop more abruptly.\n\n[more in online documentation]\nIf set to zero the agent will not even attempt to slow down. This can be useful if the target point is not a point you want the agent to stop at but it might for example be the player and you want the AI to slam into the player.\n\n[more in online documentation]\n <b>[video in online documentation]</b> +Pathfinding.RichAI.steeringTarget richai.html#steeringTarget Point on the path which the agent is currently moving towards. \n\nThis is usually a point a small distance ahead of the agent or the end of the path.\n\nIf the agent does not have a path at the moment, then the agent's current position will be returned. +Pathfinding.RichAI.traversingOffMeshLink richai.html#traversingOffMeshLink +Pathfinding.RichAI.wallBuffer richai.html#wallBuffer +Pathfinding.RichAI.wallDist richai.html#wallDist Walls within this range will be used for avoidance. \n\nSetting this to zero disables wall avoidance and may improve performance slightly\n\n[more in online documentation] +Pathfinding.RichAI.wallForce richai.html#wallForce Force to avoid walls with. \n\nThe agent will try to steer away from walls slightly.\n\n[more in online documentation] +Pathfinding.RichFunnel.CurrentNode richfunnel.html#CurrentNode +Pathfinding.RichFunnel.DistanceToEndOfPath richfunnel.html#DistanceToEndOfPath Approximate distance (as the crow flies) to the endpoint of this path part. \n\n[more in online documentation] +Pathfinding.RichFunnel.checkForDestroyedNodesCounter richfunnel.html#checkForDestroyedNodesCounter +Pathfinding.RichFunnel.currentNode richfunnel.html#currentNode +Pathfinding.RichFunnel.currentPosition richfunnel.html#currentPosition +Pathfinding.RichFunnel.exactEnd richfunnel.html#exactEnd +Pathfinding.RichFunnel.exactStart richfunnel.html#exactStart +Pathfinding.RichFunnel.funnelSimplification richfunnel.html#funnelSimplification Post process the funnel corridor or not. +Pathfinding.RichFunnel.graph richfunnel.html#graph +Pathfinding.RichFunnel.left richfunnel.html#left +Pathfinding.RichFunnel.navmeshClampDict richfunnel.html#navmeshClampDict Cached object to avoid unnecessary allocations. +Pathfinding.RichFunnel.navmeshClampList richfunnel.html#navmeshClampList Cached object to avoid unnecessary allocations. +Pathfinding.RichFunnel.navmeshClampQueue richfunnel.html#navmeshClampQueue Cached object to avoid unnecessary allocations. +Pathfinding.RichFunnel.nodes richfunnel.html#nodes +Pathfinding.RichFunnel.path richfunnel.html#path +Pathfinding.RichFunnel.right richfunnel.html#right +Pathfinding.RichFunnel.triBuffer richfunnel.html#triBuffer +Pathfinding.RichPath.CompletedAllParts richpath.html#CompletedAllParts True if we have completed (called NextPart for) the last part in the path. +Pathfinding.RichPath.Endpoint richpath.html#Endpoint +Pathfinding.RichPath.IsLastPart richpath.html#IsLastPart True if we are traversing the last part of the path. +Pathfinding.RichPath.currentPart richpath.html#currentPart +Pathfinding.RichPath.parts richpath.html#parts +Pathfinding.RichPath.seeker richpath.html#seeker +Pathfinding.RichPath.transform richpath.html#transform Transforms points from path space to world space. \n\nIf null the identity transform will be used.\n\nThis is used when the world position of the agent does not match the corresponding position on the graph. This is the case in the example scene called 'Moving'.\n\n[more in online documentation] +Pathfinding.RichSpecial.first richspecial.html#first +Pathfinding.RichSpecial.nodeLink richspecial.html#nodeLink +Pathfinding.RichSpecial.reverse richspecial.html#reverse +Pathfinding.RichSpecial.second richspecial.html#second +Pathfinding.RuleElevationPenaltyEditor.GizmoColorMax ruleelevationpenaltyeditor.html#GizmoColorMax +Pathfinding.RuleElevationPenaltyEditor.GizmoColorMin ruleelevationpenaltyeditor.html#GizmoColorMin +Pathfinding.RuleElevationPenaltyEditor.lastChangedTime ruleelevationpenaltyeditor.html#lastChangedTime +Pathfinding.RuleTextureEditor.ChannelUseNames ruletextureeditor.html#ChannelUseNames +Pathfinding.ScanningStage pathfinding.html#ScanningStage Info about where in the scanning process a graph is. +Pathfinding.Seeker.ModifierPass seeker.html#ModifierPass +Pathfinding.Seeker.detailedGizmos seeker.html#detailedGizmos Enables drawing of the non-postprocessed path using Gizmos. \n\nThe path will show up in orange.\n\nRequires that drawGizmos is true.\n\nThis will show the path before any post processing such as smoothing is applied.\n\n[more in online documentation] +Pathfinding.Seeker.drawGizmos seeker.html#drawGizmos Enables drawing of the last calculated path using Gizmos. \n\nThe path will show up in green.\n\n[more in online documentation] +Pathfinding.Seeker.graphMask seeker.html#graphMask Graphs that this Seeker can use. \n\nThis field determines which graphs will be considered when searching for the start and end nodes of a path. It is useful in numerous situations, for example if you want to make one graph for small units and one graph for large units.\n\nThis is a bitmask so if you for example want to make the agent only use graph index 3 then you can set this to: <b>[code in online documentation]</b>\n\n[more in online documentation]\nNote that this field only stores which graph indices that are allowed. This means that if the graphs change their ordering then this mask may no longer be correct.\n\nIf you know the name of the graph you can use the Pathfinding.GraphMask.FromGraphName method: <b>[code in online documentation]</b>\n\n <b>[image in online documentation]</b>\n\n[more in online documentation] +Pathfinding.Seeker.graphMaskCompatibility seeker.html#graphMaskCompatibility Used for serialization backwards compatibility. +Pathfinding.Seeker.lastCompletedNodePath seeker.html#lastCompletedNodePath Used for drawing gizmos. +Pathfinding.Seeker.lastCompletedVectorPath seeker.html#lastCompletedVectorPath Used for drawing gizmos. +Pathfinding.Seeker.lastPathID seeker.html#lastPathID The path ID of the last path queried. +Pathfinding.Seeker.modifiers seeker.html#modifiers Internal list of all modifiers. +Pathfinding.Seeker.onPartialPathDelegate seeker.html#onPartialPathDelegate Cached delegate to avoid allocating one every time a path is started. +Pathfinding.Seeker.onPathDelegate seeker.html#onPathDelegate Cached delegate to avoid allocating one every time a path is started. +Pathfinding.Seeker.path seeker.html#path The current path. +Pathfinding.Seeker.pathCallback seeker.html#pathCallback Callback for when a path is completed. \n\nMovement scripts should register to this delegate.\n\nA temporary callback can also be set when calling StartPath, but that delegate will only be called for that path\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.Seeker.postProcessPath seeker.html#postProcessPath Called after a path has been calculated, right before modifiers are executed. +Pathfinding.Seeker.preProcessPath seeker.html#preProcessPath Called before pathfinding is started. +Pathfinding.Seeker.prevPath seeker.html#prevPath Previous path. \n\nUsed to draw gizmos +Pathfinding.Seeker.startEndModifier seeker.html#startEndModifier Path modifier which tweaks the start and end points of a path. +Pathfinding.Seeker.tagPenalties seeker.html#tagPenalties Penalties for each tag. \n\nTag 0 which is the default tag, will have added a penalty of tagPenalties[0]. These should only be positive values since the A* algorithm cannot handle negative penalties.\n\nThe length of this array should be exactly 32, one for each tag.\n\n[more in online documentation] +Pathfinding.Seeker.tmpPathCallback seeker.html#tmpPathCallback Temporary callback only called for the current path. \n\nThis value is set by the StartPath functions +Pathfinding.Seeker.traversableTags seeker.html#traversableTags The tags which the Seeker can traverse. \n\n[more in online documentation] +Pathfinding.Seeker.traversalProvider seeker.html#traversalProvider Custom traversal provider to calculate which nodes are traversable and their penalties. \n\nThis can be used to override the built-in pathfinding logic.\n\n<b>[code in online documentation]</b>\n\n[more in online documentation] +Pathfinding.SeekerEditor.exactnessLabels seekereditor.html#exactnessLabels +Pathfinding.SeekerEditor.scripts seekereditor.html#scripts +Pathfinding.SeekerEditor.tagPenaltiesOpen seekereditor.html#tagPenaltiesOpen +Pathfinding.Serialization.AstarSerializer.V3_8_3 astarserializer.html#V3_8_3 Cached version object for 3.8.3. +Pathfinding.Serialization.AstarSerializer.V3_9_0 astarserializer.html#V3_9_0 Cached version object for 3.9.0. +Pathfinding.Serialization.AstarSerializer.V4_1_0 astarserializer.html#V4_1_0 Cached version object for 4.1.0. +Pathfinding.Serialization.AstarSerializer.V4_3_12 astarserializer.html#V4_3_12 Cached version object for 4.3.12. +Pathfinding.Serialization.AstarSerializer.V4_3_2 astarserializer.html#V4_3_2 Cached version object for 4.3.2. +Pathfinding.Serialization.AstarSerializer.V4_3_37 astarserializer.html#V4_3_37 Cached version object for 4.3.37. +Pathfinding.Serialization.AstarSerializer.V4_3_6 astarserializer.html#V4_3_6 Cached version object for 4.3.6. +Pathfinding.Serialization.AstarSerializer.V4_3_68 astarserializer.html#V4_3_68 Cached version object for 4.3.68. +Pathfinding.Serialization.AstarSerializer.V4_3_74 astarserializer.html#V4_3_74 Cached version object for 4.3.74. +Pathfinding.Serialization.AstarSerializer.V4_3_80 astarserializer.html#V4_3_80 Cached version object for 4.3.80. +Pathfinding.Serialization.AstarSerializer.V4_3_83 astarserializer.html#V4_3_83 Cached version object for 4.3.83. +Pathfinding.Serialization.AstarSerializer.V4_3_85 astarserializer.html#V4_3_85 Cached version object for 4.3.85. +Pathfinding.Serialization.AstarSerializer.V4_3_87 astarserializer.html#V4_3_87 Cached version object for 4.3.87. +Pathfinding.Serialization.AstarSerializer.V5_1_0 astarserializer.html#V5_1_0 Cached version object for 5.1.0. +Pathfinding.Serialization.AstarSerializer._stringBuilder astarserializer.html#_stringBuilder Cached StringBuilder to avoid excessive allocations. +Pathfinding.Serialization.AstarSerializer.binaryExt astarserializer.html#binaryExt Extension to use for binary files. +Pathfinding.Serialization.AstarSerializer.checksum astarserializer.html#checksum Checksum for the serialized data. \n\nUsed to provide a quick equality check in editor code +Pathfinding.Serialization.AstarSerializer.contextRoot astarserializer.html#contextRoot Root GameObject used for deserialization. \n\nThis should be the GameObject which holds the AstarPath component. Important when deserializing when the component is on a prefab. +Pathfinding.Serialization.AstarSerializer.data astarserializer.html#data +Pathfinding.Serialization.AstarSerializer.encoding astarserializer.html#encoding +Pathfinding.Serialization.AstarSerializer.graphIndexInZip astarserializer.html#graphIndexInZip Index used for the graph in the file. \n\nIf some graphs were null in the file then graphIndexInZip[graphs[i]] may not equal i. Used for deserialization. +Pathfinding.Serialization.AstarSerializer.graphIndexOffset astarserializer.html#graphIndexOffset +Pathfinding.Serialization.AstarSerializer.graphs astarserializer.html#graphs Graphs that are being serialized or deserialized. +Pathfinding.Serialization.AstarSerializer.jsonExt astarserializer.html#jsonExt Extension to use for json files. +Pathfinding.Serialization.AstarSerializer.meta astarserializer.html#meta Graph metadata. +Pathfinding.Serialization.AstarSerializer.persistentGraphs astarserializer.html#persistentGraphs +Pathfinding.Serialization.AstarSerializer.settings astarserializer.html#settings Settings for serialization. +Pathfinding.Serialization.AstarSerializer.zip astarserializer.html#zip Zip which the data is loaded from. +Pathfinding.Serialization.AstarSerializer.zipStream astarserializer.html#zipStream Memory stream with the zip data. +Pathfinding.Serialization.GraphMeta.graphs graphmeta.html#graphs Number of graphs serialized. +Pathfinding.Serialization.GraphMeta.guids graphmeta.html#guids Guids for all graphs. +Pathfinding.Serialization.GraphMeta.typeNames graphmeta.html#typeNames Type names for all graphs. +Pathfinding.Serialization.GraphMeta.version graphmeta.html#version Project version it was saved with. +Pathfinding.Serialization.GraphSerializationContext.graphIndex graphserializationcontext.html#graphIndex Index of the graph which is currently being processed. \n\n[more in online documentation] +Pathfinding.Serialization.GraphSerializationContext.id2NodeMapping graphserializationcontext.html#id2NodeMapping +Pathfinding.Serialization.GraphSerializationContext.meta graphserializationcontext.html#meta Metadata about graphs being deserialized. +Pathfinding.Serialization.GraphSerializationContext.persistentGraphs graphserializationcontext.html#persistentGraphs +Pathfinding.Serialization.GraphSerializationContext.reader graphserializationcontext.html#reader Deserialization stream. \n\nWill only be set when deserializing +Pathfinding.Serialization.GraphSerializationContext.writer graphserializationcontext.html#writer Serialization stream. \n\nWill only be set when serializing +Pathfinding.Serialization.JsonDynamicTypeAliasAttribute.alias jsondynamictypealiasattribute.html#alias +Pathfinding.Serialization.JsonDynamicTypeAliasAttribute.type jsondynamictypealiasattribute.html#type +Pathfinding.Serialization.Migrations.IsLegacyFormat migrations.html#IsLegacyFormat +Pathfinding.Serialization.Migrations.LegacyVersion migrations.html#LegacyVersion +Pathfinding.Serialization.Migrations.MIGRATE_TO_BITFIELD migrations.html#MIGRATE_TO_BITFIELD A special migration flag which is used to mark that the version has been migrated to the bitfield format, from the legacy linear version format. +Pathfinding.Serialization.Migrations.allMigrations migrations.html#allMigrations Bitfield of all migrations that the component supports. \n\nA newly created component will be initialized with this value. +Pathfinding.Serialization.Migrations.finishedMigrations migrations.html#finishedMigrations Bitfield of all migrations that have been run. +Pathfinding.Serialization.Migrations.ignore migrations.html#ignore +Pathfinding.Serialization.SerializableAnimationCurve.keys serializableanimationcurve.html#keys +Pathfinding.Serialization.SerializableAnimationCurve.postWrapMode serializableanimationcurve.html#postWrapMode +Pathfinding.Serialization.SerializableAnimationCurve.preWrapMode serializableanimationcurve.html#preWrapMode +Pathfinding.Serialization.SerializeSettings.Settings serializesettings.html#Settings Serialization settings for only saving graph settings. +Pathfinding.Serialization.SerializeSettings.editorSettings serializesettings.html#editorSettings Save editor settings. \n\n[more in online documentation] +Pathfinding.Serialization.SerializeSettings.nodes serializesettings.html#nodes Enable to include node data. \n\nIf false, only settings will be saved +Pathfinding.Serialization.SerializeSettings.prettyPrint serializesettings.html#prettyPrint Use pretty printing for the json data. \n\nGood if you want to open up the saved data and edit it manually +Pathfinding.Serialization.TinyJsonDeserializer.builder tinyjsondeserializer.html#builder +Pathfinding.Serialization.TinyJsonDeserializer.contextRoot tinyjsondeserializer.html#contextRoot +Pathfinding.Serialization.TinyJsonDeserializer.fullTextDebug tinyjsondeserializer.html#fullTextDebug +Pathfinding.Serialization.TinyJsonDeserializer.numberFormat tinyjsondeserializer.html#numberFormat +Pathfinding.Serialization.TinyJsonDeserializer.reader tinyjsondeserializer.html#reader +Pathfinding.Serialization.TinyJsonSerializer.invariantCulture tinyjsonserializer.html#invariantCulture +Pathfinding.Serialization.TinyJsonSerializer.output tinyjsonserializer.html#output +Pathfinding.Serialization.TinyJsonSerializer.serializers tinyjsonserializer.html#serializers +Pathfinding.Side pathfinding.html#Side Indicates the side of a line that a point lies on. +Pathfinding.SimpleSmoothModifier.Order simplesmoothmodifier.html#Order +Pathfinding.SimpleSmoothModifier.SmoothType simplesmoothmodifier.html#SmoothType +Pathfinding.SimpleSmoothModifier.bezierTangentLength simplesmoothmodifier.html#bezierTangentLength Length factor of the bezier curves' tangents'. +Pathfinding.SimpleSmoothModifier.factor simplesmoothmodifier.html#factor Roundness factor used for CurvedNonuniform. +Pathfinding.SimpleSmoothModifier.iterations simplesmoothmodifier.html#iterations Number of times to apply smoothing. +Pathfinding.SimpleSmoothModifier.maxSegmentLength simplesmoothmodifier.html#maxSegmentLength The length of the segments in the smoothed path when using uniformLength. \n\nA high value yields rough paths and low value yields very smooth paths, but is slower +Pathfinding.SimpleSmoothModifier.offset simplesmoothmodifier.html#offset Offset to apply in each smoothing iteration when using Offset Simple. \n\n[more in online documentation] +Pathfinding.SimpleSmoothModifier.smoothType simplesmoothmodifier.html#smoothType Type of smoothing to use. +Pathfinding.SimpleSmoothModifier.strength simplesmoothmodifier.html#strength Determines how much smoothing to apply in each smooth iteration. \n\n0.5 usually produces the nicest looking curves. +Pathfinding.SimpleSmoothModifier.subdivisions simplesmoothmodifier.html#subdivisions Number of times to subdivide when not using a uniform length. +Pathfinding.SimpleSmoothModifier.uniformLength simplesmoothmodifier.html#uniformLength Toggle to divide all lines in equal length segments. \n\n[more in online documentation] +Pathfinding.SingleNodeBlocker.lastBlocked singlenodeblocker.html#lastBlocked +Pathfinding.SingleNodeBlocker.manager singlenodeblocker.html#manager +Pathfinding.StartEndModifier.Exactness startendmodifier.html#Exactness Sets where the start and end points of a path should be placed. \n\nHere is a legend showing what the different items in the above images represent. The images above show a path coming in from the top left corner and ending at a node next to an obstacle as well as 2 different possible end points of the path and how they would be modified. <b>[image in online documentation]</b> +Pathfinding.StartEndModifier.Order startendmodifier.html#Order +Pathfinding.StartEndModifier.addPoints startendmodifier.html#addPoints Add points to the path instead of replacing them. \n\nIf for example exactEndPoint is set to ClosestOnNode then the path will be modified so that the path goes first to the center of the last node in the path and then goes to the closest point on the node to the end point in the path request.\n\nIf this is false however then the relevant points in the path will simply be replaced. In the above example the path would go directly to the closest point on the node without passing through the center of the node. +Pathfinding.StartEndModifier.adjustStartPoint startendmodifier.html#adjustStartPoint Will be called when a path is processed. \n\nThe value which is returned will be used as the start point of the path and potentially clamped depending on the value of the exactStartPoint field. Only used for the Original, Interpolate and NodeConnection modes. +Pathfinding.StartEndModifier.connectionBuffer startendmodifier.html#connectionBuffer +Pathfinding.StartEndModifier.connectionBufferAddDelegate startendmodifier.html#connectionBufferAddDelegate +Pathfinding.StartEndModifier.exactEndPoint startendmodifier.html#exactEndPoint How the end point of the path will be determined. \n\n[more in online documentation] +Pathfinding.StartEndModifier.exactStartPoint startendmodifier.html#exactStartPoint How the start point of the path will be determined. \n\n[more in online documentation] +Pathfinding.StartEndModifier.mask startendmodifier.html#mask +Pathfinding.StartEndModifier.useGraphRaycasting startendmodifier.html#useGraphRaycasting Do a straight line check from the node's center to the point determined by the Exactness. \n\n[more in online documentation] +Pathfinding.StartEndModifier.useRaycasting startendmodifier.html#useRaycasting Do a straight line check from the node's center to the point determined by the Exactness. \n\nThere are very few cases where you will want to use this. It is mostly here for backwards compatibility reasons.\n\n[more in online documentation] +Pathfinding.TargetMover.Trigger targetmover.html#Trigger +Pathfinding.TargetMover.cam targetmover.html#cam +Pathfinding.TargetMover.clickEffect targetmover.html#clickEffect +Pathfinding.TargetMover.formationMode targetmover.html#formationMode +Pathfinding.TargetMover.mask targetmover.html#mask Mask for the raycast placement. +Pathfinding.TargetMover.onlyOnDoubleClick targetmover.html#onlyOnDoubleClick Determines if the target position should be updated every frame or only on double-click. +Pathfinding.TargetMover.target targetmover.html#target +Pathfinding.TargetMover.trigger targetmover.html#trigger +Pathfinding.TargetMover.use2D targetmover.html#use2D +Pathfinding.TemporaryNode.associatedNode temporarynode.html#associatedNode +Pathfinding.TemporaryNode.position temporarynode.html#position +Pathfinding.TemporaryNode.targetIndex temporarynode.html#targetIndex +Pathfinding.TemporaryNode.type temporarynode.html#type +Pathfinding.TemporaryNodeType pathfinding.html#TemporaryNodeType +Pathfinding.Thread pathfinding.html#Thread +Pathfinding.ThreadCount pathfinding.html#ThreadCount Number of threads to use. +Pathfinding.TriangleMeshNode.InaccuratePathSearch trianglemeshnode.html#InaccuratePathSearch Legacy compatibility. \n\nEnabling this will make pathfinding use node centers, which leads to less accurate paths (but it's faster). +Pathfinding.TriangleMeshNode.MarkerClosest trianglemeshnode.html#MarkerClosest +Pathfinding.TriangleMeshNode.MarkerDecode trianglemeshnode.html#MarkerDecode +Pathfinding.TriangleMeshNode.MarkerGetVertices trianglemeshnode.html#MarkerGetVertices +Pathfinding.TriangleMeshNode.PathNodeVariants trianglemeshnode.html#PathNodeVariants +Pathfinding.TriangleMeshNode.TileIndex trianglemeshnode.html#TileIndex Tile index in the recast or navmesh graph that this node is part of. \n\n[more in online documentation] +Pathfinding.TriangleMeshNode._navmeshHolders trianglemeshnode.html#_navmeshHolders Holds INavmeshHolder references for all graph indices to be able to access them in a performant manner. +Pathfinding.TriangleMeshNode.lockObject trianglemeshnode.html#lockObject Used for synchronised access to the _navmeshHolders array. +Pathfinding.TriangleMeshNode.v0 trianglemeshnode.html#v0 Internal vertex index for the first vertex. +Pathfinding.TriangleMeshNode.v1 trianglemeshnode.html#v1 Internal vertex index for the second vertex. +Pathfinding.TriangleMeshNode.v2 trianglemeshnode.html#v2 Internal vertex index for the third vertex. +Pathfinding.UniqueComponentAttribute.tag uniquecomponentattribute.html#tag +Pathfinding.UnityReferenceHelper.guid unityreferencehelper.html#guid +Pathfinding.Util.ArrayPool.MaximumExactArrayLength arraypool.html#MaximumExactArrayLength Maximum length of an array pooled using ClaimWithExactLength. \n\nArrays with lengths longer than this will silently not be pooled. +Pathfinding.Util.ArrayPool.exactPool arraypool.html#exactPool +Pathfinding.Util.ArrayPool.inPool arraypool.html#inPool +Pathfinding.Util.ArrayPool.pool arraypool.html#pool Internal pool. \n\nThe arrays in each bucket have lengths of 2^i +Pathfinding.Util.BatchedEvents.Archetype.action archetype.html#action +Pathfinding.Util.BatchedEvents.Archetype.archetypeIndex archetype.html#archetypeIndex +Pathfinding.Util.BatchedEvents.Archetype.events archetype.html#events +Pathfinding.Util.BatchedEvents.Archetype.objectCount archetype.html#objectCount +Pathfinding.Util.BatchedEvents.Archetype.objects archetype.html#objects +Pathfinding.Util.BatchedEvents.Archetype.sampler archetype.html#sampler +Pathfinding.Util.BatchedEvents.Archetype.transforms archetype.html#transforms +Pathfinding.Util.BatchedEvents.Archetype.type archetype.html#type +Pathfinding.Util.BatchedEvents.Archetype.variant archetype.html#variant +Pathfinding.Util.BatchedEvents.ArchetypeMask batchedevents.html#ArchetypeMask +Pathfinding.Util.BatchedEvents.ArchetypeOffset batchedevents.html#ArchetypeOffset +Pathfinding.Util.BatchedEvents.Event batchedevents.html#Event +Pathfinding.Util.BatchedEvents.data batchedevents.html#data +Pathfinding.Util.BatchedEvents.instance batchedevents.html#instance +Pathfinding.Util.BatchedEvents.isIterating batchedevents.html#isIterating +Pathfinding.Util.BatchedEvents.isIteratingOverTypeIndex batchedevents.html#isIteratingOverTypeIndex +Pathfinding.Util.CircularBuffer.AbsoluteEndIndex circularbuffer.html#AbsoluteEndIndex Absolute index of the last item in the buffer, may be negative or greater than Length. +Pathfinding.Util.CircularBuffer.AbsoluteStartIndex circularbuffer.html#AbsoluteStartIndex Absolute index of the first item in the buffer, may be negative or greater than Length. +Pathfinding.Util.CircularBuffer.Count circularbuffer.html#Count +Pathfinding.Util.CircularBuffer.First circularbuffer.html#First First item in the buffer, throws if the buffer is empty. +Pathfinding.Util.CircularBuffer.Last circularbuffer.html#Last Last item in the buffer, throws if the buffer is empty. +Pathfinding.Util.CircularBuffer.Length circularbuffer.html#Length Number of items in the buffer. +Pathfinding.Util.CircularBuffer.data circularbuffer.html#data +Pathfinding.Util.CircularBuffer.head circularbuffer.html#head +Pathfinding.Util.CircularBuffer.length circularbuffer.html#length +Pathfinding.Util.CircularBuffer.this[int index] circularbuffer.html#thisintindex Indexes the buffer, with index 0 being the first element. +Pathfinding.Util.DependencyCheck.Dependency.name dependency.html#name +Pathfinding.Util.DependencyCheck.Dependency.version dependency.html#version +Pathfinding.Util.EditorGUILayoutHelper.tagNamesAndEditTagsButton editorguilayouthelper.html#tagNamesAndEditTagsButton Tag names and an additional 'Edit Tags...' entry. \n\nUsed for SingleTagField +Pathfinding.Util.EditorGUILayoutHelper.tagValues editorguilayouthelper.html#tagValues +Pathfinding.Util.EditorGUILayoutHelper.timeLastUpdatedTagNames editorguilayouthelper.html#timeLastUpdatedTagNames Last time tagNamesAndEditTagsButton was updated. \n\nUses EditorApplication.timeSinceStartup +Pathfinding.Util.GraphGizmoHelper.builder graphgizmohelper.html#builder +Pathfinding.Util.GraphGizmoHelper.debugData graphgizmohelper.html#debugData +Pathfinding.Util.GraphGizmoHelper.debugFloor graphgizmohelper.html#debugFloor +Pathfinding.Util.GraphGizmoHelper.debugMode graphgizmohelper.html#debugMode +Pathfinding.Util.GraphGizmoHelper.debugPathID graphgizmohelper.html#debugPathID +Pathfinding.Util.GraphGizmoHelper.debugPathNodes graphgizmohelper.html#debugPathNodes +Pathfinding.Util.GraphGizmoHelper.debugRoof graphgizmohelper.html#debugRoof +Pathfinding.Util.GraphGizmoHelper.drawConnection graphgizmohelper.html#drawConnection +Pathfinding.Util.GraphGizmoHelper.drawConnectionColor graphgizmohelper.html#drawConnectionColor +Pathfinding.Util.GraphGizmoHelper.drawConnectionStart graphgizmohelper.html#drawConnectionStart +Pathfinding.Util.GraphGizmoHelper.hasher graphgizmohelper.html#hasher +Pathfinding.Util.GraphGizmoHelper.nodeStorage graphgizmohelper.html#nodeStorage +Pathfinding.Util.GraphGizmoHelper.showSearchTree graphgizmohelper.html#showSearchTree +Pathfinding.Util.GraphSnapshot.inner graphsnapshot.html#inner +Pathfinding.Util.GraphTransform.i3translation graphtransform.html#i3translation +Pathfinding.Util.GraphTransform.identity graphtransform.html#identity True if this transform is the identity transform (i.e it does not do anything) +Pathfinding.Util.GraphTransform.identityTransform graphtransform.html#identityTransform +Pathfinding.Util.GraphTransform.inverseMatrix graphtransform.html#inverseMatrix +Pathfinding.Util.GraphTransform.inverseRotation graphtransform.html#inverseRotation +Pathfinding.Util.GraphTransform.isIdentity graphtransform.html#isIdentity +Pathfinding.Util.GraphTransform.isOnlyTranslational graphtransform.html#isOnlyTranslational +Pathfinding.Util.GraphTransform.isXY graphtransform.html#isXY +Pathfinding.Util.GraphTransform.isXZ graphtransform.html#isXZ +Pathfinding.Util.GraphTransform.matrix graphtransform.html#matrix +Pathfinding.Util.GraphTransform.onlyTranslational graphtransform.html#onlyTranslational True if this transform is a pure translation without any scaling or rotation. +Pathfinding.Util.GraphTransform.rotation graphtransform.html#rotation +Pathfinding.Util.GraphTransform.translation graphtransform.html#translation +Pathfinding.Util.GraphTransform.up graphtransform.html#up +Pathfinding.Util.GraphTransform.xyPlane graphtransform.html#xyPlane Transforms from the XZ plane to the XY plane. +Pathfinding.Util.GraphTransform.xzPlane graphtransform.html#xzPlane Transforms from the XZ plane to the XZ plane (i.e. \n\nan identity transformation) +Pathfinding.Util.Guid._a guid.html#_a +Pathfinding.Util.Guid._b guid.html#_b +Pathfinding.Util.Guid.hex guid.html#hex +Pathfinding.Util.Guid.random guid.html#random +Pathfinding.Util.Guid.text guid.html#text +Pathfinding.Util.Guid.zero guid.html#zero +Pathfinding.Util.Guid.zeroString guid.html#zeroString +Pathfinding.Util.HierarchicalBitset.Capacity hierarchicalbitset.html#Capacity +Pathfinding.Util.HierarchicalBitset.IsCreated hierarchicalbitset.html#IsCreated +Pathfinding.Util.HierarchicalBitset.IsEmpty hierarchicalbitset.html#IsEmpty True if the bitset is empty. +Pathfinding.Util.HierarchicalBitset.Iterator.Current iterator.html#Current +Pathfinding.Util.HierarchicalBitset.Iterator.bitSet iterator.html#bitSet +Pathfinding.Util.HierarchicalBitset.Iterator.l2bitIndex iterator.html#l2bitIndex +Pathfinding.Util.HierarchicalBitset.Iterator.l3bitIndex iterator.html#l3bitIndex +Pathfinding.Util.HierarchicalBitset.Iterator.l3index iterator.html#l3index +Pathfinding.Util.HierarchicalBitset.Iterator.result iterator.html#result +Pathfinding.Util.HierarchicalBitset.Iterator.resultCount iterator.html#resultCount +Pathfinding.Util.HierarchicalBitset.Log64 hierarchicalbitset.html#Log64 +Pathfinding.Util.HierarchicalBitset.allocator hierarchicalbitset.html#allocator +Pathfinding.Util.HierarchicalBitset.l1 hierarchicalbitset.html#l1 +Pathfinding.Util.HierarchicalBitset.l2 hierarchicalbitset.html#l2 +Pathfinding.Util.HierarchicalBitset.l3 hierarchicalbitset.html#l3 +Pathfinding.Util.IEntityIndex.EntityIndex ientityindex.html#EntityIndex +Pathfinding.Util.IProgress.Progress iprogress.html#Progress +Pathfinding.Util.ListPool.LargeThreshold listpool.html#LargeThreshold +Pathfinding.Util.ListPool.MaxCapacitySearchLength listpool.html#MaxCapacitySearchLength When requesting a list with a specified capacity, search max this many lists in the pool before giving up. \n\nMust be greater or equal to one. +Pathfinding.Util.ListPool.MaxLargePoolSize listpool.html#MaxLargePoolSize +Pathfinding.Util.ListPool.inPool listpool.html#inPool +Pathfinding.Util.ListPool.largePool listpool.html#largePool +Pathfinding.Util.ListPool.pool listpool.html#pool Internal pool. +Pathfinding.Util.MeshUtility.JobRemoveDuplicateVertices.outputTags jobremoveduplicatevertices.html#outputTags +Pathfinding.Util.MeshUtility.JobRemoveDuplicateVertices.outputTriangles jobremoveduplicatevertices.html#outputTriangles +Pathfinding.Util.MeshUtility.JobRemoveDuplicateVertices.outputVertices jobremoveduplicatevertices.html#outputVertices +Pathfinding.Util.MeshUtility.JobRemoveDuplicateVertices.tags jobremoveduplicatevertices.html#tags +Pathfinding.Util.MeshUtility.JobRemoveDuplicateVertices.triangles jobremoveduplicatevertices.html#triangles +Pathfinding.Util.MeshUtility.JobRemoveDuplicateVertices.vertices jobremoveduplicatevertices.html#vertices +Pathfinding.Util.NativeCircularBuffer.AbsoluteEndIndex nativecircularbuffer.html#AbsoluteEndIndex Absolute index of the last item in the buffer, may be negative or greater than Length. +Pathfinding.Util.NativeCircularBuffer.AbsoluteStartIndex nativecircularbuffer.html#AbsoluteStartIndex Absolute index of the first item in the buffer, may be negative or greater than Length. +Pathfinding.Util.NativeCircularBuffer.Allocator nativecircularbuffer.html#Allocator The allocator used to create the internal buffer. +Pathfinding.Util.NativeCircularBuffer.Count nativecircularbuffer.html#Count +Pathfinding.Util.NativeCircularBuffer.First nativecircularbuffer.html#First First item in the buffer throws if the buffer is empty. +Pathfinding.Util.NativeCircularBuffer.IsCreated nativecircularbuffer.html#IsCreated +Pathfinding.Util.NativeCircularBuffer.Last nativecircularbuffer.html#Last Last item in the buffer, throws if the buffer is empty. +Pathfinding.Util.NativeCircularBuffer.Length nativecircularbuffer.html#Length Number of items in the buffer. +Pathfinding.Util.NativeCircularBuffer.capacityMask nativecircularbuffer.html#capacityMask Capacity of the allocation minus 1. \n\nInvariant: (a power of two) minus 1 +Pathfinding.Util.NativeCircularBuffer.data nativecircularbuffer.html#data +Pathfinding.Util.NativeCircularBuffer.head nativecircularbuffer.html#head +Pathfinding.Util.NativeCircularBuffer.length nativecircularbuffer.html#length +Pathfinding.Util.NativeCircularBuffer.this[int index] nativecircularbuffer.html#thisintindex Indexes the buffer, with index 0 being the first element. +Pathfinding.Util.NativeHashMapInt3Int util2.html#NativeHashMapInt3Int +Pathfinding.Util.NativeMovementPlane.rotation nativemovementplane.html#rotation The rotation of the plane. \n\nThe plane is defined by the XZ-plane rotated by this quaternion.\n\nShould always be normalized. +Pathfinding.Util.NativeMovementPlane.up nativemovementplane.html#up Normal of the plane. +Pathfinding.Util.NodeHasher.debugData nodehasher.html#debugData +Pathfinding.Util.NodeHasher.hasher nodehasher.html#hasher +Pathfinding.Util.NodeHasher.includeAreaInfo nodehasher.html#includeAreaInfo +Pathfinding.Util.NodeHasher.includeHierarchicalNodeInfo nodehasher.html#includeHierarchicalNodeInfo +Pathfinding.Util.NodeHasher.includePathSearchInfo nodehasher.html#includePathSearchInfo +Pathfinding.Util.ObjectPoolSimple.inPool objectpoolsimple.html#inPool +Pathfinding.Util.ObjectPoolSimple.pool objectpoolsimple.html#pool Internal pool. +Pathfinding.Util.PathInterpolator.Cursor.currentDistance cursor.html#currentDistance +Pathfinding.Util.PathInterpolator.Cursor.currentSegmentLength cursor.html#currentSegmentLength +Pathfinding.Util.PathInterpolator.Cursor.curvatureDirection cursor.html#curvatureDirection A vector parallel to the local curvature. \n\nThis will be zero on straight line segments, and in the same direction as the rotation axis when on a corner.\n\nSince this interpolator follows a polyline, the curvature is always either 0 or infinite. Therefore the magnitude of this vector has no meaning when non-zero. Only the direction matters. +Pathfinding.Util.PathInterpolator.Cursor.distance cursor.html#distance Traversed distance from the start of the path. +Pathfinding.Util.PathInterpolator.Cursor.distanceToSegmentStart cursor.html#distanceToSegmentStart +Pathfinding.Util.PathInterpolator.Cursor.endPoint cursor.html#endPoint Last point in the path. +Pathfinding.Util.PathInterpolator.Cursor.fractionAlongCurrentSegment cursor.html#fractionAlongCurrentSegment Fraction of the way along the current segment. \n\n0 is at the start of the segment, 1 is at the end of the segment. +Pathfinding.Util.PathInterpolator.Cursor.interpolator cursor.html#interpolator +Pathfinding.Util.PathInterpolator.Cursor.position cursor.html#position Current position. +Pathfinding.Util.PathInterpolator.Cursor.remainingDistance cursor.html#remainingDistance Remaining distance until the end of the path. +Pathfinding.Util.PathInterpolator.Cursor.segmentCount cursor.html#segmentCount +Pathfinding.Util.PathInterpolator.Cursor.segmentIndex cursor.html#segmentIndex Current segment. \n\nThe start and end points of the segment are path[value] and path[value+1]. +Pathfinding.Util.PathInterpolator.Cursor.tangent cursor.html#tangent Tangent of the curve at the current position. \n\nNot necessarily normalized. +Pathfinding.Util.PathInterpolator.Cursor.valid cursor.html#valid True if this instance has a path set. \n\n[more in online documentation] +Pathfinding.Util.PathInterpolator.Cursor.version cursor.html#version +Pathfinding.Util.PathInterpolator.path pathinterpolator.html#path +Pathfinding.Util.PathInterpolator.start pathinterpolator.html#start +Pathfinding.Util.PathInterpolator.totalDistance pathinterpolator.html#totalDistance +Pathfinding.Util.PathInterpolator.valid pathinterpolator.html#valid True if this instance has a path set. \n\n[more in online documentation] +Pathfinding.Util.PathInterpolator.version pathinterpolator.html#version +Pathfinding.Util.PathPartWithLinkInfo.endIndex pathpartwithlinkinfo.html#endIndex Index of the last point in the path that this part represents. \n\nFor off-mesh links, this will refer to the first point in the part after the off-mesh link. +Pathfinding.Util.PathPartWithLinkInfo.linkInfo pathpartwithlinkinfo.html#linkInfo The off-mesh link that this part represents. \n\nWill contain a null link if this part is not an off-mesh link +Pathfinding.Util.PathPartWithLinkInfo.startIndex pathpartwithlinkinfo.html#startIndex Index of the first point in the path that this part represents. \n\nFor off-mesh links, this will refer to the last point in the part before the off-mesh link. +Pathfinding.Util.PathPartWithLinkInfo.type pathpartwithlinkinfo.html#type Specifies if this is a sequence of nodes, or an off-mesh link. +Pathfinding.Util.Promise.IsCompleted promise.html#IsCompleted +Pathfinding.Util.Promise.Progress promise.html#Progress +Pathfinding.Util.Promise.handle promise.html#handle +Pathfinding.Util.Promise.result promise.html#result +Pathfinding.Util.SimpleMovementPlane.XYPlane simplemovementplane.html#XYPlane A plane that spans the X and Y axes. +Pathfinding.Util.SimpleMovementPlane.XZPlane simplemovementplane.html#XZPlane A plane that spans the X and Z axes. +Pathfinding.Util.SimpleMovementPlane.inverseRotation simplemovementplane.html#inverseRotation +Pathfinding.Util.SimpleMovementPlane.isXY simplemovementplane.html#isXY +Pathfinding.Util.SimpleMovementPlane.isXZ simplemovementplane.html#isXZ +Pathfinding.Util.SimpleMovementPlane.plane simplemovementplane.html#plane +Pathfinding.Util.SimpleMovementPlane.rotation simplemovementplane.html#rotation +Pathfinding.Util.SlabAllocator.AllocatedBit slaballocator.html#AllocatedBit +Pathfinding.Util.SlabAllocator.AllocatorData.freeHeads allocatordata.html#freeHeads +Pathfinding.Util.SlabAllocator.AllocatorData.mem allocatordata.html#mem +Pathfinding.Util.SlabAllocator.ByteSize slaballocator.html#ByteSize +Pathfinding.Util.SlabAllocator.Header.length header.html#length +Pathfinding.Util.SlabAllocator.InvalidAllocation slaballocator.html#InvalidAllocation Allocation which is always invalid. +Pathfinding.Util.SlabAllocator.IsCreated slaballocator.html#IsCreated +Pathfinding.Util.SlabAllocator.LengthMask slaballocator.html#LengthMask +Pathfinding.Util.SlabAllocator.List.Length list.html#Length +Pathfinding.Util.SlabAllocator.List.allocationIndex list.html#allocationIndex +Pathfinding.Util.SlabAllocator.List.allocator list.html#allocator +Pathfinding.Util.SlabAllocator.List.span list.html#span +Pathfinding.Util.SlabAllocator.List.this[int index] list.html#thisintindex +Pathfinding.Util.SlabAllocator.MaxAllocationSizeIndex slaballocator.html#MaxAllocationSizeIndex +Pathfinding.Util.SlabAllocator.NextBlock.next nextblock.html#next +Pathfinding.Util.SlabAllocator.UsedBit slaballocator.html#UsedBit +Pathfinding.Util.SlabAllocator.ZeroLengthArray slaballocator.html#ZeroLengthArray Allocation representing a zero-length array. +Pathfinding.Util.SlabAllocator.data slaballocator.html#data +Pathfinding.Util.StackPool.pool stackpool.html#pool Internal pool. +Pathfinding.Util.ToPlaneMatrix.matrix toplanematrix.html#matrix +Pathfinding.Util.ToWorldMatrix.matrix toworldmatrix.html#matrix +Pathfinding.Util.UnsafeSpan.Length unsafespan.html#Length Number of elements in this span. +Pathfinding.Util.UnsafeSpan.length unsafespan.html#length +Pathfinding.Util.UnsafeSpan.ptr unsafespan.html#ptr +Pathfinding.Util.UnsafeSpan.this[int index] unsafespan.html#thisintindex +Pathfinding.Util.UnsafeSpan.this[uint index] unsafespan.html#thisuintindex +Pathfinding.VersionedMonoBehaviour.EntityIndex versionedmonobehaviour.html#EntityIndex Internal entity index used by BatchedEvents. \n\nShould never be modified by other scripts. +Pathfinding.VersionedMonoBehaviour.version versionedmonobehaviour.html#version Version of the serialized data. \n\nUsed for script upgrades. +Pathfinding.WelcomeScreen.FirstSceneToLoad welcomescreen.html#FirstSceneToLoad +Pathfinding.WelcomeScreen.askedAboutQuitting welcomescreen.html#askedAboutQuitting +Pathfinding.WelcomeScreen.isImportingSamples welcomescreen.html#isImportingSamples +Pathfinding.WelcomeScreen.m_VisualTreeAsset welcomescreen.html#m_VisualTreeAsset +Pathfinding.WorkItemProcessor.IndexedQueue.Count indexedqueue.html#Count +Pathfinding.WorkItemProcessor.IndexedQueue.buffer indexedqueue.html#buffer +Pathfinding.WorkItemProcessor.IndexedQueue.start indexedqueue.html#start +Pathfinding.WorkItemProcessor.IndexedQueue.this[int index] indexedqueue.html#thisintindex +Pathfinding.WorkItemProcessor.OnGraphsUpdated workitemprocessor.html#OnGraphsUpdated +Pathfinding.WorkItemProcessor.anyGraphsDirty workitemprocessor.html#anyGraphsDirty +Pathfinding.WorkItemProcessor.anyQueued workitemprocessor.html#anyQueued True if any work items are queued right now. +Pathfinding.WorkItemProcessor.astar workitemprocessor.html#astar +Pathfinding.WorkItemProcessor.preUpdateEventSent workitemprocessor.html#preUpdateEventSent +Pathfinding.WorkItemProcessor.workItems workitemprocessor.html#workItems +Pathfinding.WorkItemProcessor.workItemsInProgress workitemprocessor.html#workItemsInProgress True while a batch of work items are being processed. \n\nSet to true when a work item is started to be processed, reset to false when all work items are complete.\n\nWork item updates are often spread out over several frames, this flag will be true during the whole time the updates are in progress. +Pathfinding.WorkItemProcessor.workItemsInProgressRightNow workitemprocessor.html#workItemsInProgressRightNow Used to prevent waiting for work items to complete inside other work items as that will cause the program to hang. +PollPendingPathsSystem.cs.GCHandle <undefined> +RVOSystem.cs.GCHandle <undefined> +WindowsStoreCompatibility.cs.TP <undefined>
\ No newline at end of file diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/tooltips.tsv.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/tooltips.tsv.meta new file mode 100644 index 0000000..76f3ce1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorAssets/tooltips.tsv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aa33f44d5ed4a1dc1bfcc12897c8c3d8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorHelpers.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorHelpers.cs new file mode 100644 index 0000000..8d4fdbd --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorHelpers.cs @@ -0,0 +1,88 @@ +using UnityEngine; +using UnityEditor; + +namespace Pathfinding.Util { + /// <summary>Some editor gui helper methods</summary> + public static class EditorGUILayoutHelper { + /// <summary> + /// Tag names and an additional 'Edit Tags...' entry. + /// Used for SingleTagField + /// </summary> + static GUIContent[] tagNamesAndEditTagsButton; + static int[] tagValues = new [] { 0, 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, -1 }; + + /// <summary> + /// Last time tagNamesAndEditTagsButton was updated. + /// Uses EditorApplication.timeSinceStartup + /// </summary> + static double timeLastUpdatedTagNames; + + static void FindTagNames () { + // Make sure the AstarPath object is initialized, this is required to be able to show tag names in the popup + AstarPath.FindAstarPath(); + + // Make sure the tagNamesAndEditTagsButton is relatively up to date + if (tagNamesAndEditTagsButton == null || EditorApplication.timeSinceStartup - timeLastUpdatedTagNames > 1) { + timeLastUpdatedTagNames = EditorApplication.timeSinceStartup; + tagNamesAndEditTagsButton = new GUIContent[GraphNode.MaxTagIndex + 2]; + if (AstarPath.active != null) { + var tagNames = AstarPath.active.GetTagNames(); + for (int i = 0; i <= GraphNode.MaxTagIndex; i++) { + if (AstarPath.active == null) tagNamesAndEditTagsButton[i] = new GUIContent("Tag " + i + (i == GraphNode.MaxTagIndex ? "+" : "")); + else { + var tagName = tagNames[i]; + if (tagName != i.ToString()) { + tagNamesAndEditTagsButton[i] = new GUIContent(tagName + " (tag " + i + ")"); + } else { + tagNamesAndEditTagsButton[i] = new GUIContent("Tag " + i); + } + } + } + } else { + for (int i = 0; i <= GraphNode.MaxTagIndex; i++) { + tagNamesAndEditTagsButton[i] = new GUIContent("Tag " + i + (i == GraphNode.MaxTagIndex ? "+" : "")); + } + } + tagNamesAndEditTagsButton[tagNamesAndEditTagsButton.Length-1] = new GUIContent("Edit Tags..."); + } + } + + public static int TagField (Rect rect, GUIContent label, int value, System.Action editCallback) { + FindTagNames(); + // Tags are between 0 and GraphNode.MaxTagIndex + value = Mathf.Clamp(value, 0, GraphNode.MaxTagIndex); + + var newValue = EditorGUI.IntPopup(rect, label, value, tagNamesAndEditTagsButton, tagValues); + + // Last element corresponds to the 'Edit Tags...' entry. Open the tag editor + if (newValue == -1) { + editCallback(); + } else { + value = newValue; + } + + return value; + } + + public static int TagField (GUIContent label, int value, System.Action editCallback) { + return TagField(GUILayoutUtility.GetRect(label, EditorStyles.popup), label, value, editCallback); + } + + public static void TagField (Rect position, GUIContent label, SerializedProperty property, System.Action editCallback) { + FindTagNames(); + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = property.hasMultipleDifferentValues; + property = property.FindPropertyRelative("value"); + var newValue = EditorGUI.IntPopup(position, label, (int)property.intValue, tagNamesAndEditTagsButton, tagValues); + + if (EditorGUI.EndChangeCheck() || property.intValue < 0 || property.intValue > GraphNode.MaxTagIndex) { + if (newValue == -1) { + editCallback(); + } else { + property.intValue = Mathf.Clamp(newValue, 0, GraphNode.MaxTagIndex); + } + } + EditorGUI.showMixedValue = false; + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorHelpers.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorHelpers.cs.meta new file mode 100644 index 0000000..b8eeaec --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/EditorHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53446f7c411744bfdbf75bc347b42db8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors.meta new file mode 100644 index 0000000..b2e780c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b91087a27bf264aff8979e8f0ffa4de4 diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GraphEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GraphEditor.cs new file mode 100644 index 0000000..634f704 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GraphEditor.cs @@ -0,0 +1,160 @@ +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + public class GraphEditor : GraphEditorBase { + public AstarPathEditor editor; + + /// <summary>Stores if the graph is visible or not in the inspector</summary> + public FadeArea fadeArea; + + /// <summary>Stores if the graph info box is visible or not in the inspector</summary> + public FadeArea infoFadeArea; + + /// <summary> + /// Called by editor scripts to rescan the graphs e.g when the user moved a graph. + /// Will only scan graphs if not playing and time to scan last graph was less than some constant (to avoid lag with large graphs) + /// </summary> + public bool AutoScan () { + if (!Application.isPlaying && AstarPath.active != null && AstarPath.active.lastScanTime < 0.11F) { + AstarPath.active.Scan(); + return true; + } + return false; + } + + public virtual void OnEnable () { + } + + /// <summary>Rounds a vector's components to multiples of 0.5 (i.e 0.5, 1.0, 1.5, etc.) if very close to them</summary> + public static Vector3 RoundVector3 (Vector3 v) { + const int Multiplier = 2; + + if (Mathf.Abs(Multiplier*v.x - Mathf.Round(Multiplier*v.x)) < 0.001f) v.x = Mathf.Round(Multiplier*v.x)/Multiplier; + if (Mathf.Abs(Multiplier*v.y - Mathf.Round(Multiplier*v.y)) < 0.001f) v.y = Mathf.Round(Multiplier*v.y)/Multiplier; + if (Mathf.Abs(Multiplier*v.z - Mathf.Round(Multiplier*v.z)) < 0.001f) v.z = Mathf.Round(Multiplier*v.z)/Multiplier; + return v; + } + + public static Object ObjectField (string label, Object obj, System.Type objType, bool allowSceneObjects, bool assetsMustBeInResourcesFolder) { + return ObjectField(new GUIContent(label), obj, objType, allowSceneObjects, assetsMustBeInResourcesFolder); + } + + public static Object ObjectField (GUIContent label, Object obj, System.Type objType, bool allowSceneObjects, bool assetsMustBeInResourcesFolder) { + obj = EditorGUILayout.ObjectField(label, obj, objType, allowSceneObjects); + + if (obj != null) { + if (allowSceneObjects && !EditorUtility.IsPersistent(obj)) { + // Object is in the scene + var com = obj as Component; + var go = obj as GameObject; + if (com != null) { + go = com.gameObject; + } + if (go != null && go.GetComponent<UnityReferenceHelper>() == null) { + if (FixLabel("Object's GameObject must have a UnityReferenceHelper component attached")) { + go.AddComponent<UnityReferenceHelper>(); + } + } + } else if (EditorUtility.IsPersistent(obj)) { + if (assetsMustBeInResourcesFolder) { + string path = AssetDatabase.GetAssetPath(obj).Replace("\\", "/"); + var rg = new System.Text.RegularExpressions.Regex(@"Resources/.*$"); + + if (!rg.IsMatch(path)) { + if (FixLabel("Object must be in the 'Resources' folder")) { + if (!System.IO.Directory.Exists(Application.dataPath+"/Resources")) { + System.IO.Directory.CreateDirectory(Application.dataPath+"/Resources"); + AssetDatabase.Refresh(); + } + + string ext = System.IO.Path.GetExtension(path); + string error = AssetDatabase.MoveAsset(path, "Assets/Resources/"+obj.name+ext); + + if (error == "") { + path = AssetDatabase.GetAssetPath(obj); + } else { + Debug.LogError("Couldn't move asset - "+error); + } + } + } + + if (!AssetDatabase.IsMainAsset(obj) && obj.name != AssetDatabase.LoadMainAssetAtPath(path).name) { + if (FixLabel("Due to technical reasons, the main asset must\nhave the same name as the referenced asset")) { + string error = AssetDatabase.RenameAsset(path, obj.name); + if (error != "") { + Debug.LogError("Couldn't rename asset - "+error); + } + } + } + } + } + } + + return obj; + } + + /// <summary>Draws common graph settings</summary> + public void OnBaseInspectorGUI (NavGraph target) { + int penalty = EditorGUILayout.IntField(new GUIContent("Initial Penalty", "Initial Penalty for nodes in this graph. Set during Scan."), (int)target.initialPenalty); + + if (penalty < 0) penalty = 0; + target.initialPenalty = (uint)penalty; + } + + /// <summary>Override to implement graph inspectors</summary> + public virtual void OnInspectorGUI (NavGraph target) { + } + + /// <summary>Override to implement scene GUI drawing for the graph</summary> + public virtual void OnSceneGUI (NavGraph target) { + } + + public static void Header (string title) { + EditorGUILayout.LabelField(new GUIContent(title), EditorStyles.boldLabel); + GUILayout.Space(4); + } + + /// <summary>Draws a thin separator line</summary> + public static void Separator () { + GUIStyle separator = AstarPathEditor.astarSkin.FindStyle("PixelBox3Separator") ?? new GUIStyle(); + + Rect r = GUILayoutUtility.GetRect(new GUIContent(), separator); + + if (Event.current.type == EventType.Repaint) { + separator.Draw(r, false, false, false, false); + } + } + + /// <summary>Draws a small help box with a 'Fix' button to the right. Returns: Boolean - Returns true if the button was clicked</summary> + public static bool FixLabel (string label, string buttonLabel = "Fix", int buttonWidth = 40) { + GUILayout.BeginHorizontal(); + GUILayout.Space(14*EditorGUI.indentLevel); + GUILayout.BeginHorizontal(AstarPathEditor.helpBox); + GUILayout.Label(label, EditorGUIUtility.isProSkin ? EditorStyles.whiteMiniLabel : EditorStyles.miniLabel, GUILayout.ExpandWidth(true)); + var returnValue = GUILayout.Button(buttonLabel, EditorStyles.miniButton, GUILayout.Width(buttonWidth)); + GUILayout.EndHorizontal(); + GUILayout.EndHorizontal(); + return returnValue; + } + + /// <summary>Draws a toggle with a bold label to the right. Does not enable or disable GUI</summary> + public bool ToggleGroup (string label, bool value) { + return ToggleGroup(new GUIContent(label), value); + } + + /// <summary>Draws a toggle with a bold label to the right. Does not enable or disable GUI</summary> + public static bool ToggleGroup (GUIContent label, bool value) { + GUILayout.BeginHorizontal(); + GUILayout.Space(13*EditorGUI.indentLevel); + value = GUILayout.Toggle(value, "", GUILayout.Width(10)); + GUIStyle boxHeader = AstarPathEditor.astarSkin.FindStyle("CollisionHeader"); + if (GUILayout.Button(label, boxHeader, GUILayout.Width(100))) { + value = !value; + } + + GUILayout.EndHorizontal(); + return value; + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GraphEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GraphEditor.cs.meta new file mode 100644 index 0000000..35c29f6 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GraphEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b0bbfd9d85ec946b2a05cdeaab0d6f5f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GridGeneratorEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GridGeneratorEditor.cs new file mode 100644 index 0000000..9e75055 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GridGeneratorEditor.cs @@ -0,0 +1,871 @@ +using UnityEngine; +using UnityEditor; +using Pathfinding.Serialization; +using System.Collections.Generic; + +namespace Pathfinding { + using Pathfinding.Graphs.Grid; + using Pathfinding.Graphs.Grid.Rules; + using Pathfinding.Util; + + [CustomGraphEditor(typeof(GridGraph), "Grid Graph")] + public class GridGraphEditor : GraphEditor { + [JsonMember] + public bool locked = true; + + [JsonMember] + public bool showExtra; + + GraphTransform savedTransform; + Vector2 savedDimensions; + float savedNodeSize; + + public bool isMouseDown; + + [JsonMember] + public GridPivot pivot; + + /// <summary> + /// Shows the preview for the collision testing options. + /// + /// [Open online documentation to see images] + /// + /// On the left you can see a top-down view of the graph with a grid of nodes. + /// On the right you can see a side view of the graph. The white line at the bottom is the base of the graph, with node positions indicated using small dots. + /// When using 2D physics, only the top-down view is visible. + /// + /// The green shape indicates the shape that will be used for collision checking. + /// </summary> + [JsonMember] + public bool collisionPreviewOpen; + + [JsonMember] + public int selectedTilemap; + + /// <summary>Cached gui style</summary> + static GUIStyle lockStyle; + + /// <summary>Cached gui style</summary> + static GUIStyle gridPivotSelectBackground; + + /// <summary>Cached gui style</summary> + static GUIStyle gridPivotSelectButton; + + public GridGraphEditor() { + // Default value depends on if the game is running or not. Make it hidden in play mode by default. + collisionPreviewOpen = !Application.isPlaying; + } + + public override void OnInspectorGUI (NavGraph target) { + var graph = target as GridGraph; + + DrawFirstSection(graph); + Separator(); + DrawMiddleSection(graph); + Separator(); + DrawCollisionEditor(graph.collision); + DrawRules(graph); + + Separator(); + DrawLastSection(graph); + } + + bool IsHexagonal (GridGraph graph) { + return graph.neighbours == NumNeighbours.Six && graph.uniformEdgeCosts; + } + + bool IsIsometric (GridGraph graph) { + if (IsHexagonal(graph)) return false; + if (graph.aspectRatio != 1) return true; + return graph.isometricAngle != 0; + } + + bool IsAdvanced (GridGraph graph) { + if (graph.inspectorGridMode == InspectorGridMode.Advanced) return true; + // Weird configuration + return (graph.neighbours == NumNeighbours.Six) != graph.uniformEdgeCosts; + } + + InspectorGridMode DetermineGridType (GridGraph graph) { + bool hex = IsHexagonal(graph); + bool iso = IsIsometric(graph); + bool adv = IsAdvanced(graph); + + if (adv || (hex && iso)) return InspectorGridMode.Advanced; + if (hex) return InspectorGridMode.Hexagonal; + if (iso) return InspectorGridMode.IsometricGrid; + return graph.inspectorGridMode; + } + + void DrawInspectorMode (GridGraph graph) { + graph.inspectorGridMode = DetermineGridType(graph); + var newMode = (InspectorGridMode)EditorGUILayout.EnumPopup("Shape", (System.Enum)graph.inspectorGridMode); + if (newMode != graph.inspectorGridMode) graph.SetGridShape(newMode); + } + + protected virtual void Draw2DMode (GridGraph graph) { + graph.is2D = EditorGUILayout.Toggle(new GUIContent("2D"), graph.is2D); + } + + GUIContent[] hexagonSizeContents = { + new GUIContent("Hexagon Width", "Distance between two opposing sides on the hexagon"), + new GUIContent("Hexagon Diameter", "Distance between two opposing vertices on the hexagon"), + new GUIContent("Node Size", "Raw node size value, this doesn't correspond to anything particular on the hexagon."), + }; + + static List<GridLayout> cachedSceneGridLayouts; + static float cachedSceneGridLayoutsTimestamp = -float.PositiveInfinity; + + static string GetPath (Transform current) { + if (current.parent == null) + return current.name; + return GetPath(current.parent) + "/" + current.name; + } + + void DrawTilemapAlignment (GridGraph graph) { + if (cachedSceneGridLayouts == null || Time.realtimeSinceStartup - cachedSceneGridLayoutsTimestamp > 5f) { + var tilemaps = UnityCompatibility.FindObjectsByTypeSorted<UnityEngine.GridLayout>(); + List<GridLayout> layouts = new List<GridLayout>(tilemaps); + for (int i = 0; i < tilemaps.Length; i++) { + if (tilemaps[i] is UnityEngine.Tilemaps.Tilemap tilemap) layouts.Remove(tilemap.layoutGrid); + } + cachedSceneGridLayouts = layouts; + cachedSceneGridLayoutsTimestamp = Time.realtimeSinceStartup; + } + for (int i = cachedSceneGridLayouts.Count - 1; i >= 0; i--) { + if (cachedSceneGridLayouts[i] == null) cachedSceneGridLayouts.RemoveAt(i); + } + + if (cachedSceneGridLayouts.Count > 0) { + GUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("Align to tilemap"); + + var tilemapNames = new GUIContent[cachedSceneGridLayouts.Count+1]; + tilemapNames[0] = new GUIContent("Select..."); + for (int i = 0; i < cachedSceneGridLayouts.Count; i++) tilemapNames[i+1] = new GUIContent(GetPath(cachedSceneGridLayouts[i].transform).Replace("/", "\u2215")); + + var originalIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + selectedTilemap = EditorGUILayout.Popup(selectedTilemap, tilemapNames); + selectedTilemap = Mathf.Clamp(selectedTilemap, 0, tilemapNames.Length - 1); + + EditorGUI.BeginDisabledGroup(selectedTilemap <= 0 || selectedTilemap - 1 >= cachedSceneGridLayouts.Count); + if (GUILayout.Button("Align To")) { + graph.AlignToTilemap(cachedSceneGridLayouts[selectedTilemap - 1]); + } + EditorGUI.EndDisabledGroup(); + EditorGUI.indentLevel = originalIndent; + + GUILayout.EndHorizontal(); + } + } + + void DrawFirstSection (GridGraph graph) { + float prevRatio = graph.aspectRatio; + + DrawInspectorMode(graph); + + Draw2DMode(graph); + DrawTilemapAlignment(graph); + + var normalizedPivotPoint = NormalizedPivotPoint(graph, pivot); + var worldPoint = graph.CalculateTransform().Transform(normalizedPivotPoint); + int newWidth, newDepth; + + DrawWidthDepthFields(graph, out newWidth, out newDepth); + + EditorGUI.BeginChangeCheck(); + float newNodeSize; + if (graph.inspectorGridMode == InspectorGridMode.Hexagonal) { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.BeginVertical(); + graph.inspectorHexagonSizeMode = (InspectorGridHexagonNodeSize)EditorGUILayout.EnumPopup(new GUIContent("Hexagon Dimension"), graph.inspectorHexagonSizeMode); + float hexagonSize = GridGraph.ConvertNodeSizeToHexagonSize(graph.inspectorHexagonSizeMode, graph.nodeSize); + hexagonSize = (float)System.Math.Round(hexagonSize, 5); + newNodeSize = GridGraph.ConvertHexagonSizeToNodeSize(graph.inspectorHexagonSizeMode, EditorGUILayout.FloatField(hexagonSizeContents[(int)graph.inspectorHexagonSizeMode], hexagonSize)); + EditorGUILayout.EndVertical(); + if (graph.inspectorHexagonSizeMode != InspectorGridHexagonNodeSize.NodeSize) GUILayout.Box("", AstarPathEditor.astarSkin.FindStyle(graph.inspectorHexagonSizeMode == InspectorGridHexagonNodeSize.Diameter ? "HexagonDiameter" : "HexagonWidth")); + EditorGUILayout.EndHorizontal(); + } else { + newNodeSize = EditorGUILayout.FloatField(new GUIContent("Node size", "The size of a single node. The size is the side of the node square in world units"), graph.nodeSize); + } + bool nodeSizeChanged = EditorGUI.EndChangeCheck(); + + newNodeSize = newNodeSize <= 0.01F ? 0.01F : newNodeSize; + + if (graph.inspectorGridMode == InspectorGridMode.IsometricGrid || graph.inspectorGridMode == InspectorGridMode.Hexagonal || graph.inspectorGridMode == InspectorGridMode.Advanced) { + graph.aspectRatio = EditorGUILayout.FloatField(new GUIContent("Aspect Ratio", "Ratio between a node's width and depth."), graph.aspectRatio); + } + + if (graph.inspectorGridMode == InspectorGridMode.IsometricGrid || graph.inspectorGridMode == InspectorGridMode.Advanced) { + DrawIsometricField(graph); + } + + if ((nodeSizeChanged && locked) || (newWidth != graph.width || newDepth != graph.depth) || prevRatio != graph.aspectRatio) { + graph.nodeSize = newNodeSize; + graph.SetDimensions(newWidth, newDepth, newNodeSize); + + normalizedPivotPoint = NormalizedPivotPoint(graph, pivot); + var newWorldPoint = graph.CalculateTransform().Transform(normalizedPivotPoint); + // Move the center so that the pivot point stays at the same point in the world + graph.center += worldPoint - newWorldPoint; + graph.center = RoundVector3(graph.center); + graph.UpdateTransform(); + } + + if ((nodeSizeChanged && !locked)) { + graph.nodeSize = newNodeSize; + graph.UpdateTransform(); + } + + DrawPositionField(graph); + + DrawRotationField(graph); + } + + void DrawRotationField (GridGraph graph) { + if (graph.is2D) { + var right = Quaternion.Euler(graph.rotation) * Vector3.right; + var angle = Mathf.Atan2(right.y, right.x) * Mathf.Rad2Deg; + if (angle < 0) angle += 360; + if (Mathf.Abs(angle - Mathf.Round(angle)) < 0.001f) angle = Mathf.Round(angle); + EditorGUI.BeginChangeCheck(); + angle = EditorGUILayout.FloatField("Rotation", angle); + if (EditorGUI.EndChangeCheck()) { + graph.rotation = RoundVector3(new Vector3(-90 + angle, 270, 90)); + } + } else { + graph.rotation = RoundVector3(EditorGUILayout.Vector3Field("Rotation", graph.rotation)); + } + } + + void DrawWidthDepthFields (GridGraph graph, out int newWidth, out int newDepth) { + lockStyle = lockStyle ?? AstarPathEditor.astarSkin.FindStyle("GridSizeLock") ?? new GUIStyle(); + + GUILayout.BeginHorizontal(); + GUILayout.BeginVertical(); + newWidth = EditorGUILayout.IntField(new GUIContent("Width (nodes)", "Width of the graph in nodes"), graph.width); + newDepth = EditorGUILayout.IntField(new GUIContent("Depth (nodes)", "Depth (or height you might also call it) of the graph in nodes"), graph.depth); + + // Clamping will be done elsewhere as well + // but this prevents negative widths from being converted to positive ones (since an absolute value will be taken) + newWidth = Mathf.Max(newWidth, 1); + newDepth = Mathf.Max(newDepth, 1); + + GUILayout.EndVertical(); + + Rect lockRect = GUILayoutUtility.GetRect(lockStyle.fixedWidth, lockStyle.fixedHeight); + + GUILayout.EndHorizontal(); + + // All the layouts mess up the margin to the next control, so add it manually + GUILayout.Space(2); + + // Add a small offset to make it better centred around the controls + lockRect.y += 3; + lockRect.width = lockStyle.fixedWidth; + lockRect.height = lockStyle.fixedHeight; + lockRect.x += lockStyle.margin.left; + lockRect.y += lockStyle.margin.top; + + locked = GUI.Toggle(lockRect, locked, + new GUIContent("", "If the width and depth values are locked, " + + "changing the node size will scale the grid while keeping the number of nodes consistent " + + "instead of keeping the size the same and changing the number of nodes in the graph"), lockStyle); + } + + void DrawIsometricField (GridGraph graph) { + var isometricGUIContent = new GUIContent("Isometric Angle", "For an isometric 2D game, you can use this parameter to scale the graph correctly.\nIt can also be used to create a hexagonal grid.\nYou may want to rotate the graph 45 degrees around the Y axis to make it line up better."); + var isometricOptions = new [] { new GUIContent("None (0°)"), new GUIContent("Isometric (≈54.74°)"), new GUIContent("Dimetric (60°)"), new GUIContent("Custom") }; + var isometricValues = new [] { 0f, GridGraph.StandardIsometricAngle, GridGraph.StandardDimetricAngle }; + var isometricOption = isometricValues.Length; + + for (int i = 0; i < isometricValues.Length; i++) { + if (Mathf.Approximately(graph.isometricAngle, isometricValues[i])) { + isometricOption = i; + } + } + + var prevIsometricOption = isometricOption; + isometricOption = EditorGUILayout.IntPopup(isometricGUIContent, isometricOption, isometricOptions, new [] { 0, 1, 2, 3 }); + if (prevIsometricOption != isometricOption) { + // Change to something that will not match the predefined values above + graph.isometricAngle = 45; + } + + if (isometricOption < isometricValues.Length) { + graph.isometricAngle = isometricValues[isometricOption]; + } else { + EditorGUI.indentLevel++; + // Custom + graph.isometricAngle = EditorGUILayout.FloatField(isometricGUIContent, graph.isometricAngle); + EditorGUI.indentLevel--; + } + } + + static Vector3 NormalizedPivotPoint (GridGraph graph, GridPivot pivot) { + switch (pivot) { + case GridPivot.Center: + default: + return new Vector3(graph.width/2f, 0, graph.depth/2f); + case GridPivot.TopLeft: + return new Vector3(0, 0, graph.depth); + case GridPivot.TopRight: + return new Vector3(graph.width, 0, graph.depth); + case GridPivot.BottomLeft: + return new Vector3(0, 0, 0); + case GridPivot.BottomRight: + return new Vector3(graph.width, 0, 0); + } + } + + void DrawPositionField (GridGraph graph) { + GUILayout.BeginHorizontal(); + var normalizedPivotPoint = NormalizedPivotPoint(graph, pivot); + var worldPoint = RoundVector3(graph.CalculateTransform().Transform(normalizedPivotPoint)); + var newWorldPoint = EditorGUILayout.Vector3Field(ObjectNames.NicifyVariableName(pivot.ToString()), worldPoint); + var delta = newWorldPoint - worldPoint; + if (delta.magnitude > 0.001f) { + graph.center += delta; + } + + pivot = PivotPointSelector(pivot); + GUILayout.EndHorizontal(); + } + + protected virtual void DrawMiddleSection (GridGraph graph) { + DrawNeighbours(graph); + DrawMaxClimb(graph); + DrawMaxSlope(graph); + DrawErosion(graph); + } + + protected virtual void DrawCutCorners (GridGraph graph) { + if (graph.inspectorGridMode == InspectorGridMode.Hexagonal) return; + + graph.cutCorners = EditorGUILayout.Toggle(new GUIContent("Cut Corners", "Enables or disables cutting corners. See docs for image example"), graph.cutCorners); + } + + protected virtual void DrawNeighbours (GridGraph graph) { + if (graph.inspectorGridMode == InspectorGridMode.Hexagonal) return; + + var neighboursGUIContent = new GUIContent("Connections", "Sets how many connections a node should have to it's neighbour nodes."); + GUIContent[] neighbourOptions; + if (graph.inspectorGridMode == InspectorGridMode.Advanced) { + neighbourOptions = new [] { new GUIContent("Four"), new GUIContent("Eight"), new GUIContent("Six") }; + } else { + neighbourOptions = new [] { new GUIContent("Four"), new GUIContent("Eight") }; + } + graph.neighbours = (NumNeighbours)EditorGUILayout.Popup(neighboursGUIContent, (int)graph.neighbours, neighbourOptions); + + EditorGUI.indentLevel++; + + if (graph.neighbours == NumNeighbours.Eight) { + DrawCutCorners(graph); + } + + if (graph.neighbours == NumNeighbours.Six) { + graph.uniformEdgeCosts = EditorGUILayout.Toggle(new GUIContent("Hexagon connection costs", "Tweak the edge costs in the graph to be more suitable for hexagon graphs"), graph.uniformEdgeCosts); + EditorGUILayout.HelpBox("You can set all settings to make this a hexagonal graph by changing the 'Shape' field above", MessageType.None); + } else { + graph.uniformEdgeCosts = false; + } + + EditorGUI.indentLevel--; + } + + protected virtual void DrawMaxClimb (GridGraph graph) { + if (!graph.collision.use2D) { + graph.maxStepHeight = EditorGUILayout.FloatField(new GUIContent("Max Step Height", "How high a step can be while still allowing the AI to go up/down it. A zero (0) indicates infinity. This affects for example how the graph is generated around ledges and stairs."), graph.maxStepHeight); + if (graph.maxStepHeight < 0) graph.maxStepHeight = 0; + if (graph.maxStepHeight > 0) { + EditorGUI.indentLevel++; + graph.maxStepUsesSlope = EditorGUILayout.Toggle(new GUIContent("Account for slopes", "Account for slopes when calculating the step sizes. See documentation for more info."), graph.maxStepUsesSlope); + EditorGUI.indentLevel--; + } + } + } + + protected void DrawMaxSlope (GridGraph graph) { + if (!graph.collision.use2D) { + graph.maxSlope = EditorGUILayout.Slider(new GUIContent("Max Slope", "Sets the max slope in degrees for a point to be walkable. Only enabled if Height Testing is enabled."), graph.maxSlope, 0, 90F); + } + } + + protected void DrawErosion (GridGraph graph) { + graph.erodeIterations = EditorGUILayout.IntField(new GUIContent("Erosion iterations", "Sets how many times the graph should be eroded. This adds extra margin to objects."), graph.erodeIterations); + graph.erodeIterations = graph.erodeIterations < 0 ? 0 : (graph.erodeIterations > 16 ? 16 : graph.erodeIterations); //Clamp iterations to [0,16] + + if (graph.erodeIterations > 0) { + EditorGUI.indentLevel++; + graph.erosionUseTags = EditorGUILayout.Toggle(new GUIContent("Erosion Uses Tags", "Instead of making nodes unwalkable, " + + "nodes will have their tag set to a value corresponding to their erosion level, " + + "which is a quite good measurement of their distance to the closest wall.\nSee online documentation for more info."), + graph.erosionUseTags); + if (graph.erosionUseTags) { + EditorGUI.indentLevel++; + graph.erosionFirstTag = EditorGUILayoutHelper.TagField(new GUIContent("First Tag"), graph.erosionFirstTag, AstarPathEditor.EditTags); + var tagNames = AstarPath.FindTagNames().Clone() as string[]; + var tagMsg = ""; + for (int i = graph.erosionFirstTag; i < graph.erosionFirstTag + graph.erodeIterations; i++) { + tagMsg += (i > graph.erosionFirstTag ? (i == graph.erosionFirstTag + graph.erodeIterations - 1 ? " or " : ", ") : "") + tagNames[i]; + } + EditorGUILayout.HelpBox("Tag " + tagMsg + " will be applied to nodes" + (graph.erodeIterations > 1 ? ", based on their distance to obstacles" : " when adjacent to obstacles"), MessageType.None); + for (int i = graph.erosionFirstTag; i < graph.erosionFirstTag + graph.erodeIterations; i++) tagNames[i] += " (used for erosion)"; + graph.erosionTagsPrecedenceMask = EditorGUILayout.MaskField( + new GUIContent("Overwritable tags", "Nodes near unwalkable nodes will be marked with tags. " + + "If these nodes already have tags, you may want the custom tag to take precedence. This mask controls which tags are allowed to be replaced by the new erosion tags."), + graph.erosionTagsPrecedenceMask, + tagNames + ); + if ((graph.erosionTagsPrecedenceMask & 0x1) == 0) { + EditorGUILayout.HelpBox("The " + tagNames[0] + " tag has been excluded. Since this is the default tag, erosion tags will likely be applied to very few, if any, nodes. This is likely not what you want", MessageType.Warning); + } + EditorGUI.indentLevel--; + } + EditorGUI.indentLevel--; + } + } + + void DrawLastSection (GridGraph graph) { + GUILayout.BeginHorizontal(); + GUILayout.Space(18); + graph.showMeshSurface = GUILayout.Toggle(graph.showMeshSurface, new GUIContent("Show surface", "Toggles gizmos for drawing the surface of the mesh"), EditorStyles.miniButtonLeft); + graph.showMeshOutline = GUILayout.Toggle(graph.showMeshOutline, new GUIContent("Show outline", "Toggles gizmos for drawing an outline of the nodes"), EditorStyles.miniButtonMid); + graph.showNodeConnections = GUILayout.Toggle(graph.showNodeConnections, new GUIContent("Show connections", "Toggles gizmos for drawing node connections"), EditorStyles.miniButtonRight); + GUILayout.EndHorizontal(); + } + + /// <summary>Draws the inspector for a <see cref="GraphCollision"/> class</summary> + protected virtual void DrawCollisionEditor (GraphCollision collision) { + collision = collision ?? new GraphCollision(); + + DrawUse2DPhysics(collision); + + collision.collisionCheck = ToggleGroup("Collision testing", collision.collisionCheck); + if (collision.collisionCheck) { + EditorGUI.indentLevel++; + string[] colliderOptions = collision.use2D ? new [] { "Circle", "Point" } : new [] { "Sphere", "Capsule", "Ray" }; + int[] colliderValues = collision.use2D ? new [] { 0, 2 } : new [] { 0, 1, 2 }; + // In 2D the Circle (Sphere) mode will replace both the Sphere and the Capsule modes + // However make sure that the original value is still stored in the grid graph in case the user changes back to the 3D mode in the inspector. + var tp = collision.type; + if (tp == ColliderType.Capsule && collision.use2D) tp = ColliderType.Sphere; + EditorGUI.BeginChangeCheck(); + tp = (ColliderType)EditorGUILayout.IntPopup("Collider type", (int)tp, colliderOptions, colliderValues); + if (EditorGUI.EndChangeCheck()) collision.type = tp; + + // Only spheres and capsules have a diameter + if (collision.type == ColliderType.Capsule || collision.type == ColliderType.Sphere) { + collision.diameter = EditorGUILayout.FloatField(new GUIContent("Diameter", "Diameter of the capsule or sphere. 1 equals one node width"), collision.diameter); + collision.diameter = Mathf.Max(collision.diameter, 0.01f); + } + + if (!collision.use2D) { + if (collision.type == ColliderType.Capsule || collision.type == ColliderType.Ray) { + collision.height = EditorGUILayout.FloatField(new GUIContent("Height/Length", "Height of cylinder or length of ray in world units"), collision.height); + collision.height = Mathf.Max(collision.height, 0.01f); + } + + collision.collisionOffset = EditorGUILayout.FloatField(new GUIContent("Offset", "Offset upwards from the node. Can be used so that obstacles can be used as ground and at the same time as obstacles for lower positioned nodes"), collision.collisionOffset); + } + + collision.mask = EditorGUILayoutx.LayerMaskField("Obstacle Layer Mask", collision.mask); + + DrawCollisionPreview(collision); + EditorGUI.indentLevel--; + } + + GUILayout.Space(2); + + if (collision.use2D) { + EditorGUI.BeginDisabledGroup(collision.use2D); + ToggleGroup("Height testing", false); + EditorGUI.EndDisabledGroup(); + } else { + collision.heightCheck = ToggleGroup("Height testing", collision.heightCheck); + if (collision.heightCheck) { + EditorGUI.indentLevel++; + collision.fromHeight = EditorGUILayout.FloatField(new GUIContent("Ray length", "The height from which to check for ground"), collision.fromHeight); + + collision.heightMask = EditorGUILayoutx.LayerMaskField("Mask", collision.heightMask); + + collision.thickRaycast = EditorGUILayout.Toggle(new GUIContent("Thick Raycast", "Use a thick line instead of a thin line"), collision.thickRaycast); + + if (collision.thickRaycast) { + EditorGUI.indentLevel++; + collision.thickRaycastDiameter = EditorGUILayout.FloatField(new GUIContent("Diameter", "Diameter of the thick raycast"), collision.thickRaycastDiameter); + EditorGUI.indentLevel--; + } + + collision.unwalkableWhenNoGround = EditorGUILayout.Toggle(new GUIContent("Unwalkable when no ground", "Make nodes unwalkable when no ground was found with the height raycast. If height raycast is turned off, this doesn't affect anything"), collision.unwalkableWhenNoGround); + EditorGUI.indentLevel--; + } + } + } + + Vector3[] arcBuffer = new Vector3[21]; + Vector3[] lineBuffer = new Vector3[2]; + void DrawArc (Vector2 center, float radius, float startAngle, float endAngle) { + // The AA line doesn't always properly close the gap even for full circles + endAngle += 1*Mathf.Deg2Rad; + var width = 4; + // The DrawAAPolyLine method does not draw a centered line unfortunately + //radius -= width/2; + for (int i = 0; i < arcBuffer.Length; i++) { + float t = i * 1.0f / (arcBuffer.Length-1); + float angle = Mathf.Lerp(startAngle, endAngle, t); + arcBuffer[i] = new Vector3(center.x + radius * Mathf.Cos(angle), center.y + radius * Mathf.Sin(angle), 0); + } + Handles.DrawAAPolyLine(EditorResourceHelper.HandlesAALineTexture, width, arcBuffer); + } + + void DrawLine (Vector2 a, Vector2 b) { + lineBuffer[0] = a; + lineBuffer[1] = b; + Handles.DrawAAPolyLine(EditorResourceHelper.HandlesAALineTexture, 4, lineBuffer); + } + + void DrawDashedLine (Vector2 a, Vector2 b, float dashLength) { + if (dashLength == 0) { + DrawLine(a, b); + } else { + var dist = (b - a).magnitude; + int steps = Mathf.RoundToInt(dist / dashLength); + for (int i = 0; i < steps; i++) { + var t1 = i * 1.0f / (steps-1); + var t2 = (i + 0.5f) * 1.0f / (steps-1); + DrawLine(Vector2.Lerp(a, b, t1), Vector2.Lerp(a, b, t2)); + } + } + } + + static int RoundUpToNextOddNumber (float x) { + return Mathf.CeilToInt((x - 1)/2.0f)*2 + 1; + } + + float interpolatedGridWidthInNodes = -1; + float lastTime = 0; + + void DrawCollisionPreview (GraphCollision collision) { + EditorGUILayout.BeginHorizontal(); + GUILayout.Space(2); + collisionPreviewOpen = EditorGUILayout.Foldout(collisionPreviewOpen, "Preview"); + EditorGUILayout.EndHorizontal(); + if (!collisionPreviewOpen) return; + + EditorGUILayout.Separator(); + var rect = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(10, 100)); + var m = Handles.matrix; + Handles.matrix = Handles.matrix * Matrix4x4.Translate(new Vector3(rect.xMin, rect.yMin)); + + // Draw NxN grid with circle in the middle + // Draw Flat plane with capsule/sphere/line above + + Handles.color = Color.white; + int gridWidthInNodes = collision.type == ColliderType.Ray ? 3 : Mathf.Max(3, RoundUpToNextOddNumber(collision.diameter + 0.5f)); + if (interpolatedGridWidthInNodes == -1) interpolatedGridWidthInNodes = gridWidthInNodes; + if (Mathf.Abs(interpolatedGridWidthInNodes - gridWidthInNodes) < 0.01f) interpolatedGridWidthInNodes = gridWidthInNodes; + else editor.Repaint(); + + var dt = Time.realtimeSinceStartup - lastTime; + lastTime = Time.realtimeSinceStartup; + interpolatedGridWidthInNodes = Mathf.Lerp(interpolatedGridWidthInNodes, gridWidthInNodes, 5 * dt); + + var gridCenter = collision.use2D ? new Vector2(rect.width / 2.0f, rect.height * 0.5f) : new Vector2(rect.width / 3.0f, rect.height * 0.5f); + var gridWidth = Mathf.Min(rect.width / 3, rect.height); + var nodeSize = (this.target as GridGraph).nodeSize; + var scale = gridWidth / (nodeSize * interpolatedGridWidthInNodes); + var diameter = collision.type == ColliderType.Ray ? 0.05f : collision.diameter * nodeSize; + var interpolatedGridScale = gridWidthInNodes * nodeSize * scale; + for (int i = 0; i <= gridWidthInNodes; i++) { + var c = i*1.0f/gridWidthInNodes; + DrawLine(gridCenter + new Vector2(c - 0.5f, -0.5f) * interpolatedGridScale, gridCenter + new Vector2(c - 0.5f, 0.5f) * interpolatedGridScale); + DrawLine(gridCenter + new Vector2(-0.5f, c - 0.5f) * interpolatedGridScale, gridCenter + new Vector2(0.5f, c - 0.5f) * interpolatedGridScale); + } + + var sideBase = new Vector2(2*rect.width / 3f, rect.height); + float sideScale; + if (collision.type == ColliderType.Sphere) { + sideScale = scale; + // A high collision offset should not cause it to break + sideScale = Mathf.Min(sideScale, sideBase.y / (Mathf.Max(0, collision.collisionOffset) + diameter)); + } else { + sideScale = Mathf.Max(scale * 0.5f, Mathf.Min(scale, sideBase.y / (collision.height + collision.collisionOffset + diameter * 0.5f))); + // A high collision offset should not cause it to break + sideScale = Mathf.Min(sideScale, sideBase.y / (Mathf.Max(0, collision.collisionOffset) + diameter)); + } + + var darkGreen = new Color(9/255f, 150/255f, 23/255f); + var lightGreen = new Color(12/255f, 194/255f, 30/255f); + var green = EditorGUIUtility.isProSkin ? lightGreen : darkGreen; + + Handles.color = green; + DrawArc(gridCenter, diameter * 0.5f * scale, 0, Mathf.PI*2); + + if (!collision.use2D) { + Handles.color = Color.white; + var interpolatedGridSideScale = gridWidthInNodes * nodeSize * sideScale; + + DrawLine(sideBase + new Vector2(-interpolatedGridSideScale * 0.5f, 0), sideBase + new Vector2(interpolatedGridSideScale * 0.5f, 0)); + for (int i = 0; i <= gridWidthInNodes; i++) { + var c = i*1.0f/gridWidthInNodes; + DrawArc(sideBase + new Vector2(c - 0.5f, 0) * interpolatedGridSideScale, 2, 0, Mathf.PI*2); + } + + Handles.color = green; + + if (collision.type == ColliderType.Ray) { + var height = collision.height; + var maxHeight = sideBase.y / sideScale - (collision.collisionOffset + diameter*0.5f); + float dashLength = 0; + if (collision.height > maxHeight + 0.01f) { + height = maxHeight; + dashLength = 6; + } + + var offset = sideBase + new Vector2(0, -collision.collisionOffset) * sideScale; + DrawLine(offset + new Vector2(0, -height*0.75f) * sideScale, offset); + DrawDashedLine(offset + new Vector2(0, -height) * sideScale, offset + new Vector2(0, -height * 0.75f) * sideScale, dashLength); + DrawLine(offset, offset + new Vector2(6, -6)); + DrawLine(offset, offset + new Vector2(-6, -6)); + } else { + var height = collision.type == ColliderType.Capsule ? collision.height : 0; + // sideBase.y - (collision.collisionOffset + height + diameter * 0.5f) * scale < 0 + var maxHeight = sideBase.y / sideScale - (collision.collisionOffset + diameter*0.5f); + float dashLength = 0; + if (height > maxHeight + 0.01f) { + height = maxHeight; + dashLength = 6; + } + DrawArc(sideBase + new Vector2(0, -collision.collisionOffset * sideScale), diameter * 0.5f * sideScale, 0, Mathf.PI); + DrawArc(sideBase + new Vector2(0, -(height + collision.collisionOffset) * sideScale), diameter * 0.5f * sideScale, Mathf.PI, 2*Mathf.PI); + DrawDashedLine(sideBase + new Vector2(-diameter * 0.5f, -collision.collisionOffset) * sideScale, sideBase + new Vector2(-diameter * 0.5f, -(height + collision.collisionOffset)) * sideScale, dashLength); + DrawDashedLine(sideBase + new Vector2(diameter * 0.5f, -collision.collisionOffset) * sideScale, sideBase + new Vector2(diameter * 0.5f, -(height + collision.collisionOffset)) * sideScale, dashLength); + } + } + Handles.matrix = m; + EditorGUILayout.Separator(); + } + + protected virtual void DrawUse2DPhysics (GraphCollision collision) { + collision.use2D = EditorGUILayout.Toggle(new GUIContent("Use 2D Physics", "Use the Physics2D API for collision checking"), collision.use2D); + + if (collision.use2D) { + var graph = target as GridGraph; + if (Mathf.Abs(Vector3.Dot(Vector3.forward, Quaternion.Euler(graph.rotation) * Vector3.up)) < 0.9f) { + EditorGUILayout.HelpBox("When using 2D physics it is recommended to rotate the graph so that it aligns with the 2D plane.", MessageType.Warning); + } + } + } + + static Dictionary<System.Type, System.Type> ruleEditors; + static Dictionary<System.Type, string> ruleHeaders; + static List<System.Type> ruleTypes; + Dictionary<GridGraphRule, IGridGraphRuleEditor> ruleEditorInstances = new Dictionary<GridGraphRule, IGridGraphRuleEditor>(); + + static void FindRuleEditors () { + ruleEditors = new Dictionary<System.Type, System.Type>(); + ruleHeaders = new Dictionary<System.Type, string>(); + ruleTypes = new List<System.Type>(); + foreach (var type in TypeCache.GetTypesWithAttribute<CustomGridGraphRuleEditorAttribute>()) { + var attrs = type.GetCustomAttributes(typeof(CustomGridGraphRuleEditorAttribute), false); + foreach (CustomGridGraphRuleEditorAttribute attr in attrs) { + ruleEditors[attr.type] = type; + ruleHeaders[attr.type] = attr.name; + } + } + + foreach (var type in TypeCache.GetTypesDerivedFrom<GridGraphRule>()) { + if (!type.IsAbstract) ruleTypes.Add(type); + } + } + + IGridGraphRuleEditor GetEditor (GridGraphRule rule) { + if (ruleEditors == null) FindRuleEditors(); + IGridGraphRuleEditor ruleEditor; + if (!ruleEditorInstances.TryGetValue(rule, out ruleEditor)) { + if (ruleEditors.ContainsKey(rule.GetType())) { + ruleEditor = ruleEditorInstances[rule] = (IGridGraphRuleEditor)System.Activator.CreateInstance(ruleEditors[rule.GetType()]); + } + } + return ruleEditor; + } + + protected virtual void DrawRules (GridGraph graph) { + var rules = graph.rules.GetRules(); + + for (int i = 0; i < rules.Count; i++) { + var rule = rules[i]; + if (rule != null) { + var ruleEditor = GetEditor(rule); + var ruleType = rule.GetType(); + GUILayout.BeginHorizontal(); + rule.enabled = ToggleGroup(ruleHeaders.TryGetValue(ruleType, out var header) ? header : ruleType.Name, rule.enabled); + if (GUILayout.Button("", AstarPathEditor.astarSkin.FindStyle("SimpleDeleteButton"))) { + graph.rules.RemoveRule(rule); + ruleEditorInstances.Remove(rule); + rule.enabled = false; + rule.DisposeUnmanagedData(); + } + GUILayout.EndHorizontal(); + + if (rule.enabled) { + if (ruleEditor != null) { + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + ruleEditor.OnInspectorGUI(graph, rule); + if (EditorGUI.EndChangeCheck()) rule.SetDirty(); + EditorGUI.indentLevel--; + } else { + EditorGUILayout.HelpBox("No editor found for " + rule.GetType().Name, MessageType.Error); + } + } + } + } + + EditorGUILayout.Separator(); + + GUILayout.BeginHorizontal(); + GUILayout.Space(10); + if (GUILayout.Button("Add Rule", GUILayout.Height(30))) { + if (ruleEditors == null) FindRuleEditors(); + GenericMenu menu = new GenericMenu(); + foreach (var type in ruleTypes) { + menu.AddItem(new GUIContent(ruleHeaders.TryGetValue(type, out var header) ? header : type.Name), false, ruleType => graph.rules.AddRule(System.Activator.CreateInstance((System.Type)ruleType) as GridGraphRule), type); + } + menu.ShowAsContext(); + } + GUILayout.Space(10); + GUILayout.EndHorizontal(); + } + + public static GridPivot PivotPointSelector (GridPivot pivot) { + // Find required styles + gridPivotSelectBackground = gridPivotSelectBackground ?? AstarPathEditor.astarSkin.FindStyle("GridPivotSelectBackground"); + gridPivotSelectButton = gridPivotSelectButton ?? AstarPathEditor.astarSkin.FindStyle("GridPivotSelectButton"); + + Rect r = GUILayoutUtility.GetRect(19, 19, gridPivotSelectBackground); + + // I have no idea why... but this is required for it to work well + r.y -= 14; + + r.width = 19; + r.height = 19; + + if (gridPivotSelectBackground == null) { + return pivot; + } + + if (Event.current.type == EventType.Repaint) { + gridPivotSelectBackground.Draw(r, false, false, false, false); + } + + if (GUI.Toggle(new Rect(r.x, r.y, 7, 7), pivot == GridPivot.TopLeft, "", gridPivotSelectButton)) + pivot = GridPivot.TopLeft; + + if (GUI.Toggle(new Rect(r.x+12, r.y, 7, 7), pivot == GridPivot.TopRight, "", gridPivotSelectButton)) + pivot = GridPivot.TopRight; + + if (GUI.Toggle(new Rect(r.x+12, r.y+12, 7, 7), pivot == GridPivot.BottomRight, "", gridPivotSelectButton)) + pivot = GridPivot.BottomRight; + + if (GUI.Toggle(new Rect(r.x, r.y+12, 7, 7), pivot == GridPivot.BottomLeft, "", gridPivotSelectButton)) + pivot = GridPivot.BottomLeft; + + if (GUI.Toggle(new Rect(r.x+6, r.y+6, 7, 7), pivot == GridPivot.Center, "", gridPivotSelectButton)) + pivot = GridPivot.Center; + + return pivot; + } + + static readonly Vector3[] handlePoints = new [] { new Vector3(0.0f, 0, 0.5f), new Vector3(1.0f, 0, 0.5f), new Vector3(0.5f, 0, 0.0f), new Vector3(0.5f, 0, 1.0f) }; + + public override void OnSceneGUI (NavGraph target) { + Event e = Event.current; + + var graph = target as GridGraph; + + graph.UpdateTransform(); + var currentTransform = graph.transform * Matrix4x4.Scale(new Vector3(graph.width, 1, graph.depth)); + + if (e.type == EventType.MouseDown) { + isMouseDown = true; + } else if (e.type == EventType.MouseUp) { + isMouseDown = false; + } + + if (!isMouseDown) { + savedTransform = currentTransform; + savedDimensions = new Vector2(graph.width, graph.depth); + savedNodeSize = graph.nodeSize; + } + + Handles.matrix = Matrix4x4.identity; + Handles.color = AstarColor.BoundsHandles; + Handles.CapFunction cap = Handles.CylinderHandleCap; + + var center = currentTransform.Transform(new Vector3(0.5f, 0, 0.5f)); + if (Tools.current == Tool.Scale) { + const float HandleScale = 0.1f; + + Vector3 mn = Vector3.zero; + Vector3 mx = Vector3.zero; + EditorGUI.BeginChangeCheck(); + for (int i = 0; i < handlePoints.Length; i++) { + var ps = currentTransform.Transform(handlePoints[i]); + Vector3 p = savedTransform.InverseTransform(Handles.Slider(ps, ps - center, HandleScale*HandleUtility.GetHandleSize(ps), cap, 0)); + + // Snap to increments of whole nodes + p.x = Mathf.Round(p.x * savedDimensions.x) / savedDimensions.x; + p.z = Mathf.Round(p.z * savedDimensions.y) / savedDimensions.y; + + if (i == 0) { + mn = mx = p; + } else { + mn = Vector3.Min(mn, p); + mx = Vector3.Max(mx, p); + } + } + + if (EditorGUI.EndChangeCheck()) { + graph.center = savedTransform.Transform((mn + mx) * 0.5f); + graph.unclampedSize = Vector2.Scale(new Vector2(mx.x - mn.x, mx.z - mn.z), savedDimensions) * savedNodeSize; + } + } else if (Tools.current == Tool.Move) { + EditorGUI.BeginChangeCheck(); + center = Handles.PositionHandle(graph.center, Tools.pivotRotation == PivotRotation.Global ? Quaternion.identity : Quaternion.Euler(graph.rotation)); + + if (EditorGUI.EndChangeCheck() && Tools.viewTool != ViewTool.Orbit) { + graph.center = center; + } + } else if (Tools.current == Tool.Rotate) { + EditorGUI.BeginChangeCheck(); + var rot = Handles.RotationHandle(Quaternion.Euler(graph.rotation), graph.center); + + if (EditorGUI.EndChangeCheck() && Tools.viewTool != ViewTool.Orbit) { + graph.rotation = rot.eulerAngles; + } + } + + var rules = graph.rules.GetRules(); + for (int i = 0; i < rules.Count; i++) { + var rule = rules[i]; + if (rule != null && rule.enabled) { + var ruleEditor = GetEditor(rule); + if (ruleEditor != null) { + ruleEditor.OnSceneGUI(graph, rule); + } + } + } + } + + public enum GridPivot { + Center, + TopLeft, + TopRight, + BottomLeft, + BottomRight + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GridGeneratorEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GridGeneratorEditor.cs.meta new file mode 100644 index 0000000..495f7e9 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/GridGeneratorEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 22fe5ef0fc7b34922bb13d1961c9f444 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/LayerGridGraphEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/LayerGridGraphEditor.cs new file mode 100644 index 0000000..bedf8b8 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/LayerGridGraphEditor.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using UnityEditor; +using Pathfinding.Graphs.Grid; + +namespace Pathfinding { + [CustomGraphEditor(typeof(LayerGridGraph), "Layered Grid Graph")] + public class LayerGridGraphEditor : GridGraphEditor { + protected override void DrawMiddleSection (GridGraph graph) { + var layerGridGraph = graph as LayerGridGraph; + + DrawNeighbours(graph); + + layerGridGraph.characterHeight = EditorGUILayout.DelayedFloatField("Character Height", layerGridGraph.characterHeight); + DrawMaxClimb(graph); + + DrawMaxSlope(graph); + DrawErosion(graph); + } + + protected override void DrawMaxClimb (GridGraph graph) { + var layerGridGraph = graph as LayerGridGraph; + + base.DrawMaxClimb(graph); + layerGridGraph.maxStepHeight = Mathf.Clamp(layerGridGraph.maxStepHeight, 0, layerGridGraph.characterHeight); + + if (layerGridGraph.maxStepHeight >= layerGridGraph.characterHeight) { + EditorGUILayout.HelpBox("Max step height needs to be smaller or equal to character height", MessageType.Info); + } + } + + protected override void DrawCollisionEditor (GraphCollision collision) { + base.DrawCollisionEditor(collision); + + if (collision.thickRaycast) { + EditorGUILayout.HelpBox("Note: Thick raycast cannot be used with this graph type", MessageType.Error); + } + } + + protected override void DrawUse2DPhysics (GraphCollision collision) { + // 2D physics does not make sense for a layered grid graph + collision.use2D = false; + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/LayerGridGraphEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/LayerGridGraphEditor.cs.meta new file mode 100644 index 0000000..3b03a7e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/LayerGridGraphEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 889543b216eb24cca9740e3cca767f64 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/NavMeshGeneratorEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/NavMeshGeneratorEditor.cs new file mode 100644 index 0000000..84c8f89 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/NavMeshGeneratorEditor.cs @@ -0,0 +1,49 @@ +using UnityEngine; +using UnityEditor; + +namespace Pathfinding { + [CustomGraphEditor(typeof(NavMeshGraph), "Navmesh Graph")] + public class NavMeshGraphEditor : GraphEditor { + public override void OnInspectorGUI (NavGraph target) { + var graph = target as NavMeshGraph; + + graph.sourceMesh = ObjectField("Source Mesh", graph.sourceMesh, typeof(Mesh), false, true) as Mesh; + + graph.offset = EditorGUILayout.Vector3Field("Offset", graph.offset); + + graph.rotation = EditorGUILayout.Vector3Field("Rotation", graph.rotation); + + graph.scale = EditorGUILayout.FloatField(new GUIContent("Scale", "Scale of the mesh"), graph.scale); + graph.scale = Mathf.Abs(graph.scale) < 0.01F ? (graph.scale >= 0 ? 0.01F : -0.01F) : graph.scale; + + #pragma warning disable 618 + if (graph.nearestSearchOnlyXZ) { + graph.nearestSearchOnlyXZ = EditorGUILayout.Toggle(new GUIContent("Nearest node queries in XZ space", + "Recomended for single-layered environments.\nFaster but can be inacurate esp. in multilayered contexts."), graph.nearestSearchOnlyXZ); + + EditorGUILayout.HelpBox("The global toggle for node queries in XZ space has been deprecated. Use the NNConstraint settings instead.", MessageType.Warning); + } + #pragma warning restore 618 + + graph.recalculateNormals = EditorGUILayout.Toggle(new GUIContent("Recalculate Normals", "Disable for spherical graphs or other complicated surfaces that allow the agents to e.g walk on walls or ceilings. See docs for more info."), graph.recalculateNormals); + graph.enableNavmeshCutting = EditorGUILayout.Toggle(new GUIContent("Affected by navmesh cuts", "Makes this graph affected by NavmeshCut and NavmeshAdd components. See the documentation for more info."), graph.enableNavmeshCutting); + if (graph.enableNavmeshCutting) { + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + var newValue = EditorGUILayout.FloatField(new GUIContent("Agent radius", "Navmesh cuts can optionally be expanded by the agent radius"), graph.navmeshCuttingCharacterRadius); + if (EditorGUI.EndChangeCheck()) { + graph.navmeshCuttingCharacterRadius = Mathf.Max(0, newValue); + graph.navmeshUpdateData.ReloadAllTiles(); + } + EditorGUI.indentLevel--; + } + + GUILayout.BeginHorizontal(); + GUILayout.Space(18); + graph.showMeshSurface = GUILayout.Toggle(graph.showMeshSurface, new GUIContent("Show surface", "Toggles gizmos for drawing the surface of the mesh"), EditorStyles.miniButtonLeft); + graph.showMeshOutline = GUILayout.Toggle(graph.showMeshOutline, new GUIContent("Show outline", "Toggles gizmos for drawing an outline of the nodes"), EditorStyles.miniButtonMid); + graph.showNodeConnections = GUILayout.Toggle(graph.showNodeConnections, new GUIContent("Show connections", "Toggles gizmos for drawing node connections"), EditorStyles.miniButtonRight); + GUILayout.EndHorizontal(); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/NavMeshGeneratorEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/NavMeshGeneratorEditor.cs.meta new file mode 100644 index 0000000..7e33f80 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/NavMeshGeneratorEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c4ad80e9395de47c78e55cbaae437660 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/PointGeneratorEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/PointGeneratorEditor.cs new file mode 100644 index 0000000..b573c58 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/PointGeneratorEditor.cs @@ -0,0 +1,56 @@ +using UnityEngine; +using UnityEditor; + +namespace Pathfinding { + [CustomGraphEditor(typeof(PointGraph), "Point Graph")] + public class PointGraphEditor : GraphEditor { + static readonly GUIContent[] nearestNodeDistanceModeLabels = { + new GUIContent("Node"), + new GUIContent("Connection (slower)"), + }; + + public override void OnInspectorGUI (NavGraph target) { + var graph = target as PointGraph; + + graph.root = ObjectField(new GUIContent("Root", "All childs of this object will be used as nodes, if it is not set, a tag search will be used instead (see below)"), graph.root, typeof(Transform), true, false) as Transform; + + graph.recursive = EditorGUILayout.Toggle(new GUIContent("Recursive", "Should childs of the childs in the root GameObject be searched"), graph.recursive); + graph.searchTag = EditorGUILayout.TagField(new GUIContent("Tag", "If root is not set, all objects with this tag will be used as nodes"), graph.searchTag); + + if (graph.root != null) { + EditorGUILayout.HelpBox("All childs "+(graph.recursive ? "and sub-childs " : "") +"of 'root' will be used as nodes\nSet root to null to use a tag search instead", MessageType.None); + } else { + EditorGUILayout.HelpBox("All object with the tag '"+graph.searchTag+"' will be used as nodes"+(graph.searchTag == "Untagged" ? "\nNote: the tag 'Untagged' cannot be used" : ""), MessageType.None); + } + + graph.maxDistance = EditorGUILayout.FloatField(new GUIContent("Max Distance", "The max distance in world space for a connection to be valid. A zero counts as infinity"), graph.maxDistance); + + graph.limits = EditorGUILayout.Vector3Field("Max Distance (axis aligned)", graph.limits); + + graph.raycast = EditorGUILayout.Toggle(new GUIContent("Raycast", "Use raycasting to check if connections are valid between each pair of nodes"), graph.raycast); + + if (graph.raycast) { + EditorGUI.indentLevel++; + + graph.use2DPhysics = EditorGUILayout.Toggle(new GUIContent("Use 2D Physics", "If enabled, all raycasts will use the Unity 2D Physics API instead of the 3D one."), graph.use2DPhysics); + graph.thickRaycast = EditorGUILayout.Toggle(new GUIContent("Thick Raycast", "A thick raycast checks along a thick line with radius instead of just along a line"), graph.thickRaycast); + + if (graph.thickRaycast) { + EditorGUI.indentLevel++; + graph.thickRaycastRadius = EditorGUILayout.FloatField(new GUIContent("Raycast Radius", "The radius in world units for the thick raycast"), graph.thickRaycastRadius); + EditorGUI.indentLevel--; + } + + graph.mask = EditorGUILayoutx.LayerMaskField("Mask", graph.mask); + EditorGUI.indentLevel--; + } + + graph.optimizeForSparseGraph = EditorGUILayout.Toggle(new GUIContent("Optimize For Sparse Graph", "Check online documentation for more information."), graph.optimizeForSparseGraph); + graph.nearestNodeDistanceMode = (PointGraph.NodeDistanceMode)EditorGUILayout.Popup(new GUIContent("Nearest node queries find closest"), (int)graph.nearestNodeDistanceMode, nearestNodeDistanceModeLabels); + + if (graph.nearestNodeDistanceMode == PointGraph.NodeDistanceMode.Connection && !graph.optimizeForSparseGraph) { + EditorGUILayout.HelpBox("Connection mode can only be used if Optimize For Sparse Graph is enabled", MessageType.Error); + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/PointGeneratorEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/PointGeneratorEditor.cs.meta new file mode 100644 index 0000000..cf96f37 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/PointGeneratorEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b563cffdf75ee4497b91d4ac8e106260 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/RecastGraphEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/RecastGraphEditor.cs new file mode 100644 index 0000000..52880dc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/RecastGraphEditor.cs @@ -0,0 +1,516 @@ +using UnityEngine; +using UnityEditor; +using Pathfinding.Graphs.Navmesh; +using UnityEditorInternal; + +namespace Pathfinding { + /// <summary>Editor for the RecastGraph.</summary> + [CustomGraphEditor(typeof(RecastGraph), "Recast Graph")] + public class RecastGraphEditor : GraphEditor { + public static bool tagMaskFoldout; + public static bool meshesUnreadableAtRuntimeFoldout; + ReorderableList tagMaskList; + ReorderableList perLayerModificationsList; + + public enum UseTiles { + UseTiles = 0, + DontUseTiles = 1 + } + + static readonly GUIContent[] DimensionModeLabels = new [] { + new GUIContent("2D"), + new GUIContent("3D"), + }; + + static Rect SliceColumn (ref Rect rect, float width, float spacing = 0) { + return GUIUtilityx.SliceColumn(ref rect, width, spacing); + } + + static void DrawIndentedList (ReorderableList list) { + GUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUI.IndentedRect(default).xMin); + list.DoLayoutList(); + GUILayout.Space(3); + GUILayout.EndHorizontal(); + } + + static void DrawColliderDetail (RecastGraph.CollectionSettings settings) { + const float LowestApproximationError = 0.5f; + settings.colliderRasterizeDetail = EditorGUILayout.Slider(new GUIContent("Round Collider Detail", "Controls the detail of the generated sphere and capsule meshes. "+ + "Higher values may increase navmesh quality slightly, and lower values improve graph scanning performance."), Mathf.Round(10*settings.colliderRasterizeDetail)*0.1f, 0, 1.0f / LowestApproximationError); + } + + void DrawCollectionSettings (RecastGraph.CollectionSettings settings, RecastGraph.DimensionMode dimensionMode) { + settings.collectionMode = (RecastGraph.CollectionSettings.FilterMode)EditorGUILayout.EnumPopup("Filter objects by", settings.collectionMode); + + if (settings.collectionMode == RecastGraph.CollectionSettings.FilterMode.Layers) { + settings.layerMask = EditorGUILayoutx.LayerMaskField("Layer Mask", settings.layerMask); + } else { + DrawIndentedList(tagMaskList); + } + + if (dimensionMode == RecastGraph.DimensionMode.Dimension3D) { + settings.rasterizeTerrain = EditorGUILayout.Toggle(new GUIContent("Rasterize Terrains", "Should a rasterized terrain be included"), settings.rasterizeTerrain); + if (settings.rasterizeTerrain) { + EditorGUI.indentLevel++; + settings.rasterizeTrees = EditorGUILayout.Toggle(new GUIContent("Rasterize Trees", "Rasterize tree colliders on terrains. " + + "If the tree prefab has a collider, that collider will be rasterized. " + + "Otherwise a simple box collider will be used and the script will " + + "try to adjust it to the tree's scale, it might not do a very good job though so " + + "an attached collider is preferable."), settings.rasterizeTrees); + settings.terrainHeightmapDownsamplingFactor = EditorGUILayout.IntField(new GUIContent("Heightmap Downsampling", "How much to downsample the terrain's heightmap. A lower value is better, but slower to scan"), settings.terrainHeightmapDownsamplingFactor); + settings.terrainHeightmapDownsamplingFactor = Mathf.Max(1, settings.terrainHeightmapDownsamplingFactor); + EditorGUI.indentLevel--; + } + + settings.rasterizeMeshes = EditorGUILayout.Toggle(new GUIContent("Rasterize Meshes", "Should meshes be rasterized and used for building the navmesh"), settings.rasterizeMeshes); + settings.rasterizeColliders = EditorGUILayout.Toggle(new GUIContent("Rasterize Colliders", "Should colliders be rasterized and used for building the navmesh"), settings.rasterizeColliders); + } else { + // Colliders are always rasterized in 2D mode + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.Toggle(new GUIContent("Rasterize Colliders", "Should colliders be rasterized and used for building the navmesh. In 2D mode, this is always enabled."), true); + EditorGUI.EndDisabledGroup(); + } + + if (settings.rasterizeMeshes && settings.rasterizeColliders && dimensionMode == RecastGraph.DimensionMode.Dimension3D) { + EditorGUILayout.HelpBox("You are rasterizing both meshes and colliders. This is likely just duplicate work if the colliders and meshes are similar in shape. You can use the RecastMeshObj component" + + " to always include some specific objects regardless of what the above settings are set to.", MessageType.Info); + } + } + + public override void OnEnable () { + base.OnEnable(); + var graph = target as RecastGraph; + tagMaskList = new ReorderableList(graph.collectionSettings.tagMask, typeof(string), true, true, true, true) { + drawElementCallback = (Rect rect, int index, bool active, bool isFocused) => { + graph.collectionSettings.tagMask[index] = EditorGUI.TagField(rect, graph.collectionSettings.tagMask[index]); + }, + drawHeaderCallback = (Rect rect) => { + GUI.Label(rect, "Tag mask"); + }, + elementHeight = EditorGUIUtility.singleLineHeight, + onAddCallback = (ReorderableList list) => { + graph.collectionSettings.tagMask.Add("Untagged"); + } + }; + + perLayerModificationsList = new ReorderableList(graph.perLayerModifications, typeof(RecastGraph.PerLayerModification), true, true, true, true) { + drawElementCallback = (Rect rect, int index, bool active, bool isFocused) => { + var element = graph.perLayerModifications[index]; + var w = rect.width; + var spacing = EditorGUIUtility.standardVerticalSpacing; + element.layer = EditorGUI.LayerField(SliceColumn(ref rect, w * 0.3f, spacing), element.layer); + + if (element.mode == RecastMeshObj.Mode.WalkableSurfaceWithTag) { + element.mode = (RecastMeshObj.Mode)EditorGUI.EnumPopup(SliceColumn(ref rect, w * 0.4f, spacing), element.mode); + element.surfaceID = Util.EditorGUILayoutHelper.TagField(rect, GUIContent.none, element.surfaceID, AstarPathEditor.EditTags); + element.surfaceID = Mathf.Clamp(element.surfaceID, 0, GraphNode.MaxTagIndex); + } else if (element.mode == RecastMeshObj.Mode.WalkableSurfaceWithSeam) { + element.mode = (RecastMeshObj.Mode)EditorGUI.EnumPopup(SliceColumn(ref rect, w * 0.4f, spacing), element.mode); + string helpTooltip = "All surfaces on this mesh will be walkable and a " + + "seam will be created between the surfaces on this mesh and the surfaces on other meshes (with a different surface id)"; + GUI.Label(SliceColumn(ref rect, 70, spacing), new GUIContent("Surface ID", helpTooltip)); + element.surfaceID = Mathf.Max(0, EditorGUI.IntField(rect, new GUIContent("", helpTooltip), element.surfaceID)); + } else { + element.mode = (RecastMeshObj.Mode)EditorGUI.EnumPopup(rect, element.mode); + } + + graph.perLayerModifications[index] = element; + }, + drawHeaderCallback = (Rect rect) => { + GUI.Label(rect, "Per Layer Modifications"); + }, + elementHeight = EditorGUIUtility.singleLineHeight, + onAddCallback = (ReorderableList list) => { + // Find the first layer that is not already modified + var availableLayers = graph.collectionSettings.layerMask; + foreach (var mod in graph.perLayerModifications) { + availableLayers &= ~(1 << mod.layer); + } + var newMod = RecastGraph.PerLayerModification.Default; + for (int i = 0; i < 32; i++) { + if ((availableLayers & (1 << i)) != 0) { + newMod.layer = i; + break; + } + } + graph.perLayerModifications.Add(newMod); + } + }; + } + + public override void OnInspectorGUI (NavGraph target) { + var graph = target as RecastGraph; + + Header("Shape"); + + graph.dimensionMode = (RecastGraph.DimensionMode)EditorGUILayout.Popup(new GUIContent("Dimensions", "Should the graph be for a 2D or 3D world?"), (int)graph.dimensionMode, DimensionModeLabels); + if (graph.dimensionMode == RecastGraph.DimensionMode.Dimension2D && Mathf.Abs(Vector3.Dot(Quaternion.Euler(graph.rotation) * Vector3.up, Vector3.forward)) < 0.99999f) { + EditorGUI.indentLevel++; + EditorGUILayout.BeginHorizontal(EditorStyles.helpBox); + GUILayout.Label(EditorGUIUtility.IconContent("console.warnicon"), GUILayout.ExpandWidth(false)); + GUILayout.BeginVertical(); + GUILayout.FlexibleSpace(); + GUILayout.BeginHorizontal(); + GUILayout.Label("Your graph is not in the XY plane"); + if (GUILayout.Button("Align")) { + graph.rotation = new Vector3(-90, 0, 0); + graph.forcedBoundsCenter = new Vector3(graph.forcedBoundsCenter.x, graph.forcedBoundsCenter.y, -graph.forcedBoundsSize.y * 0.5f); + } + GUILayout.EndHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.EndVertical(); + EditorGUILayout.EndHorizontal(); + EditorGUI.indentLevel--; + } + + // In 3D mode, we use the graph's center as the pivot point, but in 2D mode, we use the center of the base plane of the graph as the pivot point. + // This makes sense because in 2D mode, you typically want to set the base plane's center to Z=0, and you don't care much about the height of the graph. + var pivot = graph.dimensionMode == RecastGraph.DimensionMode.Dimension2D ? new Vector3(0.0f, -0.5f, 0.0f) : Vector3.zero; + var centerOffset = Quaternion.Euler(graph.rotation) * Vector3.Scale(graph.forcedBoundsSize, pivot); + var newCenter = EditorGUILayout.Vector3Field("Center", graph.forcedBoundsCenter + centerOffset); + var newSize = EditorGUILayout.Vector3Field("Size", graph.forcedBoundsSize); + + // Make sure the bounding box is not infinitely thin along any axis + newSize = Vector3.Max(newSize, Vector3.one * 0.001f); + + // Recalculate the center offset with the new size, and then adjust the center so that the pivot point stays the same if the size changes + centerOffset = Quaternion.Euler(graph.rotation) * Vector3.Scale(newSize, pivot); + graph.forcedBoundsCenter = RoundVector3(newCenter) - centerOffset; + graph.forcedBoundsSize = RoundVector3(newSize); + + graph.rotation = RoundVector3(EditorGUILayout.Vector3Field("Rotation", graph.rotation)); + + long estWidth = Mathf.RoundToInt(Mathf.Ceil(graph.forcedBoundsSize.x / graph.cellSize)); + long estDepth = Mathf.RoundToInt(Mathf.Ceil(graph.forcedBoundsSize.z / graph.cellSize)); + + EditorGUI.BeginDisabledGroup(true); + var estTilesX = (estWidth + graph.editorTileSize - 1) / graph.editorTileSize; + var estTilesZ = (estDepth + graph.editorTileSize - 1) / graph.editorTileSize; + var label = estWidth.ToString() + " x " + estDepth.ToString(); + if (graph.useTiles) { + label += " voxels, divided into " + (estTilesX*estTilesZ) + " tiles"; + } + EditorGUILayout.LabelField(new GUIContent("Size", "Based on the voxel size and the bounding box"), new GUIContent(label)); + EditorGUI.EndDisabledGroup(); + + // Show a warning if the number of voxels is too large + if (estWidth*estDepth >= 3000*3000) { + GUIStyle helpBox = GUI.skin.FindStyle("HelpBox") ?? GUI.skin.FindStyle("Box"); + + Color preColor = GUI.color; + if (estWidth*estDepth >= 8192*8192) { + GUI.color = Color.red; + } else { + GUI.color = Color.yellow; + } + + GUILayout.Label("Warning: Might take some time to calculate", helpBox); + GUI.color = preColor; + } + + if (!editor.isPrefab) { + if (GUILayout.Button(new GUIContent("Snap bounds to scene", "Will snap the bounds of the graph to exactly contain all meshes in the scene that matches the masks."))) { + graph.SnapForceBoundsToScene(); + GUI.changed = true; + } + } + + Separator(); + Header("Input Filtering"); + + DrawCollectionSettings(graph.collectionSettings, graph.dimensionMode); + + Separator(); + Header("Rasterization"); + + graph.cellSize = EditorGUILayout.FloatField(new GUIContent("Voxel Size", "Size of one voxel in world units"), graph.cellSize); + if (graph.cellSize < 0.001F) graph.cellSize = 0.001F; + + graph.useTiles = (UseTiles)EditorGUILayout.EnumPopup("Use Tiles", graph.useTiles ? UseTiles.UseTiles : UseTiles.DontUseTiles) == UseTiles.UseTiles; + + if (graph.useTiles) { + EditorGUI.indentLevel++; + graph.editorTileSize = EditorGUILayout.IntField(new GUIContent("Tile Size (voxels)", "Size in voxels of a single tile.\n" + + "This is the width of the tile.\n" + + "\n" + + "A large tile size can be faster to initially scan (but beware of out of memory issues if you try with a too large tile size in a large world)\n" + + "smaller tile sizes are (much) faster to update.\n" + + "\n" + + "Different tile sizes can affect the quality of paths. It is often good to split up huge open areas into several tiles for\n" + + "better quality paths, but too small tiles can lead to effects looking like invisible obstacles.\n\n" + + "Typical values are between 64 and 256"), graph.editorTileSize); + graph.editorTileSize = Mathf.Max(10, graph.editorTileSize); + EditorGUI.indentLevel--; + } + + if (graph.dimensionMode == RecastGraph.DimensionMode.Dimension3D) { + graph.walkableHeight = EditorGUILayout.DelayedFloatField(new GUIContent("Character Height", "Minimum distance to the roof for an area to be walkable"), graph.walkableHeight); + graph.walkableHeight = Mathf.Max(graph.walkableHeight, 0); + + graph.characterRadius = EditorGUILayout.FloatField(new GUIContent("Character Radius", "Radius of the character. It's good to add some margin.\nIn world units."), graph.characterRadius); + graph.characterRadius = Mathf.Max(graph.characterRadius, 0); + + if (graph.characterRadius < graph.cellSize * 2) { + EditorGUILayout.HelpBox("For best navmesh quality, it is recommended to keep the character radius at least 2 times as large as the voxel size. Smaller voxels will give you higher quality navmeshes, but it will take more time to scan the graph.", MessageType.Warning); + } + + graph.walkableClimb = EditorGUILayout.FloatField(new GUIContent("Max Step Height", "How high can the character step"), graph.walkableClimb); + + // A walkableClimb higher than this can cause issues when generating the navmesh since then it can in some cases + // Both be valid for a character to walk under an obstacle and climb up on top of it (and that cannot be handled with a navmesh without links) + if (graph.walkableClimb >= graph.walkableHeight) { + graph.walkableClimb = graph.walkableHeight; + EditorGUILayout.HelpBox("Max Step Height should be less than Character Height. Clamping to " + graph.walkableHeight+".", MessageType.Warning); + } else if (graph.walkableClimb < 0) { + graph.walkableClimb = 0; + } + } + + if (graph.dimensionMode == RecastGraph.DimensionMode.Dimension3D) { + graph.maxSlope = EditorGUILayout.Slider(new GUIContent("Max Slope", "Approximate maximum slope"), graph.maxSlope, 0F, 90F); + } + + graph.maxEdgeLength = EditorGUILayout.FloatField(new GUIContent("Max Border Edge Length", "Maximum length of one border edge in the completed navmesh before it is split. A lower value can often yield better quality graphs, but don't use so low values so that you get a lot of thin triangles."), graph.maxEdgeLength); + graph.maxEdgeLength = graph.maxEdgeLength < graph.cellSize ? graph.cellSize : graph.maxEdgeLength; + + // This is actually a float, but to make things easier for the user, we only allow picking integers. Small changes don't matter that much anyway. + graph.contourMaxError = EditorGUILayout.IntSlider(new GUIContent("Edge Simplification", "Simplifies the edges of the navmesh such that it is no more than this number of voxels away from the true value.\nIn voxels."), Mathf.RoundToInt(graph.contourMaxError), 0, 5); + graph.minRegionSize = EditorGUILayout.FloatField(new GUIContent("Min Region Size", "Small regions will be removed. In voxels"), graph.minRegionSize); + + if (graph.dimensionMode == RecastGraph.DimensionMode.Dimension2D) { + graph.backgroundTraversability = (RecastGraph.BackgroundTraversability)EditorGUILayout.EnumPopup("Background traversability", graph.backgroundTraversability); + } + + if (graph.collectionSettings.rasterizeColliders || (graph.dimensionMode == RecastGraph.DimensionMode.Dimension3D && graph.collectionSettings.rasterizeTerrain && graph.collectionSettings.rasterizeTrees)) { + DrawColliderDetail(graph.collectionSettings); + } + + DrawIndentedList(perLayerModificationsList); + + int seenLayers = 0; + for (int i = 0; i < graph.perLayerModifications.Count; i++) { + if ((seenLayers & 1 << graph.perLayerModifications[i].layer) != 0) { + EditorGUILayout.HelpBox("Duplicate layers. Each layer can only be modified by a single rule.", MessageType.Error); + break; + } + seenLayers |= 1 << graph.perLayerModifications[i].layer; + } + + var countStillUnreadable = 0; + for (int i = 0; graph.meshesUnreadableAtRuntime != null && i < graph.meshesUnreadableAtRuntime.Count; i++) { + countStillUnreadable += graph.meshesUnreadableAtRuntime[i].Item2.isReadable ? 0 : 1; + } + if (countStillUnreadable > 0) { + GUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUI.IndentedRect(new Rect(0, 0, 0, 0)).xMin); + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.BeginHorizontal(); + GUILayout.BeginVertical(); + GUILayout.FlexibleSpace(); + meshesUnreadableAtRuntimeFoldout = GUILayout.Toggle(meshesUnreadableAtRuntimeFoldout, "", EditorStyles.foldout, GUILayout.Width(10)); + GUILayout.FlexibleSpace(); + GUILayout.EndVertical(); + + GUILayout.Label(EditorGUIUtility.IconContent("console.warnicon"), GUILayout.ExpandWidth(false)); + GUILayout.Label(graph.meshesUnreadableAtRuntime.Count + " " + (graph.meshesUnreadableAtRuntime.Count > 1 ? "meshes" : "mesh") + " will be ignored if scanned in a standalone build, because they are marked as not readable." + + "If you plan to scan the graph in a standalone build, all included meshes must be marked as read/write in their import settings.", EditorStyles.wordWrappedMiniLabel); + // EditorGUI.DrawTextureTransparent() EditorGUIUtility.IconContent("console.warnicon") + GUILayout.EndHorizontal(); + + if (meshesUnreadableAtRuntimeFoldout) { + EditorGUILayout.Separator(); + for (int i = 0; i < graph.meshesUnreadableAtRuntime.Count; i++) { + var(source, mesh) = graph.meshesUnreadableAtRuntime[i]; + if (!mesh.isReadable) { + GUILayout.BeginHorizontal(); + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.ObjectField(source, typeof(Mesh), true); + EditorGUILayout.ObjectField(mesh, typeof(Mesh), false); + EditorGUI.EndDisabledGroup(); + if (GUILayout.Button("Make readable")) { + var importer = ModelImporter.GetAtPath(AssetDatabase.GetAssetPath(mesh)) as ModelImporter; + if (importer != null) { + importer.isReadable = true; + importer.SaveAndReimport(); + } + } + GUILayout.EndHorizontal(); + } + } + } + EditorGUILayout.EndVertical(); + GUILayout.EndHorizontal(); + } + + Separator(); + Header("Runtime Settings"); + + graph.enableNavmeshCutting = EditorGUILayout.Toggle(new GUIContent("Affected by Navmesh Cuts", "Makes this graph affected by NavmeshCut and NavmeshAdd components. See the documentation for more info."), graph.enableNavmeshCutting); + + Separator(); + Header("Debug"); + GUILayout.BeginHorizontal(); + GUILayout.Space(18); + graph.showMeshSurface = GUILayout.Toggle(graph.showMeshSurface, new GUIContent("Show surface", "Toggles gizmos for drawing the surface of the mesh"), EditorStyles.miniButtonLeft); + graph.showMeshOutline = GUILayout.Toggle(graph.showMeshOutline, new GUIContent("Show outline", "Toggles gizmos for drawing an outline of the nodes"), EditorStyles.miniButtonMid); + graph.showNodeConnections = GUILayout.Toggle(graph.showNodeConnections, new GUIContent("Show connections", "Toggles gizmos for drawing node connections"), EditorStyles.miniButtonRight); + GUILayout.EndHorizontal(); + + + Separator(); + Header("Advanced"); + + graph.relevantGraphSurfaceMode = (RecastGraph.RelevantGraphSurfaceMode)EditorGUILayout.EnumPopup(new GUIContent("Relevant Graph Surface Mode", + "Require every region to have a RelevantGraphSurface component inside it.\n" + + "A RelevantGraphSurface component placed in the scene specifies that\n" + + "the navmesh region it is inside should be included in the navmesh.\n\n" + + "If this is set to OnlyForCompletelyInsideTile\n" + + "a navmesh region is included in the navmesh if it\n" + + "has a RelevantGraphSurface inside it, or if it\n" + + "is adjacent to a tile border. This can leave some small regions\n" + + "which you didn't want to have included because they are adjacent\n" + + "to tile borders, but it removes the need to place a component\n" + + "in every single tile, which can be tedious (see below).\n\n" + + "If this is set to RequireForAll\n" + + "a navmesh region is included only if it has a RelevantGraphSurface\n" + + "inside it. Note that even though the navmesh\n" + + "looks continous between tiles, the tiles are computed individually\n" + + "and therefore you need a RelevantGraphSurface component for each\n" + + "region and for each tile."), + graph.relevantGraphSurfaceMode); + + #pragma warning disable 618 + if (graph.nearestSearchOnlyXZ) { + graph.nearestSearchOnlyXZ = EditorGUILayout.Toggle(new GUIContent("Nearest node queries in XZ space", + "Recomended for single-layered environments.\nFaster but can be inacurate esp. in multilayered contexts."), graph.nearestSearchOnlyXZ); + + EditorGUILayout.HelpBox("The global toggle for node queries in XZ space has been deprecated. Use the NNConstraint settings instead.", MessageType.Warning); + } + #pragma warning restore 618 + + if (GUILayout.Button("Export to .obj file")) { + editor.RunTask(() => ExportToFile(graph)); + } + } + + static readonly Vector3[] handlePoints = new [] { new Vector3(-1, 0, 0), new Vector3(1, 0, 0), new Vector3(0, 0, -1), new Vector3(0, 0, 1), new Vector3(0, 1, 0), new Vector3(0, -1, 0) }; + + public override void OnSceneGUI (NavGraph target) { + var graph = target as RecastGraph; + + Handles.matrix = Matrix4x4.identity; + Handles.color = AstarColor.BoundsHandles; + Handles.CapFunction cap = Handles.CylinderHandleCap; + + var center = graph.forcedBoundsCenter; + Matrix4x4 matrix = Matrix4x4.TRS(center, Quaternion.Euler(graph.rotation), graph.forcedBoundsSize * 0.5f); + + if (Tools.current == Tool.Scale) { + const float HandleScale = 0.1f; + + Vector3 mn = Vector3.zero; + Vector3 mx = Vector3.zero; + EditorGUI.BeginChangeCheck(); + for (int i = 0; i < handlePoints.Length; i++) { + var ps = matrix.MultiplyPoint3x4(handlePoints[i]); + Vector3 p = matrix.inverse.MultiplyPoint3x4(Handles.Slider(ps, ps - center, HandleScale*HandleUtility.GetHandleSize(ps), cap, 0)); + + if (i == 0) { + mn = mx = p; + } else { + mn = Vector3.Min(mn, p); + mx = Vector3.Max(mx, p); + } + } + + if (EditorGUI.EndChangeCheck()) { + graph.forcedBoundsCenter = matrix.MultiplyPoint3x4((mn + mx) * 0.5f); + graph.forcedBoundsSize = Vector3.Scale(graph.forcedBoundsSize, (mx - mn) * 0.5f); + } + } else if (Tools.current == Tool.Move) { + EditorGUI.BeginChangeCheck(); + center = Handles.PositionHandle(center, Tools.pivotRotation == PivotRotation.Global ? Quaternion.identity : Quaternion.Euler(graph.rotation)); + + if (EditorGUI.EndChangeCheck() && Tools.viewTool != ViewTool.Orbit) { + graph.forcedBoundsCenter = center; + } + } else if (Tools.current == Tool.Rotate) { + EditorGUI.BeginChangeCheck(); + var rot = Handles.RotationHandle(Quaternion.Euler(graph.rotation), graph.forcedBoundsCenter); + + if (EditorGUI.EndChangeCheck() && Tools.viewTool != ViewTool.Orbit) { + graph.rotation = rot.eulerAngles; + } + } + } + + /// <summary>Exports the INavmesh graph to a .obj file</summary> + public static void ExportToFile (NavmeshBase target) { + if (target == null) return; + + NavmeshTile[] tiles = target.GetTiles(); + + if (tiles == null) { + if (EditorUtility.DisplayDialog("Scan graph before exporting?", "The graph does not contain any mesh data. Do you want to scan it?", "Ok", "Cancel")) { + AstarPathEditor.MenuScan(); + tiles = target.GetTiles(); + if (tiles == null) return; + } else { + return; + } + } + + string path = EditorUtility.SaveFilePanel("Export .obj", "", "navmesh.obj", "obj"); + if (path == "") return; + + //Generate .obj + var sb = new System.Text.StringBuilder(); + + string name = System.IO.Path.GetFileNameWithoutExtension(path); + + sb.Append("g ").Append(name).AppendLine(); + + //Vertices start from 1 + int vCount = 1; + + //Define single texture coordinate to zero + sb.Append("vt 0 0\n"); + + for (int t = 0; t < tiles.Length; t++) { + NavmeshTile tile = tiles[t]; + + if (tile == null) continue; + + var vertices = tile.verts; + + //Write vertices + for (int i = 0; i < vertices.Length; i++) { + var v = (Vector3)vertices[i]; + sb.Append(string.Format("v {0} {1} {2}\n", -v.x, v.y, v.z)); + } + + //Write triangles + TriangleMeshNode[] nodes = tile.nodes; + for (int i = 0; i < nodes.Length; i++) { + TriangleMeshNode node = nodes[i]; + if (node == null) { + Debug.LogError("Node was null or no TriangleMeshNode. Critical error. Graph type " + target.GetType().Name); + return; + } + if (node.GetVertexArrayIndex(0) < 0 || node.GetVertexArrayIndex(0) >= vertices.Length) throw new System.Exception("ERR"); + + sb.Append(string.Format("f {0}/1 {1}/1 {2}/1\n", (node.GetVertexArrayIndex(0) + vCount), (node.GetVertexArrayIndex(1) + vCount), (node.GetVertexArrayIndex(2) + vCount))); + } + + vCount += vertices.Length; + } + + string obj = sb.ToString(); + + using (var sw = new System.IO.StreamWriter(path)) { + sw.Write(obj); + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/RecastGraphEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/RecastGraphEditor.cs.meta new file mode 100644 index 0000000..ed531b4 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphEditors/RecastGraphEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1e335b837bf0e437f865b313cd5ac11c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphMaskDrawer.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphMaskDrawer.cs new file mode 100644 index 0000000..06f9560 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphMaskDrawer.cs @@ -0,0 +1,30 @@ +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + [CustomPropertyDrawer(typeof(GraphMask))] + public class GraphMaskDrawer : PropertyDrawer { + string[] graphLabels = new string[32]; + + public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) { + // Make sure the AstarPath object is initialized and the graphs are loaded, this is required to be able to show graph names in the mask popup + AstarPath.FindAstarPath(); + + for (int i = 0; i < graphLabels.Length; i++) { + if (AstarPath.active == null || AstarPath.active.data.graphs == null || i >= AstarPath.active.data.graphs.Length || AstarPath.active.data.graphs[i] == null) graphLabels[i] = "Graph " + i + (i == 31 ? "+" : ""); + else { + graphLabels[i] = AstarPath.active.data.graphs[i].name + " (graph " + i + ")"; + } + } + + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = property.hasMultipleDifferentValues; + var valueProp = property.FindPropertyRelative("value"); + int newVal = EditorGUI.MaskField(position, label, valueProp.intValue, graphLabels); + if (EditorGUI.EndChangeCheck()) { + valueProp.intValue = newVal; + } + EditorGUI.showMixedValue = false; + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphMaskDrawer.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphMaskDrawer.cs.meta new file mode 100644 index 0000000..d01be4c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphMaskDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fcb22d8838af78c3b8b72d6cfbaa7f9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphUpdateSceneEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphUpdateSceneEditor.cs new file mode 100644 index 0000000..ede0617 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphUpdateSceneEditor.cs @@ -0,0 +1,347 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace Pathfinding { + /// <summary>Editor for GraphUpdateScene</summary> + [CustomEditor(typeof(GraphUpdateScene))] + [CanEditMultipleObjects] + public class GraphUpdateSceneEditor : EditorBase { + int selectedPoint = -1; + + const float pointGizmosRadius = 0.09F; + static Color PointColor = new Color(1, 0.36F, 0, 0.6F); + static Color PointSelectedColor = new Color(1, 0.24F, 0, 1.0F); + + GraphUpdateScene[] scripts; + + protected override void Inspector () { + // Find all properties + var points = FindProperty("points"); + var legacyMode = FindProperty("legacyMode"); + + // Get a list of inspected components + scripts = new GraphUpdateScene[targets.Length]; + targets.CopyTo(scripts, 0); + + EditorGUI.BeginChangeCheck(); + + // Make sure no point arrays are null + for (int i = 0; i < scripts.Length; i++) { + scripts[i].points = scripts[i].points ?? new Vector3[0]; + } + + if (!points.hasMultipleDifferentValues && points.arraySize == 0) { + if (scripts[0].GetComponent<PolygonCollider2D>() != null) { + EditorGUILayout.HelpBox("Using polygon collider shape", MessageType.Info); + } else if (scripts[0].GetComponent<Collider>() != null || scripts[0].GetComponent<Collider2D>() != null) { + EditorGUILayout.HelpBox("No points, using collider.bounds", MessageType.Info); + } else if (scripts[0].GetComponent<Renderer>() != null) { + EditorGUILayout.HelpBox("No points, using renderer.bounds", MessageType.Info); + } else { + EditorGUILayout.HelpBox("No points and no collider or renderer attached, will not affect anything\nPoints can be added using the transform tool and holding shift", MessageType.Warning); + } + } + + DrawPointsField(); + + EditorGUI.indentLevel = 0; + + DrawPhysicsField(); + + PropertyField("updateErosion", null, "Recalculate erosion for grid graphs.\nSee online documentation for more info"); + + DrawConvexField(); + + // Minimum bounds height is not applied when using the bounds from a collider or renderer + if (points.hasMultipleDifferentValues || points.arraySize > 0) { + FloatField("minBoundsHeight", min: 0.1f); + } + PropertyField("applyOnStart"); + PropertyField("applyOnScan"); + + DrawWalkableField(); + DrawPenaltyField(); + DrawTagField(); + + EditorGUILayout.Separator(); + + if (legacyMode.hasMultipleDifferentValues || legacyMode.boolValue) { + EditorGUILayout.HelpBox("Legacy mode is enabled because you have upgraded from an earlier version of the A* Pathfinding Project. " + + "Disabling legacy mode is recommended but you may have to tweak the point locations or object rotation in some cases", MessageType.Warning); + if (GUILayout.Button("Disable Legacy Mode")) { + for (int i = 0; i < scripts.Length; i++) { + Undo.RecordObject(scripts[i], "Disable Legacy Mode"); + scripts[i].DisableLegacyMode(); + } + } + } + + if (scripts.Length == 1 && scripts[0].points.Length >= 3) { + var size = scripts[0].GetBounds().size; + if (Mathf.Min(Mathf.Min(Mathf.Abs(size.x), Mathf.Abs(size.y)), Mathf.Abs(size.z)) < 0.05f) { + EditorGUILayout.HelpBox("The bounding box is very thin. Your shape might be oriented incorrectly. The shape will be projected down on the XZ plane in local space. Rotate this object " + + "so that the local XZ plane corresponds to the plane in which you want to create your shape. For example if you want to create your shape in the XY plane then " + + "this object should have the rotation (-90,0,0). You will need to recreate your shape after rotating this object.", MessageType.Warning); + } + } + + if (GUILayout.Button("Edit points")) { + Tools.current = Tool.Move; + } + + if (GUILayout.Button("Clear all points")) { + for (int i = 0; i < scripts.Length; i++) { + Undo.RecordObject(scripts[i], "Clear points"); + scripts[i].points = new Vector3[0]; + scripts[i].RecalcConvex(); + } + } + + if (EditorGUI.EndChangeCheck()) { + for (int i = 0; i < scripts.Length; i++) { + EditorUtility.SetDirty(scripts[i]); + } + + // Repaint the scene view if necessary + if (!Application.isPlaying || EditorApplication.isPaused) SceneView.RepaintAll(); + } + } + + void DrawPointsField () { + EditorGUI.BeginChangeCheck(); + PropertyField("points"); + if (EditorGUI.EndChangeCheck()) { + serializedObject.ApplyModifiedProperties(); + for (int i = 0; i < scripts.Length; i++) { + scripts[i].RecalcConvex(); + } + HandleUtility.Repaint(); + } + } + + void DrawPhysicsField () { + if (PropertyField("updatePhysics", "Update Physics", "Perform similar calculations on the nodes as during scan.\n" + + "Grid Graphs will update the position of the nodes and also check walkability using collision.\nSee online documentation for more info.")) { + EditorGUI.indentLevel++; + PropertyField("resetPenaltyOnPhysics"); + EditorGUI.indentLevel--; + } + } + + void DrawConvexField () { + EditorGUI.BeginChangeCheck(); + PropertyField("convex"); + if (EditorGUI.EndChangeCheck()) { + serializedObject.ApplyModifiedProperties(); + for (int i = 0; i < scripts.Length; i++) { + scripts[i].RecalcConvex(); + } + HandleUtility.Repaint(); + } + } + + void DrawWalkableField () { + if (PropertyField("modifyWalkability")) { + EditorGUI.indentLevel++; + PropertyField("setWalkability", "Walkability Value"); + EditorGUI.indentLevel--; + } + } + + void DrawPenaltyField () { + PropertyField("penaltyDelta", "Penalty Delta"); + + if (!FindProperty("penaltyDelta").hasMultipleDifferentValues && FindProperty("penaltyDelta").intValue < 0) { + EditorGUILayout.HelpBox("Be careful when lowering the penalty. Negative penalties are not supported and will instead underflow and get really high.\n" + + "You can set an initial penalty on graphs (see their settings) and then lower them like this to get regions which are easier to traverse.", MessageType.Warning); + } + } + + void DrawTagField () { + if (PropertyField("modifyTag")) { + EditorGUI.indentLevel++; + PropertyField("setTag"); + + if (GUILayout.Button("Tags can be used to restrict which units can walk on what ground. Click here for more info", "HelpBox")) { + Application.OpenURL(AstarUpdateChecker.GetURL("tags")); + } + EditorGUI.indentLevel--; + } + } + + static void SphereCap (int controlID, Vector3 position, Quaternion rotation, float size) { +#if UNITY_5_5_OR_NEWER + Handles.SphereHandleCap(controlID, position, rotation, size, Event.current.type); +#else + Handles.SphereCap(controlID, position, rotation, size); +#endif + } + + public void OnSceneGUI () { + var script = target as GraphUpdateScene; + + // Don't allow editing unless it is the active object + if (Selection.activeGameObject != script.gameObject || script.legacyMode) return; + + // Make sure the points array is not null + if (script.points == null) { + script.points = new Vector3[0]; + EditorUtility.SetDirty(script); + } + + List<Vector3> points = Pathfinding.Util.ListPool<Vector3>.Claim(); + points.AddRange(script.points); + + Matrix4x4 invMatrix = script.transform.worldToLocalMatrix; + + Matrix4x4 matrix = script.transform.localToWorldMatrix; + for (int i = 0; i < points.Count; i++) points[i] = matrix.MultiplyPoint3x4(points[i]); + + + float minScreenDist = float.PositiveInfinity; + if (Tools.current != Tool.View && (Event.current.type == EventType.Layout || Event.current.type == EventType.MouseMove)) { + for (int i = 0; i < script.points.Length; i++) { + float dist = HandleUtility.DistanceToLine(points[i], (points[i] + points[(i+1) % script.points.Length])*0.5f); + dist = Mathf.Min(dist, HandleUtility.DistanceToLine(points[i], (points[i] + points[(i-1 + script.points.Length) % script.points.Length])*0.5f)); + HandleUtility.AddControl(-i - 1, dist); + minScreenDist = Mathf.Min(dist, minScreenDist); + } + } + + // If there is a point sort of close to the cursor, but not close enough + // to receive a click event, then prevent the user from accidentally clicking + // which would deselect the current object and be kinda annoying. + // Also always add a default control when shift is pressed, to ensure we don't deselect anything. + // This is particularly important when the user is holding shift to add the first point. + if (Tools.current != Tool.View && (minScreenDist < 50 || Event.current.shift)) + HandleUtility.AddDefaultControl(0); + + for (int i = 0; i < points.Count; i++) { + if (i == selectedPoint && Tools.current == Tool.Move) { + Handles.color = PointSelectedColor; + SphereCap(-i-1, points[i], Quaternion.identity, HandleUtility.GetHandleSize(points[i])*pointGizmosRadius*2); + + Vector3 pre = points[i]; + Vector3 post = Handles.PositionHandle(points[i], Quaternion.identity); + if (pre != post) { + Undo.RecordObject(script, "Moved Point"); + script.points[i] = invMatrix.MultiplyPoint3x4(post); + } + } else { + Handles.color = PointColor; + SphereCap(-i-1, points[i], Quaternion.identity, HandleUtility.GetHandleSize(points[i])*pointGizmosRadius); + } + } + + if (Event.current.type == EventType.MouseDown) { + int pre = selectedPoint; + selectedPoint = -(HandleUtility.nearestControl+1); + if (pre != selectedPoint) GUI.changed = true; + } + + if (Tools.current == Tool.Move) { + var darkSkin = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Scene); + + Handles.BeginGUI(); + float width = 220; + float height = 76; + float margin = 10; + + AstarPathEditor.LoadStyles(); + GUILayout.BeginArea(new Rect(Camera.current.pixelWidth - width, Camera.current.pixelHeight - height, width - margin, height - margin), "Shortcuts", AstarPathEditor.astarSkin.FindStyle("SceneBoxDark")); + + GUILayout.Label("Shift+Click: Add new point", darkSkin.label); + GUILayout.Label("Backspace: Delete selected point", darkSkin.label); + + // Invisible button to capture clicks. This prevents a click inside the box from causing some other GameObject to be selected. + GUI.Button(new Rect(0, 0, width - margin, height - margin), "", GUIStyle.none); + GUILayout.EndArea(); + + Handles.EndGUI(); + } + + if (Tools.current == Tool.Move && Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Backspace && selectedPoint >= 0 && selectedPoint < points.Count) { + Undo.RecordObject(script, "Removed Point"); + var arr = new List<Vector3>(script.points); + arr.RemoveAt(selectedPoint); + points.RemoveAt(selectedPoint); + script.points = arr.ToArray(); + GUI.changed = true; + } + + if (Event.current.shift && Tools.current == Tool.Move) { + HandleUtility.Repaint(); + + // Find the closest segment + int insertionIndex = points.Count; + float minDist = float.PositiveInfinity; + for (int i = 0; i < points.Count; i++) { + float dist = HandleUtility.DistanceToLine(points[i], points[(i+1)%points.Count]); + if (dist < minDist) { + insertionIndex = i + 1; + minDist = dist; + } + } + + var ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); + System.Object hit = HandleUtility.RaySnap(ray); + + Vector3 rayhit = Vector3.zero; + bool didHit = false; + if (hit != null) { + rayhit = ((RaycastHit)hit).point; + didHit = true; + } else { + var plane = new Plane(script.transform.up, script.transform.position); + float distance; + plane.Raycast(ray, out distance); + if (distance > 0) { + rayhit = ray.GetPoint(distance); + didHit = true; + } + } + + if (!didHit && SceneView.currentDrawingSceneView.in2DMode) { + didHit = true; + rayhit = ray.origin; + rayhit.z = 0; + } + + if (didHit) { + if (Event.current.type == EventType.MouseDown) { + points.Insert(insertionIndex, rayhit); + + Undo.RecordObject(script, "Added Point"); + var arr = new List<Vector3>(script.points); + arr.Insert(insertionIndex, invMatrix.MultiplyPoint3x4(rayhit)); + script.points = arr.ToArray(); + GUI.changed = true; + } else { + Handles.color = Color.green; + if (points.Count > 0) { + Handles.DrawDottedLine(points[(insertionIndex-1 + points.Count) % points.Count], rayhit, 8); + Handles.DrawDottedLine(points[insertionIndex % points.Count], rayhit, 8); + } + SphereCap(0, rayhit, Quaternion.identity, HandleUtility.GetHandleSize(rayhit)*pointGizmosRadius); + // Project point down onto a plane + var zeroed = invMatrix.MultiplyPoint3x4(rayhit); + zeroed.y = 0; + Handles.color = new Color(1, 1, 1, 0.5f); + Handles.DrawDottedLine(matrix.MultiplyPoint3x4(zeroed), rayhit, 4); + } + } + + if (Event.current.type == EventType.MouseDown) { + Event.current.Use(); + } + } + + // Make sure the convex hull stays up to date + script.RecalcConvex(); + Pathfinding.Util.ListPool<Vector3>.Release(ref points); + + if (GUI.changed) HandleUtility.Repaint(); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphUpdateSceneEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphUpdateSceneEditor.cs.meta new file mode 100644 index 0000000..944f272 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/GraphUpdateSceneEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4c7bf5208cabd4676a4691ce4541bd62 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors.meta new file mode 100644 index 0000000..be5e2d6 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: deea50c68b64af2428ff80a68ff6b8b5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/AIDestinationSetterEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/AIDestinationSetterEditor.cs new file mode 100644 index 0000000..5dc52ef --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/AIDestinationSetterEditor.cs @@ -0,0 +1,17 @@ +using Pathfinding; +using UnityEditor; + +namespace Pathfinding { + [CustomEditor(typeof(AIDestinationSetter), true)] + [CanEditMultipleObjects] + public class AIDestinationSetterEditor : EditorBase { + protected override void Inspector () { + PropertyField("target"); +#if MODULE_ENTITIES + if ((target as AIDestinationSetter).GetComponent<FollowerEntity>() != null) { + PropertyField("useRotation"); + } +#endif + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/AIDestinationSetterEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/AIDestinationSetterEditor.cs.meta new file mode 100644 index 0000000..672094b --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/AIDestinationSetterEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59db5c27342b40b5cbe5c5700c306651 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/FollowerEntityEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/FollowerEntityEditor.cs new file mode 100644 index 0000000..7742f29 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/FollowerEntityEditor.cs @@ -0,0 +1,224 @@ +#if MODULE_ENTITIES +using UnityEditor; +using UnityEngine; +using Pathfinding.RVO; +using Pathfinding.ECS; +using System.Linq; + +namespace Pathfinding { + [CustomEditor(typeof(FollowerEntity), true)] + [CanEditMultipleObjects] + public class FollowerEntityEditor : EditorBase { + bool debug = false; + bool tagPenaltiesOpen; + + protected override void OnDisable () { + base.OnDisable(); + EditorPrefs.SetBool("FollowerEntity.debug", debug); + EditorPrefs.SetBool("FollowerEntity.tagPenaltiesOpen", tagPenaltiesOpen); + } + + protected override void OnEnable () { + base.OnEnable(); + debug = EditorPrefs.GetBool("FollowerEntity.debug", false); + tagPenaltiesOpen = EditorPrefs.GetBool("FollowerEntity.tagPenaltiesOpen", false); + } + + public override bool RequiresConstantRepaint () { + // When the debug inspector is open we want to update it every frame + // as the agent can move + return debug && Application.isPlaying; + } + + protected void AutoRepathInspector () { + var mode = FindProperty("autoRepathBacking.mode"); + + PropertyField(mode, "Recalculate paths automatically"); + if (!mode.hasMultipleDifferentValues) { + var modeValue = (AutoRepathPolicy.Mode)mode.enumValueIndex; + EditorGUI.indentLevel++; + var period = FindProperty("autoRepathBacking.period"); + if (modeValue == AutoRepathPolicy.Mode.EveryNSeconds || modeValue == AutoRepathPolicy.Mode.Dynamic) { + FloatField(period, min: 0f); + } + if (modeValue == AutoRepathPolicy.Mode.Dynamic) { + EditorGUILayout.HelpBox("The path will be recalculated at least every " + period.floatValue.ToString("0.0") + " seconds, but more often if the destination changes quickly", MessageType.None); + } + EditorGUI.indentLevel--; + } + } + + protected void DebugInspector () { + debug = EditorGUILayout.Foldout(debug, "Debug info"); + if (debug) { + EditorGUI.indentLevel++; + EditorGUI.BeginDisabledGroup(true); + if (targets.Length == 1) { + var ai = target as FollowerEntity; + EditorGUILayout.Toggle("Reached Destination", ai.reachedDestination); + EditorGUILayout.Toggle("Reached End Of Path", ai.reachedEndOfPath); + EditorGUILayout.Toggle("Has Path", ai.hasPath); + EditorGUILayout.Toggle("Path Pending", ai.pathPending); + if (ai.isTraversingOffMeshLink) { + EditorGUILayout.Toggle("Traversing off-mesh link", true); + } + EditorGUI.EndDisabledGroup(); + + var newDestination = EditorGUILayout.Vector3Field("Destination", ai.destination); + if (ai.entityExists) ai.destination = newDestination; + + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.LabelField("Remaining distance", ai.remainingDistance.ToString("0.00")); + EditorGUILayout.LabelField("Speed", ai.velocity.magnitude.ToString("0.00")); + } else { + int nReachedDestination = 0; + int nReachedEndOfPath = 0; + int nPending = 0; + for (int i = 0; i < targets.Length; i++) { + var ai = targets[i] as IAstarAI; + if (ai.reachedDestination) nReachedDestination++; + if (ai.reachedEndOfPath) nReachedEndOfPath++; + if (ai.pathPending) nPending++; + } + EditorGUILayout.LabelField("Reached Destination", nReachedDestination + " of " + targets.Length); + EditorGUILayout.LabelField("Reached End Of Path", nReachedEndOfPath + " of " + targets.Length); + EditorGUILayout.LabelField("Path Pending", nPending + " of " + targets.Length); + } + EditorGUI.EndDisabledGroup(); + EditorGUI.indentLevel--; + } + } + + void PathfindingSettingsInspector () { + bool anyCustomTraversalProvider = this.targets.Any(s => (s as FollowerEntity).pathfindingSettings.traversalProvider != null); + if (anyCustomTraversalProvider) { + EditorGUILayout.HelpBox("Custom traversal provider active", MessageType.None); + } + + PropertyField("managedState.pathfindingSettings.graphMask", "Traversable Graphs"); + + tagPenaltiesOpen = EditorGUILayout.Foldout(tagPenaltiesOpen, new GUIContent("Tags", "Settings for each tag")); + if (tagPenaltiesOpen) { + EditorGUI.indentLevel++; + var traversableTags = this.targets.Select(s => (s as FollowerEntity).pathfindingSettings.traversableTags).ToArray(); + SeekerEditor.TagsEditor(FindProperty("managedState.pathfindingSettings.tagPenalties"), traversableTags); + for (int i = 0; i < targets.Length; i++) { + (targets[i] as FollowerEntity).pathfindingSettings.traversableTags = traversableTags[i]; + } + EditorGUI.indentLevel--; + } + } + + protected override void Inspector () { + Undo.RecordObjects(targets, "Modify FollowerEntity settings"); + EditorGUI.BeginChangeCheck(); + Section("Shape"); + FloatField("shape.radius", min: 0.01f); + FloatField("shape.height", min: 0.01f); + Popup("orientationBacking", new [] { new GUIContent("ZAxisForward (for 3D games)"), new GUIContent("YAxisForward (for 2D games)") }, "Orientation"); + + Section("Movement"); + FloatField("movement.follower.speed", min: 0f); + FloatField("movement.follower.rotationSpeed", min: 0f); + var maxRotationSpeed = FindProperty("movement.follower.rotationSpeed"); + FloatField("movement.follower.maxRotationSpeed", min: maxRotationSpeed.hasMultipleDifferentValues ? 0f : maxRotationSpeed.floatValue); + if (ByteAsToggle("movement.follower.allowRotatingOnSpotBacking", "Allow Rotating On The Spot")) { + EditorGUI.indentLevel++; + FloatField("movement.follower.maxOnSpotRotationSpeed", min: 0f); + FloatField("movement.follower.slowdownTimeWhenTurningOnSpot", min: 0f); + EditorGUI.indentLevel--; + } + Slider("movement.positionSmoothing", left: 0f, right: 0.5f); + Slider("movement.rotationSmoothing", left: 0f, right: 0.5f); + FloatField("movement.follower.slowdownTime", min: 0f); + FloatField("movement.stopDistance", min: 0f); + FloatField("movement.follower.leadInRadiusWhenApproachingDestination", min: 0f); + FloatField("movement.follower.desiredWallDistance", min: 0f); + + if (PropertyField("managedState.enableGravity", "Gravity")) { + EditorGUI.indentLevel++; + PropertyField("movement.groundMask", "Raycast Ground Mask"); + EditorGUI.indentLevel--; + } + var movementPlaneSource = FindProperty("movementPlaneSourceBacking"); + PropertyField(movementPlaneSource, "Movement Plane Source"); + if (AstarPath.active != null && AstarPath.active.data.graphs != null) { + var possiblySpherical = AstarPath.active.data.navmesh != null && !AstarPath.active.data.navmesh.RecalculateNormals; + if (!possiblySpherical && !movementPlaneSource.hasMultipleDifferentValues && (MovementPlaneSource)movementPlaneSource.intValue == MovementPlaneSource.Raycast) { + EditorGUILayout.HelpBox("Using raycasts as the movement plane source is only recommended if you have a spherical or otherwise non-planar world. It has a performance overhead.", MessageType.Info); + } + if (!possiblySpherical && !movementPlaneSource.hasMultipleDifferentValues && (MovementPlaneSource)movementPlaneSource.intValue == MovementPlaneSource.NavmeshNormal) { + EditorGUILayout.HelpBox("Using the navmesh normal as the movement plane source is only recommended if you have a spherical or otherwise non-planar world. It has a performance overhead.", MessageType.Info); + } + } + + Section("Pathfinding"); + PathfindingSettingsInspector(); + AutoRepathInspector(); + + + if (SectionEnableable("Local Avoidance", "managedState.enableLocalAvoidance")) { + if (Application.isPlaying && RVOSimulator.active == null && !EditorUtility.IsPersistent(target)) { + EditorGUILayout.HelpBox("There is no enabled RVOSimulator component in the scene. A single global RVOSimulator component is required for local avoidance.", MessageType.Warning); + } + FloatField("managedState.rvoSettings.agentTimeHorizon", min: 0f, max: 20.0f); + FloatField("managedState.rvoSettings.obstacleTimeHorizon", min: 0f, max: 20.0f); + PropertyField("managedState.rvoSettings.maxNeighbours"); + ClampInt("managedState.rvoSettings.maxNeighbours", min: 0, max: SimulatorBurst.MaxNeighbourCount); + PropertyField("managedState.rvoSettings.layer"); + PropertyField("managedState.rvoSettings.collidesWith"); + Slider("managedState.rvoSettings.priority", left: 0f, right: 1.0f); + PropertyField("managedState.rvoSettings.locked"); + } + + Section("Debug"); + PropertyField("movement.debugFlags", "Movement Debug Rendering"); + PropertyField("managedState.rvoSettings.debug", "Local Avoidance Debug Rendering"); + DebugInspector(); + + if (EditorGUI.EndChangeCheck()) { + for (int i = 0; i < targets.Length; i++) { + var script = targets[i] as FollowerEntity; + script.SyncWithEntity(); + } + } + } + } +} +#else +using UnityEditor; +using UnityEngine; +using Pathfinding.ECS; +using UnityEditor.PackageManager; +using UnityEditor.PackageManager.Requests; + +namespace Pathfinding { + // This inspector is only used if the Entities package is not installed + [CustomEditor(typeof(FollowerEntity), true)] + [CanEditMultipleObjects] + public class FollowerEntityEditor : EditorBase { + static AddRequest addRequest; + + protected override void Inspector () { + if (addRequest != null) { + if (addRequest.Status == StatusCode.Success) { + addRequest = null; + + // If we get this far, unity did not successfully reload the assemblies. + // Who knows what went wrong. Quite possibly restarting Unity will resolve the issue. + EditorUtility.DisplayDialog("Installed Entities package", "The entities package has been installed. You may have to restart the editor for changes to take effect.", "Ok"); + } else if (addRequest.Status == StatusCode.Failure) { + EditorGUILayout.HelpBox("Failed to install the Entities package. Please install it manually using the Package Manager." + (addRequest.Error != null ? "\n" + addRequest.Error.message : ""), MessageType.Error); + } else { + EditorGUILayout.HelpBox("Installing entities package...", MessageType.None); + } + } else { + EditorGUILayout.HelpBox("This component requires the Entities package to be installed. Please install it using the Package Manager.", MessageType.Error); + if (GUILayout.Button("Install entities package")) { + addRequest = Client.Add("com.unity.entities"); + } + } + } + } +} +#endif diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/FollowerEntityEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/FollowerEntityEditor.cs.meta new file mode 100644 index 0000000..9375e37 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/FollowerEntityEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 058264d1741a8df4bb39dd131d7fd2f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/NodeLink2Editor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/NodeLink2Editor.cs new file mode 100644 index 0000000..13a5a8c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/NodeLink2Editor.cs @@ -0,0 +1,29 @@ +using Pathfinding; +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + [CustomEditor(typeof(NodeLink2), true)] + [CanEditMultipleObjects] + public class NodeLink2Editor : EditorBase { + GUIContent HandlerContent = new GUIContent("Handler", "The object that handles movement when traversing the link"); + + protected override void Inspector () { + base.Inspector(); + + var target = this.target as NodeLink2; + if (target.onTraverseOffMeshLink != null) { + var name = target.onTraverseOffMeshLink.name; + if (name == null || name == "") name = target.onTraverseOffMeshLink.GetType().Name; + else name += " → " + target.onTraverseOffMeshLink.GetType().Name; + if (target.onTraverseOffMeshLink is UnityEngine.Component) { + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.ObjectField(HandlerContent, target.onTraverseOffMeshLink as UnityEngine.Object, typeof(UnityEngine.Component), true); + EditorGUI.EndDisabledGroup(); + } else { + EditorGUILayout.LabelField(HandlerContent, name); + } + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/NodeLink2Editor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/NodeLink2Editor.cs.meta new file mode 100644 index 0000000..d0aea6e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/Inspectors/NodeLink2Editor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d111ee9f291ca0b4aa6c075a119df78a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/LocalSpaceRichAIEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/LocalSpaceRichAIEditor.cs new file mode 100644 index 0000000..26484c3 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/LocalSpaceRichAIEditor.cs @@ -0,0 +1,15 @@ +using UnityEditor; +using UnityEngine; +using Pathfinding; + +namespace Pathfinding.Examples { + [CustomEditor(typeof(LocalSpaceRichAI), true)] + [CanEditMultipleObjects] + public class LocalSpaceRichAIEditor : BaseAIEditor { + protected override void Inspector () { + Section("Local Movement"); + PropertyField("graph"); + base.Inspector(); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/LocalSpaceRichAIEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/LocalSpaceRichAIEditor.cs.meta new file mode 100644 index 0000000..31d8b18 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/LocalSpaceRichAIEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2bf40a141e29dc484a3219b4121ab13f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors.meta new file mode 100644 index 0000000..7c00efc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6f756ea48002c49fda0cdfc09b7da69b diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/FunnelModifierEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/FunnelModifierEditor.cs new file mode 100644 index 0000000..88e1798 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/FunnelModifierEditor.cs @@ -0,0 +1,16 @@ +using UnityEditor; + +namespace Pathfinding { + [CustomEditor(typeof(FunnelModifier))] + [CanEditMultipleObjects] + public class FunnelModifierEditor : EditorBase { + protected override void Inspector () { + Section("Settings for navmeshes"); + PropertyField("quality"); + PropertyField("splitAtEveryPortal"); + + Section("Settings for grids"); + PropertyField("accountForGridPenalties"); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/FunnelModifierEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/FunnelModifierEditor.cs.meta new file mode 100644 index 0000000..ddc0b33 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/FunnelModifierEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e6d301cc4df3beab9b5c57be031e267 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/RaycastModifierEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/RaycastModifierEditor.cs new file mode 100644 index 0000000..3a1f678 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/RaycastModifierEditor.cs @@ -0,0 +1,38 @@ +using UnityEditor; + +namespace Pathfinding { + [CustomEditor(typeof(RaycastModifier))] + [CanEditMultipleObjects] + public class RaycastModifierEditor : EditorBase { + protected override void Inspector () { + PropertyField("quality"); + + if (PropertyField("useRaycasting", "Use Physics Raycasting")) { + EditorGUI.indentLevel++; + + PropertyField("use2DPhysics"); + if (PropertyField("thickRaycast")) { + EditorGUI.indentLevel++; + FloatField("thickRaycastRadius", min: 0f); + EditorGUI.indentLevel--; + } + + PropertyField("raycastOffset"); + PropertyField("mask", "Layer Mask"); + EditorGUI.indentLevel--; + } + + PropertyField("useGraphRaycasting"); + if (!FindProperty("useGraphRaycasting").boolValue && !FindProperty("useRaycasting").boolValue) { + EditorGUILayout.HelpBox("You should use either raycasting, graph raycasting or both, otherwise this modifier will not do anything", MessageType.Warning); + } + + if (FindProperty("useGraphRaycasting").boolValue && !FindProperty("useRaycasting").boolValue) { + AstarPath.FindAstarPath(); + if (AstarPath.active != null && AstarPath.active.data.gridGraph != null) { + EditorGUILayout.HelpBox("For grid graphs, when using only graph raycasting the funnel modifier has superceded this modifier. Try using that instead. It's faster and more accurate.", MessageType.Warning); + } + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/RaycastModifierEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/RaycastModifierEditor.cs.meta new file mode 100644 index 0000000..c985a7b --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/RaycastModifierEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ec73ac2d3bd6342faace3242ff3e6f79 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/SmoothModifierEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/SmoothModifierEditor.cs new file mode 100644 index 0000000..0059533 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/SmoothModifierEditor.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using UnityEditor; + +namespace Pathfinding { + [CustomEditor(typeof(SimpleSmoothModifier))] + [CanEditMultipleObjects] + public class SmoothModifierEditor : EditorBase { + protected override void Inspector () { + var smoothType = FindProperty("smoothType"); + + PropertyField("smoothType"); + + if (!smoothType.hasMultipleDifferentValues) { + switch ((SimpleSmoothModifier.SmoothType)smoothType.enumValueIndex) { + case SimpleSmoothModifier.SmoothType.Simple: + if (PropertyField("uniformLength")) { + FloatField("maxSegmentLength", min: 0.005f); + } else { + IntSlider("subdivisions", 0, 6); + } + + PropertyField("iterations"); + ClampInt("iterations", 0); + + PropertyField("strength"); + break; + case SimpleSmoothModifier.SmoothType.OffsetSimple: + PropertyField("iterations"); + ClampInt("iterations", 0); + + FloatField("offset", min: 0f); + break; + case SimpleSmoothModifier.SmoothType.Bezier: + IntSlider("subdivisions", 0, 6); + PropertyField("bezierTangentLength"); + break; + case SimpleSmoothModifier.SmoothType.CurvedNonuniform: + FloatField("maxSegmentLength", min: 0.005f); + PropertyField("factor"); + break; + } + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/SmoothModifierEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/SmoothModifierEditor.cs.meta new file mode 100644 index 0000000..57d277a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ModifierEditors/SmoothModifierEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1b6748a8c87024ddd9cc5f3c5e19ab60 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshAddEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshAddEditor.cs new file mode 100644 index 0000000..ef2b625 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshAddEditor.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using UnityEditor; + +namespace Pathfinding { + [CustomEditor(typeof(NavmeshAdd))] + [CanEditMultipleObjects] + public class NavmeshAddEditor : EditorBase { + protected override void Inspector () { + EditorGUI.BeginChangeCheck(); + var type = FindProperty("type"); + PropertyField("type", "Shape"); + EditorGUI.indentLevel++; + + if (!type.hasMultipleDifferentValues) { + switch ((NavmeshAdd.MeshType)type.intValue) { + case NavmeshAdd.MeshType.Rectangle: + PropertyField("rectangleSize"); + break; + case NavmeshAdd.MeshType.CustomMesh: + PropertyField("mesh"); + PropertyField("meshScale"); + break; + } + } + + PropertyField("center"); + EditorGUI.indentLevel--; + + EditorGUILayout.Separator(); + PropertyField("updateDistance"); + if (PropertyField("useRotationAndScale")) { + EditorGUI.indentLevel++; + FloatField("updateRotationDistance", min: 0f, max: 180f); + EditorGUI.indentLevel--; + } + + EditorGUI.BeginChangeCheck(); + PropertyField("graphMask", "Traversable Graphs"); + bool changedMask = EditorGUI.EndChangeCheck(); + + serializedObject.ApplyModifiedProperties(); + + if (EditorGUI.EndChangeCheck()) { + foreach (NavmeshAdd tg in targets) { + tg.RebuildMesh(); + tg.ForceUpdate(); + // If the mask is changed we disable and then enable the component + // to make sure it is removed from the right graphs and then added back + if (changedMask && tg.enabled) { + tg.enabled = false; + tg.enabled = true; + } + } + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshAddEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshAddEditor.cs.meta new file mode 100644 index 0000000..530f383 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshAddEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 551f2013671c4d8db91cf1d1afbde58b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshCutEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshCutEditor.cs new file mode 100644 index 0000000..615d22e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshCutEditor.cs @@ -0,0 +1,100 @@ +using UnityEngine; +using UnityEditor; + +namespace Pathfinding { + [CustomEditor(typeof(NavmeshCut))] + [CanEditMultipleObjects] + public class NavmeshCutEditor : EditorBase { + GUIContent[] MeshTypeOptions = new [] { + new GUIContent("Rectangle (legacy)"), + new GUIContent("Circle (legacy)"), + new GUIContent("Custom Mesh"), + new GUIContent("Box"), + new GUIContent("Sphere"), + new GUIContent("Capsule"), + }; + + protected override void Inspector () { + // Make sure graphs are deserialized. + // The gizmos on the navmesh cut uses the graph information to visualize the character radius + AstarPath.FindAstarPath(); + + EditorGUI.BeginChangeCheck(); + var type = FindProperty("type"); + var circleResolution = FindProperty("circleResolution"); + Popup("type", MeshTypeOptions, label: "Shape"); + EditorGUI.indentLevel++; + + if (!type.hasMultipleDifferentValues) { + switch ((NavmeshCut.MeshType)type.intValue) { + case NavmeshCut.MeshType.Circle: + case NavmeshCut.MeshType.Capsule: + FloatField("circleRadius", "Radius", min: 0.01f); + PropertyField("circleResolution", "Resolution"); + FloatField("height", min: 0f); + + if (circleResolution.intValue >= 20) { + EditorGUILayout.HelpBox("Be careful with large resolutions. It is often better with a relatively low resolution since it generates cleaner navmeshes with fewer nodes.", MessageType.Warning); + } + break; + case NavmeshCut.MeshType.Sphere: + FloatField("circleRadius", "Radius", min: 0.01f); + PropertyField("circleResolution", "Resolution"); + + if (circleResolution.intValue >= 20) { + EditorGUILayout.HelpBox("Be careful with large resolutions. It is often better with a relatively low resolution since it generates cleaner navmeshes with fewer nodes.", MessageType.Warning); + } + break; + case NavmeshCut.MeshType.Rectangle: + PropertyField("rectangleSize"); + FloatField("height", min: 0f); + break; + case NavmeshCut.MeshType.Box: + PropertyField("rectangleSize.x", "Width"); + PropertyField("height", "Height"); + PropertyField("rectangleSize.y", "Depth"); + break; + case NavmeshCut.MeshType.CustomMesh: + PropertyField("mesh"); + PropertyField("meshScale"); + FloatField("height", min: 0f); + EditorGUILayout.HelpBox("This mesh should be a planar surface. Take a look at the documentation for an example.", MessageType.Info); + break; + } + } + + PropertyField("center"); + EditorGUI.indentLevel--; + + EditorGUILayout.Separator(); + PropertyField("updateDistance"); + if (PropertyField("useRotationAndScale")) { + EditorGUI.indentLevel++; + FloatField("updateRotationDistance", min: 0f, max: 180f); + EditorGUI.indentLevel--; + } + + PropertyField("isDual"); + PropertyField("cutsAddedGeom", "Cuts Added Geometry"); + PropertyField("radiusExpansionMode", "Radius Expansion"); + + EditorGUI.BeginChangeCheck(); + PropertyField("graphMask", "Affected Graphs"); + bool changedMask = EditorGUI.EndChangeCheck(); + + serializedObject.ApplyModifiedProperties(); + + if (EditorGUI.EndChangeCheck()) { + foreach (NavmeshCut tg in targets) { + tg.ForceUpdate(); + // If the mask is changed we disable and then enable the component + // to make sure it is removed from the right graphs and then added back + if (changedMask && tg.enabled) { + tg.enabled = false; + tg.enabled = true; + } + } + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshCutEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshCutEditor.cs.meta new file mode 100644 index 0000000..a26bfce --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshCutEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3b9f4072976bf44aea89e602ff53292f +timeCreated: 1459017463 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshPrefabEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshPrefabEditor.cs new file mode 100644 index 0000000..3f5b717 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshPrefabEditor.cs @@ -0,0 +1,168 @@ +using UnityEditor; +using UnityEngine; +using System.Linq; + +namespace Pathfinding { + using Pathfinding.Util; + + /// <summary>Editor for the <see cref="NavmeshPrefab"/> component</summary> + [CustomEditor(typeof(NavmeshPrefab), true)] + [CanEditMultipleObjects] + public class NavmeshPrefabEditor : EditorBase { + protected override void OnEnable () { + base.OnEnable(); + AstarPathEditor.LoadStyles(); + EditorApplication.update += OnUpdate; + } + + protected override void OnDisable () { + base.OnDisable(); + EditorApplication.update -= OnUpdate; + } + + void OnUpdate () { + } + + static int pendingScanProgressId; + + static int PendingScan (Promise<NavmeshPrefab.SerializedOutput>[] pendingScanProgress, NavmeshPrefab[] pendingScanTargets) { + var progressId = UnityEditor.Progress.Start("Scanning Navmesh Prefab", "Scanning Navmesh Prefab", UnityEditor.Progress.Options.None, -1); + EditorApplication.CallbackFunction cb = null; + cb = () => { + if (UnityEditor.Progress.Exists(progressId)) { + bool allDone = true; + var avg = 0.0f; + for (int i = 0; i < pendingScanProgress.Length; i++) { + if (pendingScanTargets[i] == null) { + avg += 1.0f; + } else { + avg += pendingScanProgress[i].Progress; + + if (pendingScanProgress[i].IsCompleted) { + var data = pendingScanProgress[i].Complete().data; + // Data can be null if some exception has been thrown during the scan + if (data != null) { + pendingScanTargets[i].SaveToFile(data); + } + pendingScanProgress[i].Dispose(); + pendingScanTargets[i] = null; + pendingScanProgress[i] = default; + } else { + allDone = false; + } + } + } + avg /= pendingScanProgress.Length; + UnityEditor.Progress.Report(progressId, avg); + + if (allDone) { + UnityEditor.Progress.Finish(progressId); + } + } else { + EditorApplication.update -= cb; + } + }; + EditorApplication.update += cb; + return progressId; + } + + protected override void Inspector () { + AstarPath.FindAstarPath(); + Section("Shape"); + BoundsField("bounds"); + + bool needsRounding = false; + RecastGraph graph = null; + if (AstarPath.active != null && AstarPath.active.data.recastGraph != null) { + graph = AstarPath.active.data.recastGraph; + } + bool isPrefab = EditorUtility.IsPersistent(this.target); + + if (graph != null && !isPrefab) { + if (!graph.useTiles) { + EditorGUILayout.HelpBox("The recast graph in the scene doesn't use tiles. It needs to use tiles to be used with this component.", MessageType.Warning); + if (GUILayout.Button("Enable tiling on recast graph")) { + graph.useTiles = true; + } + } + + var roundedTiles = this.targets.Cast<NavmeshPrefab>().Select(target => { + var navmeshPrefab = target as NavmeshPrefab; + var bounds = navmeshPrefab.bounds; + var desiredBounds = NavmeshPrefab.SnapSizeToClosestTileMultiple(graph, bounds); + return new { + needsRounding = !Mathf.Approximately(bounds.extents.x, desiredBounds.extents.x) || !Mathf.Approximately(bounds.extents.z, desiredBounds.extents.z), + desiredBounds = desiredBounds + }; + }).ToArray(); + needsRounding = roundedTiles.Any(x => x.needsRounding); + + if (needsRounding) { + EditorGUILayout.HelpBox("Bounds size is not a multiple of the recast graph's tile size (" + (graph.editorTileSize * graph.cellSize).ToString("0.0") + ").\nThe tile size is cell size * tile size in voxels (set in recast graph settings)", MessageType.Warning); + if (GUILayout.Button("Round to nearest multiple")) { + UnityEditor.Undo.RecordObjects(targets, "Snap to nearest tile multiple"); + for (int i = 0; i < targets.Length; i++) { + (targets[i] as NavmeshPrefab).bounds = roundedTiles[i].desiredBounds; + EditorUtility.SetDirty(targets[i]); + } + } + } + + if (GUILayout.Button("Snap position to nearest tile")) { + for (int i = 0; i < targets.Length; i++) { + var navmeshPrefab = targets[i] as NavmeshPrefab; + navmeshPrefab.SnapToClosestTileAlignment(); + } + } + } + Section("Settings"); + PropertyField("applyOnStart"); + PropertyField("removeTilesWhenDisabled"); + Section("Serialized Data"); + EditorGUILayout.BeginHorizontal(); + PropertyField("serializedNavmesh"); + +#if UNITY_2021_3_OR_NEWER + EditorGUI.showMixedValue = targets.Length > 1; + var target = this.target as NavmeshPrefab; + GUILayout.Label(EditorUtility.FormatBytes(target.serializedNavmesh != null ? target.serializedNavmesh.dataSize : 0), GUILayout.ExpandWidth(false)); + EditorGUI.showMixedValue = false; +#endif + EditorGUILayout.EndHorizontal(); + + if (UnityEditor.Progress.Exists(pendingScanProgressId)) { + var r = EditorGUILayout.GetControlRect(); + EditorGUI.ProgressBar(r, UnityEditor.Progress.GetProgress(pendingScanProgressId), "Scanning..."); + Repaint(); + } else { + EditorGUI.BeginDisabledGroup(needsRounding || isPrefab || graph == null); + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("Scan & Save")) { + var pendingScanProgress = new Promise<NavmeshPrefab.SerializedOutput>[targets.Length]; + var pendingScanTargets = new NavmeshPrefab[targets.Length]; + for (int i = 0; i < targets.Length; i++) { + var navmeshPrefab = targets[i] as NavmeshPrefab; + pendingScanProgress[i] = navmeshPrefab.ScanAsync(graph); + // this.pendingScanProgress[i].Complete(); + pendingScanTargets[i] = navmeshPrefab; + } + + pendingScanProgressId = PendingScan(pendingScanProgress, pendingScanTargets); + } + EditorGUI.EndDisabledGroup(); + EditorGUI.BeginDisabledGroup(isPrefab || graph == null); + if (GUILayout.Button("Edit graph", GUILayout.ExpandWidth(false))) { + Selection.activeGameObject = AstarPath.active.gameObject; + AstarPath.active.showGraphs = true; + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.EndHorizontal(); + if (isPrefab) { + EditorGUILayout.HelpBox("Open the prefab or add it to a scene to scan it.", MessageType.Info); + } else if (graph == null) { + EditorGUILayout.HelpBox("No recast graph was found in the scene. Add one if you want to scan this navmesh prefab.", MessageType.Info); + } + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshPrefabEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshPrefabEditor.cs.meta new file mode 100644 index 0000000..26c484a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/NavmeshPrefabEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cfd3f05fe0624efab757dfc144f5928 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingEditorSettings.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingEditorSettings.cs new file mode 100644 index 0000000..d993fca --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingEditorSettings.cs @@ -0,0 +1,13 @@ +using System.Diagnostics; +using UnityEditor; + +namespace Pathfinding { + [FilePath("ProjectSettings/com.arongranberg.astar/settings.asset", FilePathAttribute.Location.ProjectFolder)] + internal class PathfindingEditorSettings : ScriptableSingleton<PathfindingEditorSettings> { + public bool hasShownWelcomeScreen = false; + + public void Save () { + Save(true); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingEditorSettings.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingEditorSettings.cs.meta new file mode 100644 index 0000000..7edc8a6 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingEditorSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21f007d651ef4ab42b597f1da9ad75cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingTagDrawer.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingTagDrawer.cs new file mode 100644 index 0000000..6b52bf3 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingTagDrawer.cs @@ -0,0 +1,11 @@ +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + [CustomPropertyDrawer(typeof(PathfindingTag))] + public class PathfindingTagDrawer : PropertyDrawer { + public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) { + Pathfinding.Util.EditorGUILayoutHelper.TagField(position, label, property, AstarPathEditor.EditTags); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingTagDrawer.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingTagDrawer.cs.meta new file mode 100644 index 0000000..bc094fc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/PathfindingTagDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 276fb1a9d0bb895e8af74a9cc9908a5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ProceduralGridMoverEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ProceduralGridMoverEditor.cs new file mode 100644 index 0000000..4d125ef --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ProceduralGridMoverEditor.cs @@ -0,0 +1,47 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace Pathfinding { + [CustomEditor(typeof(ProceduralGraphMover))] + [CanEditMultipleObjects] + public class ProceduralGridMoverEditor : EditorBase { + GUIContent[] graphLabels = new GUIContent[32]; + + protected override void Inspector () { + // Make sure the AstarPath object is initialized and the graphs are loaded, this is required to be able to show graph names in the mask popup + AstarPath.FindAstarPath(); + + for (int i = 0; i < graphLabels.Length; i++) { + if (AstarPath.active == null || AstarPath.active.data.graphs == null || i >= AstarPath.active.data.graphs.Length || AstarPath.active.data.graphs[i] == null) { + graphLabels[i] = new GUIContent("Graph " + i + (i == 31 ? "+" : "")); + } else { + graphLabels[i] = new GUIContent(AstarPath.active.data.graphs[i].name + " (graph " + i + ")"); + } + } + + Popup("graphIndex", graphLabels, "Graph"); + PropertyField("target"); + + // Only show the update distance field if the graph is a grid graph, or if we are not sure which graph type it is + var graphIndexProp = FindProperty("graphIndex"); + bool showField = true; + if (!graphIndexProp.hasMultipleDifferentValues && AstarPath.active != null) { + var graphIndex = graphIndexProp.intValue; + if (graphIndex >= 0 && graphIndex < AstarPath.active.data.graphs.Length) { + var graph = AstarPath.active.data.graphs[graphIndex]; + if (graph is GridGraph) { + // NOOP + } else if (graph is RecastGraph) { + showField = false; + } else { + EditorGUILayout.HelpBox("The selected graph is not a grid, layered grid or recast graph", MessageType.Warning); + } + } + } + if (showField) { + PropertyField("updateDistance"); + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ProceduralGridMoverEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ProceduralGridMoverEditor.cs.meta new file mode 100644 index 0000000..4d81ba1 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/ProceduralGridMoverEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b50f1b778f5176f18b2305552cc4639c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOControllerEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOControllerEditor.cs new file mode 100644 index 0000000..1a79c29 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOControllerEditor.cs @@ -0,0 +1,67 @@ +using UnityEngine; +using UnityEditor; + +namespace Pathfinding.RVO { + [CustomEditor(typeof(RVOController))] + [CanEditMultipleObjects] + public class RVOControllerEditor : EditorBase { + protected override void Inspector () { + Section("Shape"); + var ai = (target as MonoBehaviour).GetComponent<IAstarAI>(); + if (ai != null) { + var drivenStr = "Driven by " + ai.GetType().Name + " component"; + EditorGUILayout.LabelField("Radius", drivenStr); + if ((target as RVOController).movementPlaneMode == MovementPlane.XZ) { + EditorGUILayout.LabelField("Height", drivenStr); + EditorGUILayout.LabelField("Center", drivenStr); + } + } else { + FloatField("radiusBackingField", label: "Radius", min: 0.01f); + + if ((target as RVOController).movementPlaneMode == MovementPlane.XZ) { + FloatField("heightBackingField", label: "Height", min: 0.01f); + PropertyField("centerBackingField", label: "Center"); + } + } + + Section("Avoidance"); + FloatField("agentTimeHorizon", min: 0f); + FloatField("obstacleTimeHorizon", min: 0f); + PropertyField("maxNeighbours"); + PropertyField("layer"); + PropertyField("collidesWith"); + PropertyField("priority"); + var rvoController = target as RVOController; + if (!Mathf.Approximately(rvoController.priorityMultiplier, 1.0f)) { + EditorGUILayout.HelpBox("Another script is applying an additional multiplier to the priority of " + rvoController.priorityMultiplier.ToString("0.00"), MessageType.None); + } + + if (rvoController.flowFollowingStrength > 0.01f) { + EditorGUILayout.HelpBox("Another script is adding flow following behavior. Strength: " + (rvoController.flowFollowingStrength*100).ToString("0") + "%", MessageType.None); + } + + EditorGUILayout.Separator(); + EditorGUI.BeginDisabledGroup(PropertyField("lockWhenNotMoving")); + PropertyField("locked"); + EditorGUI.EndDisabledGroup(); + EditorGUILayout.Separator(); + PropertyField("debug"); + + bool maxNeighboursLimit = false; + + for (int i = 0; i < targets.Length; i++) { + var controller = targets[i] as RVOController; + maxNeighboursLimit |= controller.rvoAgent != null && controller.rvoAgent.NeighbourCount >= controller.rvoAgent.MaxNeighbours; + } + + if (maxNeighboursLimit) { + EditorGUILayout.HelpBox("Limit of how many neighbours to consider (Max Neighbours) has been reached. Some nearby agents may have been ignored. " + + "To ensure all agents are taken into account you can raise the 'Max Neighbours' value at a cost to performance.", MessageType.Warning); + } + + if (RVOSimulator.active == null && !EditorUtility.IsPersistent(target)) { + EditorGUILayout.HelpBox("There is no enabled RVOSimulator component in the scene. A single RVOSimulator component is required for local avoidance.", MessageType.Warning); + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOControllerEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOControllerEditor.cs.meta new file mode 100644 index 0000000..6f96fe8 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOControllerEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9af3f5ba99e534f21bb7566d10310a0c +timeCreated: 1467044398 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVONavmeshEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVONavmeshEditor.cs new file mode 100644 index 0000000..0f1fb06 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVONavmeshEditor.cs @@ -0,0 +1,11 @@ +using UnityEditor; +using Pathfinding.RVO; + +namespace Pathfinding { + [CustomEditor(typeof(RVONavmesh))] + public class RVONavmeshEditor : EditorBase { + protected override void Inspector () { + EditorGUILayout.HelpBox("This component is deprecated. The RVOSimulator now has an option to take the navmesh into account automatically.", MessageType.Warning); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVONavmeshEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVONavmeshEditor.cs.meta new file mode 100644 index 0000000..f8312a0 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVONavmeshEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4eff877e8158f41ae99f5cf271cb7646 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSimulatorEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSimulatorEditor.cs new file mode 100644 index 0000000..a2416dc --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSimulatorEditor.cs @@ -0,0 +1,25 @@ +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + [CustomEditor(typeof(Pathfinding.RVO.RVOSimulator))] + public class RVOSimulatorEditor : EditorBase { + static readonly GUIContent[] movementPlaneOptions = new [] { new GUIContent("XZ (for 3D games)"), new GUIContent("XY (for 2D games)"), new GUIContent("Arbitrary (for non-planar worlds)") }; + + protected override void Inspector () { + Section("Movement"); + Popup("movementPlane", movementPlaneOptions); + + PropertyField("symmetryBreakingBias"); + PropertyField("hardCollisions"); + PropertyField("useNavmeshAsObstacle"); + + // Section("Execution"); + // PropertyField("desiredSimulationFPS"); + // ClampInt("desiredSimulationFPS", 1); + + Section("Debugging"); + PropertyField("drawQuadtree"); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSimulatorEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSimulatorEditor.cs.meta new file mode 100644 index 0000000..d6620d4 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSimulatorEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5d2e069b218f84e61b4ba29c4c958613 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSquareObstacleEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSquareObstacleEditor.cs new file mode 100644 index 0000000..77f0c11 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSquareObstacleEditor.cs @@ -0,0 +1,12 @@ +using UnityEditor; +using Pathfinding.RVO; + +namespace Pathfinding { + [CustomEditor(typeof(RVOSquareObstacle))] + [CanEditMultipleObjects] + public class RVOSquareObstacleEditor : EditorBase { + protected override void Inspector () { + EditorGUILayout.HelpBox("This component is deprecated. Local avoidance colliders never worked particularly well and the performance was poor. Modify the graphs instead so that pathfinding takes obstacles into account.", MessageType.Warning); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSquareObstacleEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSquareObstacleEditor.cs.meta new file mode 100644 index 0000000..0c70199 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RVOSquareObstacleEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 426beb6f8d635447fadad7ee0a592fe0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RecastMeshObjEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RecastMeshObjEditor.cs new file mode 100644 index 0000000..b911dc2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RecastMeshObjEditor.cs @@ -0,0 +1,129 @@ +using UnityEngine; +using UnityEditor; + +namespace Pathfinding { + [CustomEditor(typeof(RecastMeshObj))] + [CanEditMultipleObjects] + public class RecastMeshObjEditor : EditorBase { + protected override void Inspector () { + var modeProp = FindProperty("mode"); + var areaProp = FindProperty("surfaceID"); + var geometrySource = FindProperty("geometrySource"); + var includeInScan = FindProperty("includeInScan"); + var script = target as RecastMeshObj; + + if (areaProp.intValue < 0) { + areaProp.intValue = 0; + } + + PropertyField(includeInScan); + if (!includeInScan.hasMultipleDifferentValues && script.includeInScan == RecastMeshObj.ScanInclusion.AlwaysExclude) { + EditorGUILayout.HelpBox("This object will be completely ignored by the graph. Even if it would otherwise be included due to its layer or tag.", MessageType.None); + return; + } + + PropertyField(geometrySource, "Geometry Source"); + if (!geometrySource.hasMultipleDifferentValues) { + var geometrySourceValue = (RecastMeshObj.GeometrySource)geometrySource.intValue; + script.ResolveMeshSource(out var filter, out var coll, out var coll2D); + switch (geometrySourceValue) { + case RecastMeshObj.GeometrySource.Auto: + if (filter != null) { + EditorGUILayout.HelpBox("Using the attached MeshFilter as a source", MessageType.None); + if (script.GetComponent<MeshRenderer>() == null) { + EditorGUILayout.HelpBox("When a MeshFilter is used as a geometry source, a MeshRenderer must also be attached", MessageType.Error); + } + } else if (coll != null) { + EditorGUILayout.HelpBox("Using the attached collider as a source", MessageType.None); + } else if (coll2D != null) { + EditorGUILayout.HelpBox("Using the attached 2D collider as a source", MessageType.None); + } else { + EditorGUILayout.HelpBox("No MeshFilter or MeshCollider found on this GameObject", MessageType.Error); + } + break; + case RecastMeshObj.GeometrySource.MeshFilter: + if (filter == null) { + EditorGUILayout.HelpBox("No MeshFilter found on this GameObject", MessageType.Error); + } else if (script.GetComponent<MeshRenderer>() == null) { + EditorGUILayout.HelpBox("When a MeshFilter is used as a geometry source, a MeshRenderer must also be attached", MessageType.Error); + } + break; + case RecastMeshObj.GeometrySource.Collider: + if (coll == null && coll2D == null) { + EditorGUILayout.HelpBox("No collider found on this GameObject", MessageType.Error); + } + break; + } + } + + PropertyField(modeProp, "Surface Type"); + // Note: uses intValue instead of enumValueIndex because the enum does not start from 0. + var mode = (RecastMeshObj.Mode)modeProp.intValue; + if (!modeProp.hasMultipleDifferentValues) { + switch (mode) { + case RecastMeshObj.Mode.UnwalkableSurface: + EditorGUILayout.HelpBox("All surfaces on this mesh will be made unwalkable", MessageType.None); + break; + case RecastMeshObj.Mode.WalkableSurface: + EditorGUILayout.HelpBox("All surfaces on this mesh will be walkable", MessageType.None); + break; + case RecastMeshObj.Mode.WalkableSurfaceWithSeam: + EditorGUILayout.HelpBox("All surfaces on this mesh will be walkable and a " + + "seam will be created between the surfaces on this mesh and the surfaces on other meshes (with a different surface id)", MessageType.None); + EditorGUI.indentLevel++; + PropertyField(areaProp, "Surface ID"); + if (!areaProp.hasMultipleDifferentValues && areaProp.intValue < 0) { + areaProp.intValue = 0; + } + EditorGUI.indentLevel--; + break; + case RecastMeshObj.Mode.WalkableSurfaceWithTag: + EditorGUILayout.HelpBox("All surfaces on this mesh will be walkable and the given tag will be applied to them", MessageType.None); + EditorGUI.indentLevel++; + + EditorGUI.showMixedValue = areaProp.hasMultipleDifferentValues; + EditorGUI.BeginChangeCheck(); + var newTag = Util.EditorGUILayoutHelper.TagField(new GUIContent("Tag Value"), areaProp.intValue, AstarPathEditor.EditTags); + if (EditorGUI.EndChangeCheck()) { + areaProp.intValue = newTag; + } + if (!areaProp.hasMultipleDifferentValues && (areaProp.intValue < 0 || areaProp.intValue > GraphNode.MaxTagIndex)) { + areaProp.intValue = Mathf.Clamp(areaProp.intValue, 0, GraphNode.MaxTagIndex); + } + + EditorGUI.indentLevel--; + break; + } + } + + var dynamicProp = FindProperty("dynamic"); + PropertyField(dynamicProp, "Dynamic", "Setting this value to false will give better scanning performance, but you will not be able to move the object during runtime"); + if (!dynamicProp.hasMultipleDifferentValues && !dynamicProp.boolValue) { + EditorGUILayout.HelpBox("This object must not be moved during runtime since 'dynamic' is set to false", MessageType.Info); + } + + bool solidAlwaysEnabled = true; + bool solidRelevant = false; + for (int i = 0; i < targets.Length; i++) { + script.ResolveMeshSource(out var meshSource, out var collider, out var collider2D); + bool usesConvexCollider = collider != null && (collider is BoxCollider || collider is SphereCollider || collider is CapsuleCollider || (collider is MeshCollider mc && mc.convex)); + solidAlwaysEnabled &= usesConvexCollider; + + // If the object only has a 2D collider, the solid field doesn't affect anything + solidRelevant |= meshSource != null || collider != null; + } + + if (solidRelevant) { + if (solidAlwaysEnabled) { + // Forced solid + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.Toggle("Solid", true); + EditorGUILayout.HelpBox("Convex colliders are always treated as solid", MessageType.Info); + EditorGUI.EndDisabledGroup(); + } else { + PropertyField("solid"); + } + } + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RecastMeshObjEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RecastMeshObjEditor.cs.meta new file mode 100644 index 0000000..774e965 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RecastMeshObjEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c4297fc55c734c9bad31126dc81e49b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors.meta new file mode 100644 index 0000000..bd57d90 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5bd303177e2641e39d7786d6633315a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/GridGraphRuleEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/GridGraphRuleEditor.cs new file mode 100644 index 0000000..a4f941c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/GridGraphRuleEditor.cs @@ -0,0 +1,7 @@ +namespace Pathfinding.Graphs.Grid.Rules { + /// <summary>Common interface for all grid graph rule editors</summary> + public interface IGridGraphRuleEditor { + void OnInspectorGUI(GridGraph graph, GridGraphRule rule); + void OnSceneGUI(GridGraph graph, GridGraphRule rule); + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/GridGraphRuleEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/GridGraphRuleEditor.cs.meta new file mode 100644 index 0000000..f05cd6d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/GridGraphRuleEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6cb8fa407b3b048b0976573f12ca770e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleAnglePenaltyEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleAnglePenaltyEditor.cs new file mode 100644 index 0000000..ba3b721 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleAnglePenaltyEditor.cs @@ -0,0 +1,22 @@ +using Pathfinding.Graphs.Grid.Rules; +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + /// <summary>Editor for the <see cref="RuleAnglePenalty"/> rule</summary> + [CustomGridGraphRuleEditor(typeof(RuleAnglePenalty), "Penalty from Slope Angle")] + public class RuleAnglePenaltyEditor : IGridGraphRuleEditor { + public void OnInspectorGUI (GridGraph graph, GridGraphRule rule) { + var target = rule as RuleAnglePenalty; + + if (target.curve == null || target.curve.length == 0) target.curve = AnimationCurve.Linear(0, 0, 90, 1); + target.penaltyScale = EditorGUILayout.FloatField("Penalty Scale", target.penaltyScale); + if (target.penaltyScale < 1) target.penaltyScale = 1; + target.curve = EditorGUILayout.CurveField(target.curve, Color.red, new Rect(0, 0, 90, 1)); + + EditorGUILayout.HelpBox("Nodes will get a penalty between 0 and " + target.penaltyScale.ToString("0") + " depending on the slope angle", MessageType.None); + } + + public void OnSceneGUI (GridGraph graph, GridGraphRule rule) { } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleAnglePenaltyEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleAnglePenaltyEditor.cs.meta new file mode 100644 index 0000000..130c50d --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleAnglePenaltyEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b43f06d7cb7e494b901c3ae81026332 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleElevationPenaltyEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleElevationPenaltyEditor.cs new file mode 100644 index 0000000..30eac85 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleElevationPenaltyEditor.cs @@ -0,0 +1,61 @@ +using Pathfinding.Graphs.Grid.Rules; +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + /// <summary>Editor for the <see cref="RuleElevationPenalty"/> rule</summary> + [CustomGridGraphRuleEditor(typeof(RuleElevationPenalty), "Penalty from Elevation")] + public class RuleElevationPenaltyEditor : IGridGraphRuleEditor { + float lastChangedTime = -10000; + + public void OnInspectorGUI (GridGraph graph, GridGraphRule rule) { + var target = rule as RuleElevationPenalty; + + if (target.curve == null || target.curve.length == 0) target.curve = AnimationCurve.Linear(0, 0, 1, 1); + target.penaltyScale = EditorGUILayout.FloatField("Penalty Scale", target.penaltyScale); + target.penaltyScale = Mathf.Max(target.penaltyScale, 1.0f); + + EditorGUILayout.LabelField("Elevation Range", ""); + EditorGUI.BeginChangeCheck(); + EditorGUI.indentLevel++; + target.elevationRange.x = EditorGUILayout.FloatField("Min", target.elevationRange.x); + target.elevationRange.y = EditorGUILayout.FloatField("Max", target.elevationRange.y); + target.elevationRange.x = Mathf.Max(target.elevationRange.x, 0); + target.elevationRange.y = Mathf.Max(target.elevationRange.y, target.elevationRange.x + 1.0f); + EditorGUI.indentLevel--; + if (EditorGUI.EndChangeCheck()) lastChangedTime = Time.realtimeSinceStartup; + + target.curve = EditorGUILayout.CurveField(target.curve, Color.red, new Rect(0, 0, 1, 1)); + + EditorGUILayout.HelpBox("Nodes will get a penalty between 0 and " + target.penaltyScale.ToString("0") + " depending on their elevation above the grid graph plane", MessageType.None); + } + + protected static readonly Color GizmoColorMax = new Color(222.0f/255, 113.0f/255, 33.0f/255, 0.5f); + protected static readonly Color GizmoColorMin = new Color(33.0f/255, 104.0f/255, 222.0f/255, 0.5f); + + public void OnSceneGUI (GridGraph graph, GridGraphRule rule) { + var target = rule as RuleElevationPenalty; + + // Draw some helpful gizmos in the scene view for a few seconds whenever the settings change + const float FullAlphaTime = 2.0f; + const float FadeoutTime = 0.5f; + float alpha = Mathf.SmoothStep(1, 0, (Time.realtimeSinceStartup - lastChangedTime - FullAlphaTime)/FadeoutTime); + + if (alpha <= 0) return; + + var currentTransform = graph.transform * Matrix4x4.Scale(new Vector3(graph.width, 1, graph.depth)); + Handles.matrix = currentTransform.matrix; + var zTest = Handles.zTest; + Handles.zTest = UnityEngine.Rendering.CompareFunction.LessEqual; + Handles.color = GizmoColorMin * new Color(1.0f, 1.0f, 1.0f, alpha); + Handles.DrawAAConvexPolygon(new Vector3[] { new Vector3(0, target.elevationRange.x, 0), new Vector3(1, target.elevationRange.x, 0), new Vector3(1, target.elevationRange.x, 1), new Vector3(0, target.elevationRange.x, 1) }); + Handles.color = GizmoColorMax * new Color(1.0f, 1.0f, 1.0f, alpha); + Handles.DrawAAConvexPolygon(new Vector3[] { new Vector3(0, target.elevationRange.y, 0), new Vector3(1, target.elevationRange.y, 0), new Vector3(1, target.elevationRange.y, 1), new Vector3(0, target.elevationRange.y, 1) }); + Handles.zTest = zTest; + Handles.matrix = Matrix4x4.identity; + + // Repaint the scene view until the alpha goes to zero + SceneView.RepaintAll(); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleElevationPenaltyEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleElevationPenaltyEditor.cs.meta new file mode 100644 index 0000000..4778db3 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleElevationPenaltyEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb9fce5dbc8cd4af78db90d7e4f661ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RulePerLayerModificationsEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RulePerLayerModificationsEditor.cs new file mode 100644 index 0000000..82fb808 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RulePerLayerModificationsEditor.cs @@ -0,0 +1,49 @@ +using UnityEditor; +using UnityEngine; +using System.Linq; +using Pathfinding.Graphs.Grid.Rules; + +namespace Pathfinding { + /// <summary>Editor for the <see cref="RulePerLayerModifications"/> rule</summary> + [CustomGridGraphRuleEditor(typeof(RulePerLayerModifications), "Per Layer Modifications")] + public class RulePerLayerModificationsEditor : IGridGraphRuleEditor { + public void OnInspectorGUI (GridGraph graph, GridGraphRule rule) { + var target = rule as RulePerLayerModifications; + + for (int i = 0; i < target.layerRules.Length; i++) { + GUILayout.BeginHorizontal(); + target.layerRules[i].layer = EditorGUILayout.LayerField((int)target.layerRules[i].layer); + target.layerRules[i].action = (RulePerLayerModifications.RuleAction)EditorGUILayout.EnumPopup(target.layerRules[i].action); + if (target.layerRules[i].action == RulePerLayerModifications.RuleAction.SetTag) { + target.layerRules[i].tag = Pathfinding.Util.EditorGUILayoutHelper.TagField(new GUIContent(""), target.layerRules[i].tag, AstarPathEditor.EditTags); + } else { + EditorGUILayout.LabelField(""); + } + if (GUILayout.Button("", AstarPathEditor.astarSkin.FindStyle("SimpleDeleteButton"))) { + var ls = target.layerRules.ToList(); + ls.RemoveAt(i); + target.layerRules = ls.ToArray(); + } + GUILayout.Space(5); + GUILayout.EndHorizontal(); + } + + GUILayout.BeginHorizontal(); + GUILayout.Space(32); + if (GUILayout.Button("Add per layer rule", GUILayout.MaxWidth(160))) { + var ls = target.layerRules.ToList(); + ls.Add(new RulePerLayerModifications.PerLayerRule()); + target.layerRules = ls.ToArray(); + } + GUILayout.EndHorizontal(); + + if (graph.collision.use2D) { + EditorGUILayout.HelpBox("This rule does not work with 2D physics, since it requires height testing information", MessageType.Error); + } else if (!graph.collision.heightCheck) { + EditorGUILayout.HelpBox("This rule requires height testing to be enabled on the grid graph", MessageType.Error); + } + } + + public void OnSceneGUI (GridGraph graph, GridGraphRule rule) { } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RulePerLayerModificationsEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RulePerLayerModificationsEditor.cs.meta new file mode 100644 index 0000000..bc4a0be --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RulePerLayerModificationsEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e94be22ba4fbd41daac01121acf6110a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleTextureEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleTextureEditor.cs new file mode 100644 index 0000000..3081eb7 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleTextureEditor.cs @@ -0,0 +1,143 @@ +using Pathfinding.Graphs.Grid.Rules; +using UnityEditor; +using UnityEngine; + +namespace Pathfinding { + /// <summary>Editor for the <see cref="RuleTexture"/> rule</summary> + [CustomGridGraphRuleEditor(typeof(RuleTexture), "Texture")] + public class RuleTextureEditor : IGridGraphRuleEditor { + protected static readonly string[] ChannelUseNames = { "None", "Penalty", "Height", "Walkability and Penalty", "Walkability" }; + + public void OnInspectorGUI (GridGraph graph, GridGraphRule rule) { + var target = rule as RuleTexture; + + target.texture = GraphEditor.ObjectField(new GUIContent("Texture"), target.texture, typeof(Texture2D), false, true) as Texture2D; + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Generate Reference")) { + SaveReferenceTexture(graph); + EditorUtility.DisplayDialog("Reference texture saved", "A texture has been saved in which every pixel corresponds to one node. The red channel represents if a node is walkable or not. The green channel represents the (normalized) Y coordinate of the nodes.", "Ok"); + } + GUILayout.EndHorizontal(); + + if (target.texture != null) { + string path = AssetDatabase.GetAssetPath(target.texture); + + if (path != "") { + var importer = AssetImporter.GetAtPath(path) as TextureImporter; + if (importer != null && !importer.isReadable) { + if (GraphEditor.FixLabel("Texture is not readable")) { + importer.isReadable = true; + EditorUtility.SetDirty(importer); + AssetDatabase.ImportAsset(path); + } + } + } + } + + target.scalingMode = (RuleTexture.ScalingMode)EditorGUILayout.EnumPopup("Scaling Mode", target.scalingMode); + if (target.scalingMode == RuleTexture.ScalingMode.FixedScale) { + EditorGUI.indentLevel++; + target.nodesPerPixel = EditorGUILayout.FloatField("Nodes Per Pixel", target.nodesPerPixel); + EditorGUI.indentLevel--; + } + + for (int i = 0; i < 4; i++) { + char channelName = "RGBA"[i]; + target.channels[i] = (RuleTexture.ChannelUse)EditorGUILayout.Popup("" + channelName, (int)target.channels[i], ChannelUseNames); + + if (target.channels[i] != RuleTexture.ChannelUse.None) { + EditorGUI.indentLevel++; + if (target.channels[i] != RuleTexture.ChannelUse.Walkable) { + target.channelScales[i] = EditorGUILayout.FloatField("Scale", target.channelScales[i]); + } + + string help = ""; + switch (target.channels[i]) { + case RuleTexture.ChannelUse.Penalty: + help = "Penalty goes from 0 to " + target.channelScales[i].ToString("0") + " depending on the " + channelName + " channel value"; + break; + case RuleTexture.ChannelUse.Position: + help = "Nodes will have their Y coordinate set to a value between 0 and " + target.channelScales[i].ToString("0") + " depending on the "+channelName+" channel"; + + if (graph.collision.heightCheck) { + EditorGUILayout.HelpBox("Height testing is enabled but the node positions will be overwritten by the texture data. You should disable either height testing or this feature.", MessageType.Error); + } + break; + case RuleTexture.ChannelUse.WalkablePenalty: + help = "If the "+channelName+" channel is 0, the node is made unwalkable. Otherwise the penalty goes from 0 to " + target.channelScales[i].ToString("0") + " depending on the " + channelName + " channel value"; + break; + case RuleTexture.ChannelUse.Walkable: + help = "If the "+channelName+" channel is 0, the node is made unwalkable."; + break; + } + + EditorGUILayout.HelpBox(help, MessageType.None); + + if ((target.channels[i] == RuleTexture.ChannelUse.Penalty || target.channels[i] == RuleTexture.ChannelUse.WalkablePenalty) && target.channelScales[i] < 0) { + EditorGUILayout.HelpBox("Negative penalties are not supported. You can instead raise the penalty of other nodes.", MessageType.Error); + } + + EditorGUI.indentLevel--; + } + } + } + + static void SaveReferenceTexture (GridGraph graph) { + if (graph.nodes == null || graph.nodes.Length != graph.width * graph.depth * graph.LayerCount) { + AstarPath.active.Scan(); + } + + if (graph.nodes.Length < graph.width * graph.depth) { + Debug.LogError("Couldn't create reference image since nodes.Length < width*depth"); + return; + } + + if (graph.nodes.Length == 0) { + Debug.LogError("Couldn't create reference image since the graph is too small (0*0)"); + return; + } + + if (graph.LayerCount > 1) { + Debug.LogWarning("Creating reference image for a layered grid graph. Only the first layer will be included in the image."); + } + + var tex = new Texture2D(graph.width, graph.depth); + + float maxY = float.NegativeInfinity; + for (int i = 0; i < graph.nodes.Length; i++) { + Vector3 p = graph.nodes[i] != null? graph.transform.InverseTransform((Vector3)graph.nodes[i].position) : Vector3.zero; + maxY = p.y > maxY ? p.y : maxY; + } + + var cols = new Color[graph.width*graph.depth]; + + for (int z = 0; z < graph.depth; z++) { + for (int x = 0; x < graph.width; x++) { + GraphNode node = graph.nodes[z*graph.width+x]; + if (node != null) { + float v = node.Walkable ? 1F : 0.0F; + Vector3 p = graph.transform.InverseTransform((Vector3)node.position); + float q = p.y / maxY; + cols[z*graph.width+x] = new Color(v, q, 0); + } else { + cols[z*graph.width+x] = new Color(0, 0, 0); + } + } + } + tex.SetPixels(cols); + tex.Apply(); + + string path = AssetDatabase.GenerateUniqueAssetPath("Assets/gridReference.png"); + System.IO.File.WriteAllBytes(path, tex.EncodeToPNG()); + + AssetDatabase.Refresh(); + Object obj = AssetDatabase.LoadAssetAtPath(path, typeof(Texture)); + + EditorGUIUtility.PingObject(obj); + } + + public void OnSceneGUI (GridGraph graph, GridGraphRule rule) { } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleTextureEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleTextureEditor.cs.meta new file mode 100644 index 0000000..3bd7887 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/RuleEditors/RuleTextureEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50639ba8f5afa4626889b9ef9d6e5ab4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/SeekerEditor.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/SeekerEditor.cs new file mode 100644 index 0000000..6bcfcc4 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/SeekerEditor.cs @@ -0,0 +1,142 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.Linq; + +namespace Pathfinding { + [CustomEditor(typeof(Seeker))] + [CanEditMultipleObjects] + public class SeekerEditor : EditorBase { + static bool tagPenaltiesOpen; + static List<Seeker> scripts = new List<Seeker>(); + + GUIContent[] exactnessLabels = new [] { new GUIContent("Node Center (Snap To Node)"), new GUIContent("Original"), new GUIContent("Interpolate (deprecated)"), new GUIContent("Closest On Node Surface"), new GUIContent("Node Connection") }; + + protected override void Inspector () { + base.Inspector(); + + scripts.Clear(); + foreach (var script in targets) scripts.Add(script as Seeker); + + Undo.RecordObjects(targets, "Modify settings on Seeker"); + + var startEndModifierProp = FindProperty("startEndModifier"); + startEndModifierProp.isExpanded = EditorGUILayout.Foldout(startEndModifierProp.isExpanded, startEndModifierProp.displayName); + if (startEndModifierProp.isExpanded) { + EditorGUI.indentLevel++; + Popup("startEndModifier.exactStartPoint", exactnessLabels, "Start Point Snapping"); + Popup("startEndModifier.exactEndPoint", exactnessLabels, "End Point Snapping"); + PropertyField("startEndModifier.addPoints", "Add Points"); + + if (FindProperty("startEndModifier.exactStartPoint").enumValueIndex == (int)StartEndModifier.Exactness.Original || FindProperty("startEndModifier.exactEndPoint").enumValueIndex == (int)StartEndModifier.Exactness.Original) { + if (PropertyField("startEndModifier.useRaycasting", "Physics Raycasting")) { + EditorGUI.indentLevel++; + PropertyField("startEndModifier.mask", "Layer Mask"); + EditorGUI.indentLevel--; + EditorGUILayout.HelpBox("Using raycasting to snap the start/end points has largely been superseded by the 'ClosestOnNode' snapping option. It is both faster and usually closer to what you want to achieve.", MessageType.Info); + } + + if (PropertyField("startEndModifier.useGraphRaycasting", "Graph Raycasting")) { + EditorGUILayout.HelpBox("Using raycasting to snap the start/end points has largely been superseded by the 'ClosestOnNode' snapping option. It is both faster and usually closer to what you want to achieve.", MessageType.Info); + } + } + + EditorGUI.indentLevel--; + } + + PropertyField("graphMask", "Traversable Graphs"); + + tagPenaltiesOpen = EditorGUILayout.Foldout(tagPenaltiesOpen, new GUIContent("Tags", "Settings for each tag")); + if (tagPenaltiesOpen) { + var traversableTags = scripts.Select(s => s.traversableTags).ToArray(); + EditorGUI.indentLevel++; + TagsEditor(FindProperty("tagPenalties"), traversableTags); + for (int i = 0; i < scripts.Count; i++) { + scripts[i].traversableTags = traversableTags[i]; + } + EditorGUI.indentLevel--; + } + + if (scripts.Count > 0 && scripts[0].traversalProvider != null) { + EditorGUILayout.HelpBox("A custom traversal provider has been set", MessageType.None); + } + + // Make sure we don't leak any memory + scripts.Clear(); + } + + public static void TagsEditor (SerializedProperty tagPenaltiesProp, int[] traversableTags) { + string[] tagNames = AstarPath.FindTagNames(); + if (tagNames.Length != 32) { + tagNames = new string[32]; + for (int i = 0; i < tagNames.Length; i++) tagNames[i] = "" + i; + } + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.BeginVertical(); + EditorGUILayout.LabelField("Tag", EditorStyles.boldLabel, GUILayout.MaxWidth(120)); + for (int i = 0; i < tagNames.Length; i++) { + EditorGUILayout.LabelField(tagNames[i], GUILayout.MaxWidth(120)); + } + + if (GUILayout.Button("Edit names", EditorStyles.miniButton)) { + AstarPathEditor.EditTags(); + } + EditorGUILayout.EndVertical(); + + // Prevent indent from affecting the other columns + var originalIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + +#if !ASTAR_NoTagPenalty + EditorGUILayout.BeginVertical(); + EditorGUILayout.LabelField("Penalty", EditorStyles.boldLabel, GUILayout.MaxWidth(100)); + var prop = tagPenaltiesProp; + if (prop.arraySize != 32) prop.arraySize = 32; + for (int i = 0; i < tagNames.Length; i++) { + var element = prop.GetArrayElementAtIndex(i); + EditorGUILayout.PropertyField(element, GUIContent.none, false, GUILayout.MinWidth(100)); + // Penalties should not be negative + if (!element.hasMultipleDifferentValues && element.intValue < 0) element.intValue = 0; + } + if (GUILayout.Button("Reset all", EditorStyles.miniButton)) { + for (int i = 0; i < tagNames.Length; i++) { + prop.GetArrayElementAtIndex(i).intValue = 0; + } + } + EditorGUILayout.EndVertical(); +#endif + + EditorGUILayout.BeginVertical(GUILayout.MaxWidth(100)); + EditorGUILayout.LabelField("Traversable", EditorStyles.boldLabel, GUILayout.MaxWidth(100)); + for (int i = 0; i < tagNames.Length; i++) { + var anyFalse = false; + var anyTrue = false; + for (int j = 0; j < traversableTags.Length; j++) { + var prevTraversable = ((traversableTags[j] >> i) & 0x1) != 0; + anyTrue |= prevTraversable; + anyFalse |= !prevTraversable; + } + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = anyTrue & anyFalse; + var newTraversable = EditorGUILayout.Toggle(anyTrue); + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) { + for (int j = 0; j < traversableTags.Length; j++) { + traversableTags[j] = (traversableTags[j] & ~(1 << i)) | ((newTraversable ? 1 : 0) << i); + } + } + } + + if (GUILayout.Button("Set all/none", EditorStyles.miniButton)) { + for (int j = traversableTags.Length - 1; j >= 0; j--) { + traversableTags[j] = (traversableTags[0] & 0x1) == 0 ? -1 : 0; + } + } + EditorGUILayout.EndVertical(); + + EditorGUILayout.EndHorizontal(); + EditorGUI.indentLevel = originalIndent; + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/SeekerEditor.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/SeekerEditor.cs.meta new file mode 100644 index 0000000..4d38d9c --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/SeekerEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 95febb4c5ed8c46939368f03ecf4b3b0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI.meta new file mode 100644 index 0000000..c01b6c6 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3dc0946757e6754459cc262a46ce7891 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.cs new file mode 100644 index 0000000..424dad2 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.cs @@ -0,0 +1,200 @@ +using System; +using System.Linq; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEditor.Compilation; +using UnityEditor.Scripting.ScriptCompilation; + +namespace Pathfinding { + internal class WelcomeScreen : UnityEditor.EditorWindow { + [SerializeField] + private VisualTreeAsset m_VisualTreeAsset = default; + + public bool isImportingSamples; + private bool askedAboutQuitting; + + [InitializeOnLoadMethod] + public static void TryCreate () { + if (!PathfindingEditorSettings.instance.hasShownWelcomeScreen) { + // Wait a bit before showing the window to avoid stuttering + // as all the other windows in Unity load. + // This makes the animation smoother. + var delay = 0.5f; + var t0 = Time.realtimeSinceStartup; + EditorApplication.CallbackFunction create = null; + create = () => { + if (Time.realtimeSinceStartup - t0 > delay) { + EditorApplication.update -= create; + PathfindingEditorSettings.instance.hasShownWelcomeScreen = true; + PathfindingEditorSettings.instance.Save(); + Create(); + } + }; + EditorApplication.update += create; + } + } + + public static void Create () { + var window = GetWindow<WelcomeScreen>( + true, + "A* Pathfinding Project", + true + ); + window.minSize = window.maxSize = new Vector2(400, 400*1.618f); + window.ShowUtility(); + } + + + public void CreateGUI () { + VisualElement root = rootVisualElement; + + VisualElement labelFromUXML = m_VisualTreeAsset.Instantiate(); + root.Add(labelFromUXML); + + var sampleButton = root.Query<Button>("importSamples").First(); + var samplesImportedIndicator = root.Query("samplesImported").First(); + samplesImportedIndicator.visible = GetSamples(out var sample) && sample.isImported; + + sampleButton.clicked += ImportSamples; + root.Query<Button>("documentation").First().clicked += OpenDocumentation; + root.Query<Button>("getStarted").First().clicked += OpenGetStarted; + root.Query<Button>("changelog").First().clicked += OpenChangelog; + root.Query<Label>("version").First().text = "Version " + AstarPath.Version.ToString(); + AnimateLogo(root.Query("logo").First()); + } + + static string FirstSceneToLoad = "Recast3D"; + + public void OnEnable () { + if (isImportingSamples) { + // This will be after the domain reload that happened after the samples were imported + OnPostImportedSamples(); + } + } + + public void OnPostImportedSamples () { + isImportingSamples = false; + // Load the example scene + var sample = UnityEditor.PackageManager.UI.Sample.FindByPackage("com.arongranberg.astar", "").First(); + if (sample.isImported) { + var relativePath = "Assets/" + System.IO.Path.GetRelativePath(Application.dataPath, sample.importPath); + Debug.Log(relativePath); + var scenes = AssetDatabase.FindAssets("t:scene", new string[] { relativePath }); + string bestScene = null; + for (int i = 0; i < scenes.Length; i++) { + scenes[i] = AssetDatabase.GUIDToAssetPath(scenes[i]); + if (scenes[i].Contains(FirstSceneToLoad)) { + bestScene = scenes[i]; + } + } + if (bestScene == null) bestScene = scenes.FirstOrDefault(); + if (bestScene != null) { + if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { + EditorSceneManager.OpenScene(bestScene); + } + } + } + } + + void AnimateLogo (VisualElement logo) { + var t0 = Time.realtimeSinceStartup; + EditorApplication.CallbackFunction introAnimation = null; + int ticks = 0; + introAnimation = () => { + var t = Time.realtimeSinceStartup - t0; + if (ticks == 1) { + logo.RemoveFromClassList("largeIconEntry"); + } + Repaint(); + ticks++; + if (ticks > 1 && t > 5) { + EditorApplication.update -= introAnimation; + } + }; + EditorApplication.update += introAnimation; + } + + bool GetSamples (out UnityEditor.PackageManager.UI.Sample sample) { + sample = default; + + var samples = UnityEditor.PackageManager.UI.Sample.FindByPackage("com.arongranberg.astar", ""); + if (samples == null) { + return false; + } + var samplesArr = samples.ToArray(); + if (samplesArr.Length != 1) { + Debug.LogError("Expected exactly 1 sample. Found " + samplesArr.Length + ". This should not happen"); + return false; + } + + sample = samplesArr[0]; + return true; + } + + private void ImportSamples () { + if (!GetSamples(out var sample)) { + Debug.LogError("The A* Pathfinding Project is not installed via the Unity package manager. Cannot import samples."); + return; + } + + if (sample.isImported) { + // Show dialog box + if (!EditorUtility.DisplayDialog("Import samples", "Samples are already imported. Do you want to reimport them?", "Reimport", "Cancel")) { + return; + } + } + + isImportingSamples = true; + + CompilationPipeline.assemblyCompilationFinished += OnAssemblyCompilationFinished; + + if (!sample.Import(UnityEditor.PackageManager.UI.Sample.ImportOptions.OverridePreviousImports)) { + Debug.LogError("Failed to import samples"); + return; + } + + OnPostImportedSamples(); + } + + void OnAssemblyCompilationFinished (string assembly, CompilerMessage[] message) { + for (int i = 0; i < message.Length; i++) { + // E.g. + // error CS0006: Metadata file 'Assets/AstarPathfindingProject/Plugins/Clipper/Pathfinding.ClipperLib.dll' could not be found + // error CS0006: Metadata file 'Assets/AstarPathfindingProject/Plugins/DotNetZip/Pathfinding.Ionic.Zip.Reduced.dll' could not be found + // error CS0006: Metadata file 'Assets/AstarPathfindingProject/Plugins/Poly2Tri/Pathfinding.Poly2Tri.dll' could not be found + // I believe this can happen if the user previously has had the package imported into the Assets folder (e.g. version 4), + // and then it is imported via the package manager, and the samples imported. + // Unity seems to miss that the dll files now have new locations, and gets confused. + if (message[i].type == CompilerMessageType.Error && message[i].message.Contains("CS0006")) { + Debug.LogError("Compilation failed due to a Unity bug. Asking user to restart Unity."); + + if (!askedAboutQuitting) { + if (EditorUtility.DisplayDialog("Restart Unity", "Your version of Unity has a bug that, unfortunately, requires the editor to be restarted, after importing the samples.", "Quit Unity", "Cancel")) { + askedAboutQuitting = true; + EditorApplication.update += () => { + if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { + EditorApplication.Exit(0); + } + }; + } + } + } + } + } + + private void OpenDocumentation () { + Application.OpenURL(AstarUpdateChecker.GetURL("documentation")); + } + + private void OpenGetStarted () { + Application.OpenURL(AstarUpdateChecker.GetURL("documentation") + "getstarted.html"); + } + + private void OpenChangelog () { + Application.OpenURL(AstarUpdateChecker.GetURL("changelog")); + } + } +} diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.cs.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.cs.meta new file mode 100644 index 0000000..c0772ae --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 826fe48313dac354bb9b4be850c8845e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - m_ViewDataDictionary: {instanceID: 0} + - m_VisualTreeAsset: {fileID: 9197481963319205126, guid: f270bacb724b66246a7f31e2a8e71fe1, + type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.uxml b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.uxml new file mode 100644 index 0000000..1fcfe9e --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.uxml @@ -0,0 +1,29 @@ +<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="False"> + <Style src="project://database/Assets/AstarPathfindingProject/Editor/AstarPathfindingProjectEditor.uss?fileID=7433441132597879392&guid=f1e4e8798274ca7448321794e89178b9&type=3#AstarPathfindingProjectEditor" /> + <ui:VisualElement name="VisualElement" class="welcomeWindow"> + <ui:VisualElement name="logo" class="largeIcon largeIconEntry" /> + <ui:Label text="<b>Welcome to the A* Pathfinding Project!</b> Here are some things to help you get started." style="color: rgb(255, 255, 255); -unity-text-align: upper-center; font-size: 16px; -unity-font-style: normal; margin-bottom: 30px; -unity-paragraph-spacing: 32px;" /> + <ui:Button name="importSamples" enable-rich-text="true" emoji-fallback-support="true" class="welcomeButton" style="flex-direction: row; align-items: center; justify-content: flex-end; padding-left: 10px;"> + <ui:VisualElement class="buttonIcon samples" /> + <ui:Label text="Import Examples" emoji-fallback-support="false" class="blah" /> + <ui:VisualElement style="flex-grow: 1;" /> + <ui:VisualElement name="samplesImported" class="buttonIconRight" /> + </ui:Button> + <ui:Button name="getStarted" enable-rich-text="true" emoji-fallback-support="true" class="welcomeButton" style="flex-direction: row; align-items: center; justify-content: flex-end; padding-left: 10px;"> + <ui:VisualElement class="buttonIcon education" /> + <ui:Label text="Get Started Guide" emoji-fallback-support="false" class="blah" /> + <ui:VisualElement style="flex-grow: 1;" /> + </ui:Button> + <ui:Button name="changelog" enable-rich-text="true" emoji-fallback-support="true" class="welcomeButton" style="flex-direction: row; align-items: center; justify-content: flex-end; padding-left: 10px;"> + <ui:VisualElement class="buttonIcon changelog" /> + <ui:Label text="Changelog" emoji-fallback-support="false" class="blah" /> + <ui:VisualElement style="flex-grow: 1;" /> + </ui:Button> + <ui:Button name="documentation" enable-rich-text="true" emoji-fallback-support="true" class="welcomeButton" style="flex-direction: row; align-items: center; justify-content: flex-end; padding-left: 10px;"> + <ui:VisualElement class="buttonIcon documentation" /> + <ui:Label text="Documentation" emoji-fallback-support="false" class="blah" /> + <ui:VisualElement style="flex-grow: 1;" /> + </ui:Button> + <ui:Label text="Version X.Y.Z" name="version" style="margin-top: auto; margin-bottom: 10px; color: rgb(103, 103, 103);" /> + </ui:VisualElement> +</ui:UXML> diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.uxml.meta b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.uxml.meta new file mode 100644 index 0000000..7fb0e1a --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Editor/UI/WelcomeScreen.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f270bacb724b66246a7f31e2a8e71fe1 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} |