first commit
@@ -0,0 +1,22 @@
|
||||
# About NavMesh agents
|
||||
|
||||
The NavMesh agent is a [GameObject][1] that is represented by an upright cylinder whose size is specified by the Radius and Height properties. The cylinder moves with the GameObject, but remains upright even if the GameObject rotates. The shape of the cylinder is used to detect and respond to collisions with other agents and obstacles. When the anchor point of the GameObject is not at the base of the cylinder, use the Base Offset property to specify the height difference.
|
||||
|
||||

|
||||
|
||||
The height and radius of the cylinder are specified in the [Navigation window](./NavigationWindow.md) and the [NavMesh Agent component](./NavMeshAgent.md) properties of the individual agents.
|
||||
|
||||
- **Navigation window settings** describe how all the NavMesh Agents collide and avoid static world geometry. To keep memory on budget and CPU load at a reasonable level, you can only specify one size in the bake settings.
|
||||
- **NavMesh Agent component properties** values describe how the agent collides with moving obstacles and other agents.
|
||||
|
||||
Typically you set the size of the agent with the same values in both places. However, you might, give a heavy soldier a larger radius, so that other agents leave more space around your soldier. Otherwise, your soldier avoids the environment in the same manner as the other agents.
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Create a NavMesh Agent](./CreateNavMeshAgent.md)
|
||||
- [NavMesh Agent component reference](./NavMeshAgent.md)
|
||||
- [NavMesh Agent scripting reference](ScriptRef:AI.NavMeshAgent)
|
||||
- [Navigation Agent Types](./NavigationWindow.md#agents-tab)
|
||||
- [Build a HeightMesh for Accurate Character Placement](./HeightMesh.md)
|
||||
|
||||
[1]: ./Glossary.md#gameobject "The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more."
|
||||
@@ -0,0 +1,48 @@
|
||||
# About NavMesh Obstacles
|
||||
|
||||

|
||||
|
||||
NavMesh Obstacles can affect the NavMesh Agent’s navigation during the game in two ways:
|
||||
|
||||
## Obstructing
|
||||
|
||||
When **Carve** is not enabled, the default behavior of the NavMesh Obstacle is similar to that of a [**Collider**][1]. NavMesh Agents try to avoid [**collisions**][2] with the NavMesh Obstacle, and when close, they collide with the NavMesh Obstacle. Obstacle avoidance behavior is very basic, and has a short radius. As such, the NavMesh Agent might not be able to find its way around in an environment cluttered with NavMesh Obstacles. This mode is best used in cases where the obstacle is constantly moving (for example, a vehicle or player character).
|
||||
|
||||
## Carving
|
||||
|
||||
When **Carve** is enabled, the obstacle carves a hole in the NavMesh when stationary. When moving, the obstacle is an obstruction. When a hole is carved into the NavMesh, the pathfinder is able to navigate the NavMesh Agent around locations cluttered with obstacles, or find another route if the current path gets blocked by an obstacle. It’s good practice to turn on carving for NavMesh Obstacles that generally block navigation but can be moved by the player or other game events like explosions (for example, crates or barrels).
|
||||
|
||||

|
||||
|
||||
## Logic for moving NavMesh Obstacles
|
||||
|
||||
Unity treats the NavMesh Obstacle as moving when it has moved more than the distance set by the **Carve** > **Move Threshold**. When the NavMesh Obstacle moves, the carved hole also moves. However, to reduce CPU overhead, the hole is only recalculated when necessary. The result of this calculation is available in the next frame update. The recalculation logic has two options:
|
||||
|
||||
- Only carve when the NavMesh Obstacle is stationary
|
||||
|
||||
- Carve when the NavMesh Obstacle has moved
|
||||
|
||||
### Only carve when the NavMesh Obstacle is stationary
|
||||
|
||||
This is the default behavior. To enable it, tick the NavMesh Obstacle component’s **Carve Only Stationary** checkbox. In this mode, when the NavMesh Obstacle moves, the carved hole is removed. When the NavMesh Obstacle has stopped moving and has been stationary for more than the time set by **Carving Time To Stationary**, it is treated as stationary and the carved hole is updated again. While the NavMesh Obstacle is moving, the NavMesh Agents avoid it using collision avoidance, but don’t plan paths around it.
|
||||
|
||||
**Carve Only Stationary** is generally the best choice in terms of performance, and is a good match when the [**GameObject**][3] associated with the NavMesh Obstacle is controlled by physics.
|
||||
|
||||
### Carve when the NavMesh Obstacle has moved
|
||||
|
||||
To enable this mode, clear the NavMesh Obstacle component’s **Carve Only Stationary** checkbox. When this is cleared, the carved hole is updated when the obstacle has moved more than the distance set by **Carving Move Threshold**. This mode is useful for large, slowly moving obstacles (for example, a tank that is being avoided by infantry).
|
||||
|
||||
> [!Note]
|
||||
> When using NavMesh query methods, you should take into account that there is a one-frame delay between changing a NavMesh Obstacle and the effect that change has on the NavMesh.
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- [Create a NavMesh Obstacle](./CreateNavMeshObstacle.md "Guidance on creating NavMesh Obstacles.")
|
||||
- [Inner Workings of the Navigation System](./NavInnerWorkings.md#two-cases-for-obstacles "Learn more about how NavMesh Obstacles are used as part of navigation.")
|
||||
- [NavMesh Obstacle scripting reference](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshObstacle.html "Full description of the NavMesh Obstacle scripting API.")
|
||||
|
||||
[1]: ./Glossary.md#colliders "An invisible shape that is used to handle physical collisions for an object. A collider doesn’t need to be exactly the same shape as the object’s mesh - a rough approximation is often more efficient and indistinguishable in gameplay."
|
||||
|
||||
[2]: ./Glossary.md#collision "A collision occurs when the physics engine detects that the colliders of two GameObjects make contact or overlap, and at least one has a Rigidbody component and is in motion."
|
||||
|
||||
[3]: ./Glossary.md#GameObject "The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more."
|
||||
@@ -0,0 +1,68 @@
|
||||
# Navigation Areas and Costs
|
||||
|
||||
The **Navigation Area** defines how difficult it is to walk across a specific area. This is important for finding the path with the lowest total cost. In addition, each [NavMesh Agent](./NavMeshAgent.md) has an **Area Mask** which you can use to specify which areas the agent can move on.
|
||||
|
||||

|
||||
|
||||
In the example above the area types are used for two common use cases:
|
||||
|
||||
- The **Water** area is made more costly to walk through by assigning it a higher cost, to deal with a scenario where walking in shallow water is slower.
|
||||
- The **Door** area is made accessible to specific characters, to create a scenario where humans can walk through doors, but zombies cannot.
|
||||
|
||||
You can assign the area type to every object that is included in the [**NavMesh**][1] baking. In addition, each **NavMesh Link** has a property to specify the area type.
|
||||
|
||||
## Pathfinding Cost
|
||||
|
||||
In a nutshell, the cost allows you to control which areas the pathfinder favors when finding a path. For example, if you set the cost of an area to 3.0, traveling across that area is considered to be three times longer than alternative routes.
|
||||
|
||||
To fully understand how the cost works, let’s take a look at how the pathfinder works.
|
||||
|
||||

|
||||
|
||||
Nodes and links visited during pathfinding.
|
||||
|
||||
Unity uses A\* to calculate the shortest path on the NavMesh. A\* works on a graph of connected nodes. The algorithm starts from the nearest node to the path start and visits the connect nodes until the destination is reached.
|
||||
|
||||
Since the Unity navigation representation is a [**mesh**][2] of polygons, the first thing the pathfinder needs to do is to place a point on each polygon, which is the location of the node. The shortest path is then calculated between these nodes.
|
||||
|
||||
The yellow dots and lines in the above picture shows how the nodes and links are placed on the NavMesh, and in which order they are traversed during the A\*.
|
||||
|
||||
The cost to move between two nodes depends on the distance to travel and the cost associated with the area type of the polygon under the link, that is, _distance \* cost_. In practice this means, that if the cost of an area is 2.0, the distance across such polygon will appear to be twice as long. The A\* algorithm requires that all costs must be larger than 1.0.
|
||||
|
||||
The effect of the costs on the resulting path can be hard to tune, especially for longer paths. The best way to approach costs is to treat them as hints. For example, if you want the agents to not use **NavMesh Links** too often, you could increase their cost. But it can be challenging to tune a behavior where the agents prefer to walk on sidewalks.
|
||||
|
||||
Another thing you may notice on some levels is that the pathfinder does not always choose the shortest path. The reason for this is the node placement. The effect can be noticeable in scenarios where big open areas are next to tiny obstacles, which results in a navigation mesh with very big and small polygons. In such cases the nodes on the big polygons may get placed anywhere in the big polygon and from the pathfinder’s point of view it looks like a detour.
|
||||
|
||||
The _cost_ per _area type_ can be set globally in the _Areas_ tab, or you can override them per agent using a script.
|
||||
|
||||
## Area Types
|
||||
|
||||

|
||||
|
||||
The area types are specified in the _Navigation Window_’s _Areas_ tab. There are 29 custom types, and 3 built-in types: _Walkable_, _Not Walkable_, and _Jump_.
|
||||
|
||||
- **Walkable** is a generic area type which specifies that the area can be walked on.
|
||||
- **Not Walkable** is a generic area type which prevents navigation. It is useful for cases where you want to mark certain object to be an obstacle, but without getting NavMesh on top of it.
|
||||
- **Jump** is an area type that is assigned to all auto-generated **NavMesh Links**.
|
||||
|
||||
If several objects of different area types are overlapping, the resulting NavMesh area type will generally be the one with the highest index. There is one exception however: _Not Walkable_ always takes precedence. Which can be helpful if you need to block out an area.
|
||||
|
||||
## Area Mask
|
||||
|
||||

|
||||
|
||||
Each agent has an _Area Mask_ which describes which areas it can use when navigating. The area mask can be set in the agent properties, or the bitmask can be manipulated using a script at runtime.
|
||||
|
||||
The area mask is useful when you want only certain types characters to be able to walk through an area. For example, in a zombie evasion game, you could mark the area under each door with a _Door_ area type, and uncheck the Door area from the zombie character’s Area Mask.
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Create a NavMesh](./CreateNavMesh.md "Workflow to create a NavMesh.")
|
||||
- [NavMesh Modifier component reference](./NavMeshModifier.md "Use for affecting the NavMesh generation of NavMesh area types based on the transform hierarchy.")
|
||||
- [NavMesh Modifier Volume component reference](./NavMeshModifierVolume.md "Use for affecting the NavMesh generation of NavMesh area types based on volume.")
|
||||
- [NavMeshAgent.areaMask scripting reference](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent-areaMask.html "Script API to set which area types an agent can use for movement.")
|
||||
- [NavMeshAgent.SetAreaCost() scripting reference](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent.SetAreaCost.html "Script API to set what cost an agent considers for each area type.")
|
||||
|
||||
[1]: ./Glossary.md#NavMesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[2]: ./Glossary.md#Mesh "The main graphics primitive of Unity. Meshes make up a large part of your 3D worlds. Unity supports triangulated or Quadrangulated polygon meshes. Nurbs, Nurms, Subdiv surfaces must be converted to polygons."
|
||||
@@ -0,0 +1,259 @@
|
||||
# Couple Animation and Navigation
|
||||
|
||||
The goal of this document is to guide you to setup navigating humanoid characters to move using the navigation system.
|
||||
|
||||
We’ll be using Unity’s built-in systems for animation and navigation along with custom scripting to achieve this.
|
||||
|
||||
It’s assumed you’re familiar with the basics of Unity and the Mecanim animation system.
|
||||
|
||||
An example project is available — so you don’t have to add [**scripts**][1] or set up animations and animation controller from scratch:
|
||||
|
||||
- [NavigationAnimation\_53.zip](https://docs.unity3d.com/2021.3/Documentation/uploads/Examples/NavigationAnimation_53.zip) _Works with Unity 5.3+_
|
||||
|
||||
## Creating the Animation Controller
|
||||
|
||||
To get a responsive and versatile animation controller — covering a wide range of movements — we need a set of animations moving in different directions. This is sometimes referred to as a strafe-set.
|
||||
|
||||
In addition to the move animations we need an animation for the standing character.
|
||||
|
||||
We proceed by arranging the strafe-set in a 2D blend tree — choose blend type: **2D Simple Directional** and place animations using **Compute Positions > Velocity XZ**
|
||||
|
||||
For blending control we add two float parameters **velx** and **vely**, and assign them to the blend tree.
|
||||
|
||||
Here we’ll be placing 7 run animations — each with a different velocity. In addition to the forwards (+ left/right) and backwards (+ left/right) we also use an [**animation clip**][2] for running on the spot. The latter is highlighted in the center of the 2D blend map below. The reason for having an animation running on the spot is two-fold, firstly it preserves the style of running when blended with the other animations. Secondly the animation prevents foot-sliding when blending.
|
||||
|
||||

|
||||
|
||||
Then we add the idle animation clip in it’s own node (**Idle**). We now have two discrete animation states that we couple with 2 transitions.
|
||||
|
||||

|
||||
|
||||
To control the switch between the moving and idle states we add a boolean control parameter **move**. Then disable the **Has Exit Time** property on the transitions. This allows the transition to trigger at any time during the animation. Transition time should be set to around 0.10 second to get a responsive transition.
|
||||
|
||||

|
||||
|
||||
Now place the new created animation controller on the character you want to move.
|
||||
|
||||
Press play and select the character in the **Hierarchy window**. You can now manually control the animation values in the [**Animator window**][3] and change the move state and velocity.
|
||||
|
||||
The next step is to create other means of controlling the [**animation parameters**][4].
|
||||
|
||||
## Navigation Control
|
||||
|
||||
Place a **NavMeshAgent** component on the character and adjust the radius, height and to match the character - additionally change the speed property to match the maximum speed in the [**animation blend tree**][5].
|
||||
|
||||
Create a [**NavMesh**][5] for the [**Scene**][6] you’ve placed the character in.
|
||||
|
||||
Next we need to tell the character where to navigate to. This typically is very specific to the application. Here we choose a click to move behavior — the character moved to the point in the world where the user has clicked on the screen.
|
||||
|
||||
``` C#
|
||||
// ClickToMove.cs
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
|
||||
[RequireComponent (typeof (NavMeshAgent))]
|
||||
public class ClickToMove : MonoBehaviour {
|
||||
RaycastHit hitInfo = new RaycastHit();
|
||||
NavMeshAgent agent;
|
||||
|
||||
void Start () {
|
||||
agent = GetComponent<NavMeshAgent> ();
|
||||
}
|
||||
void Update () {
|
||||
if(Input.GetMouseButtonDown(0)) {
|
||||
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
||||
if (Physics.Raycast(ray.origin, ray.direction, out hitInfo))
|
||||
agent.destination = hitInfo.point;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Pressing play now — and clicking around in the scene — you’ll see the character move around in the scene. However — the animations don’t match the movement at all. We need to communicate the state and velocity of the agent to the animation controller.
|
||||
|
||||
To transfer the velocity and state info from the agent to the animation controller we will add another script.
|
||||
|
||||
``` C#
|
||||
// LocomotionSimpleAgent.cs
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
|
||||
[RequireComponent (typeof (NavMeshAgent))]
|
||||
[RequireComponent (typeof (Animator))]
|
||||
public class LocomotionSimpleAgent : MonoBehaviour {
|
||||
Animator anim;
|
||||
NavMeshAgent agent;
|
||||
Vector2 smoothDeltaPosition = Vector2.zero;
|
||||
Vector2 velocity = Vector2.zero;
|
||||
|
||||
void Start ()
|
||||
{
|
||||
anim = GetComponent<Animator> ();
|
||||
agent = GetComponent<NavMeshAgent> ();
|
||||
// Don’t update position automatically
|
||||
agent.updatePosition = false;
|
||||
}
|
||||
|
||||
void Update ()
|
||||
{
|
||||
Vector3 worldDeltaPosition = agent.nextPosition - transform.position;
|
||||
|
||||
// Map 'worldDeltaPosition' to local space
|
||||
float dx = Vector3.Dot (transform.right, worldDeltaPosition);
|
||||
float dy = Vector3.Dot (transform.forward, worldDeltaPosition);
|
||||
Vector2 deltaPosition = new Vector2 (dx, dy);
|
||||
|
||||
// Low-pass filter the deltaMove
|
||||
float smooth = Mathf.Min(1.0f, Time.deltaTime/0.15f);
|
||||
smoothDeltaPosition = Vector2.Lerp (smoothDeltaPosition, deltaPosition, smooth);
|
||||
|
||||
// Update velocity if time advances
|
||||
if (Time.deltaTime > 1e-5f)
|
||||
velocity = smoothDeltaPosition / Time.deltaTime;
|
||||
|
||||
bool shouldMove = velocity.magnitude > 0.5f && agent.remainingDistance > agent.radius;
|
||||
|
||||
// Update animation parameters
|
||||
anim.SetBool("move", shouldMove);
|
||||
anim.SetFloat ("velx", velocity.x);
|
||||
anim.SetFloat ("vely", velocity.y);
|
||||
|
||||
GetComponent<LookAt>().lookAtTargetPosition = agent.steeringTarget + transform.forward;
|
||||
}
|
||||
|
||||
void OnAnimatorMove ()
|
||||
{
|
||||
// Update position to agent position
|
||||
transform.position = agent.nextPosition;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This script deserves a little explanation. It’s placed on the character — which has an **Animator** and a **NavMeshAgent** component attached — as well as the click to move script above.
|
||||
|
||||
First the script tells the agent not to update the character position automatically. We handle the position update that last in the script. The orientation is updated by the agent.
|
||||
|
||||
The animation blend is controlled by reading the agent velocity. It is transformed into a relative velocity (based on character orientation) — and then smoothed. The transformed horizontal velocity components are then passed to the **Animator** and additionally the state switching between idle and moving is controlled by the speed (i.e. velocity magnitude).
|
||||
|
||||
In the `OnAnimatorMove()` callback we update the position of the character to match the **NavMeshAgent**.
|
||||
|
||||
Playing the scene again gives show that animation matches the movement to as close as possible.
|
||||
|
||||
## Improving the Quality of the Navigating Character
|
||||
|
||||
To improve the quality of the animated and navigating character we will explore a couple of options.
|
||||
|
||||
### Looking
|
||||
|
||||
Having the character to look and turn towards points of interest is important to convey attention and anticipation. We’ll use the animation systems `LookAt` API. This calls for another script.
|
||||
|
||||
``` C#
|
||||
// LookAt.cs
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
[RequireComponent (typeof (Animator))]
|
||||
public class LookAt : MonoBehaviour {
|
||||
public Transform head = null;
|
||||
public Vector3 lookAtTargetPosition;
|
||||
public float lookAtCoolTime = 0.2f;
|
||||
public float lookAtHeatTime = 0.2f;
|
||||
public bool looking = true;
|
||||
|
||||
private Vector3 lookAtPosition;
|
||||
private Animator animator;
|
||||
private float lookAtWeight = 0.0f;
|
||||
|
||||
void Start ()
|
||||
{
|
||||
if (!head)
|
||||
{
|
||||
Debug.LogError("No head transform - LookAt disabled");
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
animator = GetComponent<Animator> ();
|
||||
lookAtTargetPosition = head.position + transform.forward;
|
||||
lookAtPosition = lookAtTargetPosition;
|
||||
}
|
||||
|
||||
void OnAnimatorIK ()
|
||||
{
|
||||
lookAtTargetPosition.y = head.position.y;
|
||||
float lookAtTargetWeight = looking ? 1.0f : 0.0f;
|
||||
|
||||
Vector3 curDir = lookAtPosition - head.position;
|
||||
Vector3 futDir = lookAtTargetPosition - head.position;
|
||||
|
||||
curDir = Vector3.RotateTowards(curDir, futDir, 6.28f * Time.deltaTime, float.PositiveInfinity);
|
||||
lookAtPosition = head.position + curDir;
|
||||
|
||||
float blendTime = lookAtTargetWeight > lookAtWeight ? lookAtHeatTime : lookAtCoolTime;
|
||||
lookAtWeight = Mathf.MoveTowards (lookAtWeight, lookAtTargetWeight, Time.deltaTime / blendTime);
|
||||
animator.SetLookAtWeight (lookAtWeight, 0.2f, 0.5f, 0.7f, 0.5f);
|
||||
animator.SetLookAtPosition (lookAtPosition);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Add the script to the character and assign the head property to the head transform in your characters transform hierarchy. The LookAt script has no notion of navigation control — so to control where to look we go back to the **LocomotionSimpleAgent.cs** script and add a couple of lines to control the looking. Add the end of `Update()` add:
|
||||
|
||||
``` C#
|
||||
LookAt lookAt = GetComponent<LookAt> ();
|
||||
if (lookAt)
|
||||
lookAt.lookAtTargetPosition = agent.steeringTarget + transform.forward;
|
||||
```
|
||||
|
||||
This will tell the **LookAt** script to set the point of interest to approximately the next corner along the path or — if no corners — to the end of the path.
|
||||
|
||||
Try it out.
|
||||
|
||||
### Animation Driven Character using Navigation
|
||||
|
||||
The character has so far been controlled completely by the position dictated by the agent. This ensures that the avoidance of other characters and obstacles translates directly to the character position. However it may lead to foot-sliding if the animation doesn’t cover the proposed velocity. Here we’ll relax the constraint of the character a bit. Basically we’ll be trading the avoidance quality for animation quality.
|
||||
|
||||
Replace the `OnAnimatorMove()` callback on the **LocomotionSimpleAgent.cs** script replace the line with the following
|
||||
|
||||
``` C#
|
||||
void OnAnimatorMove ()
|
||||
{
|
||||
// Update position based on animation movement using navigation surface height
|
||||
Vector3 position = anim.rootPosition;
|
||||
position.y = agent.nextPosition.y;
|
||||
transform.position = position;
|
||||
}
|
||||
```
|
||||
|
||||
When trying this out you may notice the that character can now drift away from the agent position (green wireframe cylinder) . You may need to limit that character animation drift. This can be done either by pulling the agent towards the character — or pull the character towards the agent position. Add the following at the end of the `Update()` method on the script **LocomotionSimpleAgent.cs**.
|
||||
|
||||
``` C#
|
||||
// Pull character towards agent
|
||||
if (worldDeltaPosition.magnitude > agent.radius)
|
||||
transform.position = agent.nextPosition - 0.9f * worldDeltaPosition;
|
||||
```
|
||||
|
||||
Or — if you want the agent to follow the character.
|
||||
|
||||
``` C#
|
||||
// Pull agent towards character
|
||||
if (worldDeltaPosition.magnitude > agent.radius)
|
||||
agent.nextPosition = transform.position + 0.9f * worldDeltaPosition;
|
||||
```
|
||||
|
||||
What works best very much depends on the specific use-case.
|
||||
|
||||
## Conclusion
|
||||
|
||||
We have set up a character that moves using the navigation system and animates accordingly. Tweaking the numbers of blend time, look-at weights etc. can improve the looks — and is a good way to further explore this setup.
|
||||
|
||||
[1]: ./Glossary.md#scripts "A piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like."
|
||||
|
||||
[2]: ./Glossary.md#animation-clip 'Animation data that can be used for animated characters or simple animations. It is a simple “unit” piece of motion, such as (one specific instance of) “Idle”, “Walk” or “Run”.'
|
||||
|
||||
[3]: ./Glossary.md#animator-window "The window where the Animator Controller is visualized and edited."
|
||||
|
||||
[4]: ./Glossary.md#animation-parameters "Used to communicate between scripting and the Animator Controller. Some parameters can be set in scripting and used by the controller, while other parameters are based on Custom Curves in Animation Clips and can be sampled using the scripting API."
|
||||
|
||||
[5]: ./Glossary.md#navmesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[6]: ./Glossary.md#scene "A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces."
|
||||
@@ -0,0 +1,28 @@
|
||||
# Create a NavMesh
|
||||
|
||||
You need to create a [**NavMesh**][1] to define an area of your scene within which a character can navigate intelligently.
|
||||
|
||||
To create a NavMesh do the following:
|
||||
1. Select the scene geometry where you want to add the NavMesh.
|
||||
2. In the Inspector window, click **Add Component**.
|
||||
3. Select **Navigation** > **NavMesh Surface**.
|
||||
4. In the NavMesh Surface component, specify the necessary settings. For details on the available settings, refer to [NavMesh Surface component](./NavMeshSurface.md).
|
||||
5. When you are finished, click **Bake**. <br/>
|
||||
The NavMesh is generated and displayed in the scene as a blue overlay on the underlying scene geometry whenever the Navigation window is open and visible.
|
||||
|
||||
You can bake the NavMesh again to update it each time you make changes to either the scene geometry, the NavMesh [modifiers](./NavMeshModifier.md), the properties of the **NavMesh Surface** component, or [the settings](./NavigationWindow.md#agents-tab) of [the selected agent type](./NavMeshSurface.md#navmesh-surface-main-settings).
|
||||
|
||||
To permanently remove a NavMesh from your project, do one of the following:
|
||||
|
||||
* Click the **Clear** button in the **NavMesh Surface** inspector.
|
||||
* Delete [the NavMesh asset file](./NavMeshSurface.md#navmesh-surface-asset-file) in the **Project** window. If you choose to remove the **NavMesh Surface** component itself from the GameObject, the asset file is not deleted, even though the NavMesh is no longer present in the scene.
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Navigation window](./NavigationWindow.md)
|
||||
- [Create a NavMeshAgent](./CreateNavMeshAgent.md)
|
||||
- [NavMesh Surface component](./NavMeshSurface.md)
|
||||
- [Navigation Areas and Costs](./AreasAndCosts.md)
|
||||
- [Build a HeightMesh for Accurate Character Placement](./HeightMesh.md)
|
||||
|
||||
[1]: ./Glossary.md#NavMesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
@@ -0,0 +1,61 @@
|
||||
# Create a NavMesh Agent
|
||||
|
||||
Once you have a [**NavMesh**][1] baked for your level it is time to create a character which can navigate the [**Scene**][2]. We’re going to build our prototype agent from a cylinder and set it in motion. This is done using a NavMesh Agent component and a simple script.
|
||||
|
||||

|
||||
|
||||
First let’s create the character:
|
||||
|
||||
1. Create a **cylinder**: **GameObject > 3D Object > Cylinder**.
|
||||
2. The default cylinder dimensions (height 2 and radius 0.5) are good for a humanoid shaped agent, so we will leave them as they are.
|
||||
3. Add a **NavMesh Agent** component: **Component > Navigation > NavMesh Agent**.
|
||||
|
||||
Now you have simple NavMesh Agent set up ready to receive commands!
|
||||
|
||||
When you start to experiment with a NavMesh Agent, you most likely are going to adjust its dimensions for your character size and speed.
|
||||
|
||||
The **NavMesh Agent** component handles both the pathfinding and the movement control of a character. In your [**scripts**][3], navigation can be as simple as setting the desired destination point - the NavMesh Agent can handle everything from there on.
|
||||
|
||||
``` C#
|
||||
// MoveTo.cs
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
|
||||
public class MoveTo : MonoBehaviour {
|
||||
|
||||
public Transform goal;
|
||||
|
||||
void Start () {
|
||||
NavMeshAgent agent = GetComponent<NavMeshAgent>();
|
||||
agent.destination = goal.position;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Next we need to build a simple script which allows you to send your character to the destination specified by another Game Object, and a Sphere which will be the destination to move to:
|
||||
|
||||
1. Create a new **C# script** (`MoveTo.cs`) and replace its contents with the above script.
|
||||
2. Assign the MoveTo script to the character you’ve just created.
|
||||
3. Create a **sphere**, this will be the destination the agent will move to.
|
||||
4. Move the sphere away from the character to a location that is close to the NavMesh surface.
|
||||
5. Select the character, locate the MoveTo script, and assign the Sphere to the **Goal** property.
|
||||
6. **Press Play**; you should see the agent navigating to the location of the sphere.
|
||||
|
||||
To sum it up, in your script, you will need to get a reference to the NavMesh Agent component and then to set the agent in motion, you just need to assign a position to its [destination][4] property. The [Navigation How Tos](./NavHowTos.md) will give you further examples on how to solve common gameplay scenarios with the NavMesh Agent.
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Create a NavMesh](./CreateNavMesh.md)
|
||||
- [Navigation HowTos](./NavHowTos.md "Common use cases for NavMesh Agent, with source code.")
|
||||
- [Inner Workings of the Navigation System](./NavInnerWorkings.md#following-the-path "Learn more about path following.")
|
||||
- [Navigation agent configurations](./NavigationWindow.md#agents-tab "Guidance on how to define classes of agents with different attributes.")
|
||||
- [NavMesh Agent component reference](./NavMeshAgent.md "Full description of all the NavMeshAgent properties.")
|
||||
- [NavMesh Agent scripting reference](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent.html "Full description of the NavMeshAgent scripting API.")
|
||||
|
||||
[1]: ./Glossary.md#NavMesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[2]: ./Glossary.md#scene "A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces."
|
||||
|
||||
[3]: ./Glossary.md#scripts "A piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like."
|
||||
|
||||
[4]: https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent-destination.html "Script reference for the NavMeshAgent destination property."
|
||||
@@ -0,0 +1,44 @@
|
||||
# Create a NavMesh Link
|
||||
|
||||
Use NavMesh Links when you want to create paths that cross outside of the walkable [**navigation mesh**][1] surface. For example, you can set up NavMesh Links to allow agents to jump over a ditch or a fence, or to open a door before walking through it. To do this, you first need to add a NavMesh Link component to a GameObject in your [**scene**][2]. Then you position each end of the link at either a point in the scene or at the position of a GameObject that you choose to reference. When the ends are in place over the NavMesh, the Link creates a navigation connection that the [**NavMesh Agent**](./NavMeshAgent.md) can follow.
|
||||
|
||||
We’re going to add an NavMesh Link component to describe a jump from the upper platform to the ground.
|
||||
|
||||
1. First create two cylinders: **Game Object** > **3D Object** > **Cylinder**.
|
||||
2. Scale the cylinders to (0.1, 0.05, 0.1) to make it easier to work with them.
|
||||
3. Move the first cylinder to the edge of the top platform, close to the [**NavMesh**][1] surface.
|
||||
4. Place the second cylinder on the ground, close to the NavMesh, at the location where the link should land.
|
||||
5. Select the first cylinder and add a **NavMesh Link** component to it. In the inspector, select **Add Component** > **Navigation** > **NavMesh Link**.
|
||||
6. In the **Start Transform** field, assign the first cylinder.
|
||||
7. In the **End Transform** field, assign the second cylinder.
|
||||
|
||||
Now you have a functioning NavMesh Link set up. Pathfinding returns the path going through the NavMesh link if that path is shorter than walking along the NavMesh.
|
||||
|
||||
You can use any GameObject in the scene to hold the NavMesh link component, for example a fence [**prefab**][3] can contain the NavMesh link component. Similarly you can use any GameObject with a Transform as the start, or end, marker.
|
||||
|
||||
To learn about all the NavMesh Link properties that you can tweak, refer to the [NavMesh Link component reference](./NavMeshLink.md).
|
||||
|
||||
The NavMesh bake process can detect and create common jump-across and drop-down links automatically. Refer to the settings of [**NavMesh Surface**](./NavMeshSurface.md) for more details.
|
||||
|
||||
## How to troubleshoot a link that does not work
|
||||
|
||||

|
||||
|
||||
If the agent does not traverse a NavMesh Link make sure that both end points are connected correctly to the NavMesh. To check the state of the connection make sure to enable the **Show NavMesh** debug visualization in the [AI Navigation overlay](./NavigationOverlay.md). When the link has no width, a properly connected end point shows a circle around the access point in the scene view. If the link has width, the link shows a dark segment on the edge that connects properly to the NavMesh, or a gray line if the edge does not connect to the NavMesh. If both ends connect to the NavMesh, the wide link shows an additional solid transparent rectangle that fills the space between the link edges. The NavMesh link also shows an arc line between the ends, with an arrow at each end where the agent can exit the link. The arc line is colored black if at least one end is connected, or it is colored gray if none of the ends is connected to the NavMesh.
|
||||
|
||||
No agent or path can traverse a link that has the **Activated** property disabled. In that situation the link shows in the scene with a red color. Make sure to enable the **Activated** property when you want agents to be able to move through the link.
|
||||
|
||||
Another common cause of why an agent does not traverse a NavMesh Link is that the NavMesh Agent’s _Area Mask_ does not include the NavMesh Link’s area type.
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [NavMesh Link component reference](./NavMeshLink.md "Description of all the properties of the NavMesh Link component.")
|
||||
- [Navigation HowTos](./NavHowTos.md "Common use cases for NavMesh Agent, with source code.")
|
||||
- [Sample 7 - Dungeon](./Samples.md "An example of NavMesh links connecting NavMeshes at runtime.")
|
||||
- [NavMesh Link scripting reference](../api/Unity.AI.Navigation.NavMeshLink.html "Full description of the NavMesh Link scripting API.")
|
||||
|
||||
[1]: ./Glossary.md#navmesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[2]: ./Glossary.md#scene "A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces."
|
||||
|
||||
[3]: ./Glossary.md#prefab "An asset type that allows you to store a GameObject complete with components and properties. The prefab acts as a template from which you can create new object instances in the scene."
|
||||
@@ -0,0 +1,28 @@
|
||||
# Create a NavMesh Obstacle
|
||||
|
||||
NavMesh Obstacle components can be used to describe obstacles the agents should avoid while navigating. For example the agents should avoid physics controlled objects, such as crates and barrels while moving.
|
||||
|
||||
We’re going to add a crate to block the pathway at the top of the level.
|
||||
|
||||

|
||||
|
||||
1. First create a **cube** to depict the crate: **Game Object > 3D Object > Cube**.
|
||||
2. Move the cube to the platform at the top, the default size of the cube is good for a crate so leave it as it is.
|
||||
3. Add a **NavMesh Obstacle component** to the cube. Choose **Add Component** from the inspector and choose **Navigation > NavMesh Obstacle**.
|
||||
4. Set the shape of the obstacle to **box**, changing the shape will automatically fit the center and size to the render [**mesh**][1].
|
||||
5. Add a **Rigid body** to the obstacle. Choose **Add Component** from the inspector and choose **Physics > Rigid Body**.
|
||||
6. Finally turn on the **Carve** setting from the [**NavMesh**][2] Obstacle [**inspector**][3] so that the agent knows to find a path around the obstacle.
|
||||
|
||||
Now we have a working crate that is physics controlled, and which the AI knows how to avoid while navigating.
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Inner Workings of the Navigation System](./NavInnerWorkings.md#two-cases-for-obstacles "Learn more about how obstacles are used as part of navigation.")
|
||||
- [NavMesh Obstacle component reference](./NavMeshObstacle.md "Full description of all the NavMesh Obstacle properties.")
|
||||
- [NavMesh Obstacle scripting reference](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshObstacle.html "Full description of the NavMesh Obstacle scripting API.")
|
||||
|
||||
[1]: ./Glossary.md#mesh "The main graphics primitive of Unity. Meshes make up a large part of your 3D worlds. Unity supports triangulated or Quadrangulated polygon meshes. Nurbs, Nurms, Subdiv surfaces must be converted to polygons."
|
||||
|
||||
[2]: ./Glossary.md#navmesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[3]: ./Glossary.md#inspector "A Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values."
|
||||
@@ -0,0 +1,45 @@
|
||||
# Create an Off-mesh Link
|
||||
|
||||
> [!Important]
|
||||
> The OffMesh Link component is deprecated and no longer supported. The **Add Component** menu no longer contains the Off-Mesh Link component. Use the [NavMesh Link component](./NavMeshLink.md) instead.
|
||||
|
||||
Off-Mesh Links are used to create paths crossing outside the walkable navigation [**mesh**][1] surface. For example, jumping over a ditch or a fence, or opening a door before walking through it, can be all described as Off-mesh links.
|
||||
|
||||
We’re going to add an Off-Mesh Link component to describe a jump from the upper platform to the ground.
|
||||
|
||||

|
||||
|
||||
1. First create **two cylinders**: **Game Object > 3D Object > cylinder**.
|
||||
2. You can scale the cylinders to _(0.1, 0.5, 0.1)_ to make it easier to work with them.
|
||||
3. Move the **first cylinder** at the edge of the top platform, close to the [**NavMesh**][2] surface.
|
||||
4. Place the **second cylinder** on the ground, close to the NavMesh, at the location where the link should land.
|
||||
5. Select the **first cylinder** cylinder and add an Off-Mesh Link component to it. Choose **Add Component** from the inspector and choose **Navigation > OffMesh Link**.
|
||||
6. Assign the **first cylinder** in the **Start** field and the **second cylinder** in the **End** field.
|
||||
|
||||
Now you have a functioning Off-Mesh Link set up! If the path via the off-mesh link is shorter than via walking along the NavMesh, the off-mesh link will be used.
|
||||
|
||||
You can use any game object in the [**Scene**][3] to hold the Off-Mesh link component, for example a fence [**prefab**][4] could contain the off-mesh link component. Similarly you can use any game object with a Transform as the start and end marker.
|
||||
|
||||
The NavMesh bake process can detect and create common jump-across and drop-down links automatically. Take a look at [Building Off-Mesh Links Automatically](./BuildingOffMeshLinksAutomatically.md) for more details.
|
||||
|
||||
## Details
|
||||
|
||||

|
||||
|
||||
If the agent does not traverse an OffMesh link make sure that both end points are connected correctly. A properly connected end point should show a circle around the access point.
|
||||
|
||||
Another common cause is that the NavMesh Agent’s _Area Mask_ does not have the OffMesh Link’s area included.
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Navigation HowTos](./NavHowTos.md "Common use cases for NavMesh Agent, with source code.")
|
||||
- [Off-Mesh Link component (deprecated) reference](./OffMeshLink.md "Full description of all the legacy Off-Mesh Link properties.")
|
||||
- [Off-Mesh Link (deprecated) scripting reference](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.OffMeshLink.html "Full description of the legacy Off-Mesh Link scripting API.")
|
||||
|
||||
[1]: ./Glossary.md#mesh "The main graphics primitive of Unity. Meshes make up a large part of your 3D worlds. Unity supports triangulated or Quadrangulated polygon meshes. Nurbs, Nurms, Subdiv surfaces must be converted to polygons."
|
||||
|
||||
[2]: ./Glossary.md#navmesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[3]: ./Glossary.md#scene "A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces."
|
||||
|
||||
[4]: ./Glossary.md#prefab "An asset type that allows you to store a GameObject complete with components and properties. The prefab acts as a template from which you can create new object instances in the scene."
|
||||
@@ -0,0 +1,67 @@
|
||||
# Glossary
|
||||
|
||||
## Animation blend tree
|
||||
Used for continuous blending between similar Animation Clips based on float Animation Parameters. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/class-BlendTree.html)
|
||||
|
||||
## Animation clip
|
||||
Animation data that can be used for animated characters or simple animations. An animation clip is one piece of motion, such as (one specific instance of) “Idle”, “Walk” or “Run”. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/class-AnimationClip.html)
|
||||
|
||||
## Animation parameters
|
||||
Used to communicate between scripting and the Animator Controller. Some parameters can be set in scripting and used by the controller, while other parameters are based on Custom Curves in Animation Clips and can be sampled using the scripting API. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/AnimationParameters.html)
|
||||
|
||||
## Animator window
|
||||
The window where the Animator Controller is visualized and edited. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/AnimatorWindow.html)
|
||||
|
||||
## Collider
|
||||
An invisible shape that is used to handle physical collisions for an object. A collider doesn’t need to be exactly the same shape as the object’s mesh - a rough approximation is often more efficient and indistinguishable in gameplay. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/CollidersOverview.html)
|
||||
|
||||
## Collision
|
||||
A collision occurs when the physics engine detects that the colliders of two GameObjects make contact or overlap, and at least one has a Rigidbody component and is in motion. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/CollidersOverview.html)
|
||||
|
||||
## GameObject
|
||||
The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/class-GameObject.html)
|
||||
|
||||
## HeightMesh
|
||||
A navmesh that contains additional data that is used to more accurately determine the height at any point along the navmesh. [More info](./HeightMesh.md)
|
||||
|
||||
## Hierarchy
|
||||
Unity uses the concept of parent-child hierarchies, or parenting, to group GameObjects. An object can contain other GameObjects that inherit its properties. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/Hierarchy.html)
|
||||
|
||||
## Input Geometry
|
||||
The geometry to consider when baking the navmesh. [More info](./NavMeshSurface.md#Object-Collection)
|
||||
|
||||
## Inspector
|
||||
A Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/UsingTheInspector.html)
|
||||
|
||||
## Mesh
|
||||
The main graphics primitive of Unity. Meshes make up a large part of your 3D worlds. Unity supports triangulated or Quadrangulated polygon meshes. Nurbs, Nurms, Subdiv surfaces must be converted to polygons. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/mesh-introduction.html)
|
||||
|
||||
## NavMesh
|
||||
A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation. [More info](./CreateNavMesh.md)
|
||||
|
||||
## Prefab
|
||||
An asset type that allows you to store a GameObject complete with components and properties. The prefab acts as a template from which you can create new object instances in the scene. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/Prefabs.html)
|
||||
|
||||
## Rasterization
|
||||
The process of generating an image by calculating pixels for each polygon or triangle in the geometry. This is an alternative to ray tracing.
|
||||
|
||||
## Rigidbody
|
||||
A component that allows a GameObject to be affected by simulated gravity and other forces. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/class-Rigidbody.html)
|
||||
|
||||
## Root motion
|
||||
Motion of character’s root node, whether it’s controlled by the animation itself or externally. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/RootMotion.html)
|
||||
|
||||
## Scene
|
||||
A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/CreatingScenes.html)
|
||||
|
||||
## Scripts
|
||||
A piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/CreatingAndUsingScripts.html)
|
||||
|
||||
## Terrain
|
||||
The landscape in your scene. A Terrain GameObject adds a large flat plane to your scene and you can use the Terrain’s Inspector window to create a detailed landscape. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/terrain-UsingTerrains.html)
|
||||
|
||||
## Unity unit
|
||||
The unit size used in Unity projects. By default, 1 Unity unit is 1 meter. To use a different scale, set the Scale Factor in the Import Settings when importing assets. [More info](https://docs.unity3d.com/6000.0/Documentation/Manual/ImportingModelFiles.html#model)
|
||||
|
||||
## Voxel
|
||||
A 3D pixel. [More info](./NavInnerWorkings.md#About-Voxels)
|
||||
@@ -0,0 +1,32 @@
|
||||
# Build a HeightMesh for Accurate Character Placement
|
||||
|
||||
Use a HeightMesh to place your character more accurately on walkable surfaces during navigation.
|
||||
|
||||
During navigation, the [**NavMesh Agent**](./AboutAgents.md) is constrained on the surface of the [**NavMesh**][1]. Since the NavMesh is an approximation of the walkable space, some features are evened out when the NavMesh is built. For example, stairs may appear as a slope in the NavMesh. If your game requires accurate placement of the agent, you can either add a **HeightMesh** to your **NavMesh**, or build a **HeightMesh** when you bake the **NavMesh**.
|
||||
|
||||
>[!Note]
|
||||
>It takes extra memory and runtime processing to build a **HeightMesh**, therefore, it will take longer to bake the NavMesh.
|
||||
|
||||
To add a HeightMesh to your NavMesh:
|
||||
|
||||
1. Open your scene in the **Editor**.
|
||||
2. Select the scene geometry or **GameObject** that contains your **NavMesh**.
|
||||
3. In the Inspector, expand the **NavMesh Surface** component, if necessary.
|
||||
4. In the **NavMesh Surface** component, expand the **Advanced** section, then select **Build Height Mesh**.
|
||||
5. When you are finished, click **Bake**. </br> The NavMesh is generated and displayed as a blue overlay and the HeightMesh as a pink overlay.
|
||||
|
||||
To build a **HeightMesh** when you bake the **NavMesh**:
|
||||
|
||||
1. Follow the instructions to [Create a NavMesh](./CreateNavMesh.md).
|
||||
2. In the **NavMesh Surface** component, select **Build Height Mesh**.
|
||||
3. When you are finished, click **Bake**. </br> The NavMesh is generated and displayed as a blue overlay and the HeightMesh as a pink overlay.
|
||||
|
||||
. The blue area shows the NavMesh which is used for path finding. The pink area (including the area under the NavMesh) represents the HeightMesh which is used for more accurate placement of the Agent while it moves along the calculated path.")
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Create a NavMesh](./CreateNavMesh.md "Workflow for creating a NavMesh.")
|
||||
- [NavMesh Surface component reference](./NavMeshSurface.md#advanced-settings "Use for specifying the settings for NavMesh baking.")
|
||||
- [Sample 8 - Heightmesh](./Samples.md "An example of a NavMesh Agent that aligns precisely to the steps of a staircase.")
|
||||
|
||||
[1]: ./Glossary.md#NavMesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
After Width: | Height: | Size: 262 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 364 KiB |
|
After Width: | Height: | Size: 728 KiB |
|
After Width: | Height: | Size: 228 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 39 KiB |
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="307px" height="380px" viewBox="0 0 307 380" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>navmeshagent_offset</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="navmeshagent_offset" sketch:type="MSArtboardGroup">
|
||||
<path d="M127,131.309524 C127,138.870565 112.225398,145 94,145 C75.7746024,145 61,138.870565 61,131.309524 L61,30 L127,30 L127,131.309524 Z" id="Oval-1" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<ellipse id="Oval-1-copy" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup" cx="94" cy="31.5" rx="33" ry="13.5"></ellipse>
|
||||
<ellipse id="Oval-1-copy-2" stroke="#979797" stroke-dasharray="2" sketch:type="MSShapeGroup" cx="94" cy="130.5" rx="33" ry="13.5"></ellipse>
|
||||
<path d="M254,131.309524 C254,138.870565 239.225398,145 221,145 C202.774602,145 188,138.870565 188,131.309524 L188,30 L254,30 L254,131.309524 Z" id="Oval-1-copy" stroke="#0AB8FD" fill="#98E0FE" sketch:type="MSShapeGroup"></path>
|
||||
<ellipse id="Oval-1-copy-2" stroke="#0AB8FD" fill="#98E0FE" sketch:type="MSShapeGroup" cx="221" cy="31.5" rx="33" ry="13.5"></ellipse>
|
||||
<ellipse id="Oval-1-copy-3" stroke="#0AB8FD" stroke-dasharray="2" sketch:type="MSShapeGroup" cx="221" cy="130.5" rx="33" ry="13.5"></ellipse>
|
||||
<g id="Line-+-Line" sketch:type="MSLayerGroup" transform="translate(80.000000, 74.000000)" stroke="#979797" stroke-linecap="square">
|
||||
<path d="M0.684210526,13 L25.353771,13" id="Line" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M13,0.665219759 L13,25.3347802" id="Line" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
<path d="M190,351.309524 C190,358.870565 175.225398,365 157,365 C138.774602,365 124,358.870565 124,351.309524 L124,250 L190,250 L190,351.309524 Z" id="Oval-1-copy" stroke="#0AB8FD" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<ellipse id="Oval-1-copy-2" stroke="#0AB8FD" fill="#D8D8D8" sketch:type="MSShapeGroup" cx="157" cy="251.5" rx="33" ry="13.5"></ellipse>
|
||||
<ellipse id="Oval-1-copy-3" stroke="#979797" stroke-dasharray="2" sketch:type="MSShapeGroup" cx="157" cy="351.5" rx="33" ry="13.5"></ellipse>
|
||||
<g id="Line-+-Line-copy" sketch:type="MSLayerGroup" transform="translate(143.000000, 294.000000)" stroke="#979797" stroke-linecap="square">
|
||||
<path d="M0.684210526,13 L25.353771,13" id="Line" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M13,0.665219759 L13,25.3347802" id="Line" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
<g id="Line-+-Line-copy" sketch:type="MSLayerGroup" transform="translate(147.000000, 343.000000)" stroke="#FF481B" stroke-linecap="square">
|
||||
<path d="M0.421052632,8.18181818 L15.6023206,8.18181818" id="Line" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M8,0 L8,15" id="Line" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
<g id="Line-+-Line-copy" sketch:type="MSLayerGroup" transform="translate(211.000000, 122.000000)" stroke="#FF481B" stroke-linecap="square">
|
||||
<path d="M0.421052632,8.18181818 L15.6023206,8.18181818" id="Line" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M8,0 L8,15" id="Line" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
<text id="NavMeshAgent" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="bold" fill="#000000">
|
||||
<tspan x="190" y="172">NavMeshAgent</tspan>
|
||||
</text>
|
||||
<text id="Cylinder" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="bold" fill="#000000">
|
||||
<tspan x="68" y="174">Cylinder</tspan>
|
||||
</text>
|
||||
<text id="center" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="12" y="86">center</tspan>
|
||||
</text>
|
||||
<text id="center-copy" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="261" y="133">center</tspan>
|
||||
</text>
|
||||
<text id="baseOffset" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="221" y="332">baseOffset</tspan>
|
||||
</text>
|
||||
<path d="M173.678571,305.5 L229.337975,305.5" id="Line" stroke="#FF481B" stroke-linecap="square" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M173.678571,349.5 L229.337975,349.5" id="Line-copy" stroke="#FF481B" stroke-linecap="square" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M206.5,305.6875 L206.5,348.334671" id="Line" stroke="#FF481B" stroke-linecap="square" fill="#FF481B" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Line-decoration-1" d="M206.5,347.6875 C207.55,343.9075 208.45,340.6675 209.5,336.8875 C207.4,336.8875 205.6,336.8875 203.5,336.8875 C204.55,340.6675 205.45,343.9075 206.5,347.6875 C206.5,347.6875 206.5,347.6875 206.5,347.6875 Z" stroke="#FF481B" stroke-linecap="square" fill="#FF481B"></path>
|
||||
<path d="M118.409505,152.127604 C146.538166,171.956519 155.375001,186.428474 155.375001,216.833987" id="Path" stroke="#FF481B" stroke-width="3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M191.330163,147.932584 C156.661274,150.385335 155.183424,203.216613 155.183424,225.61712" id="Path" stroke="#FF481B" stroke-width="3" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Path-decoration-1" d="M152.355822,214.632002 C153.300575,218.460752 154.151179,221.746489 155.183431,225.534951 C156.251077,221.767148 157.19975,218.540971 158.35217,214.841308" stroke="#FF481B" stroke-width="3"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 404 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 395 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 191 KiB |
|
After Width: | Height: | Size: 450 KiB |
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="732px" height="214px" viewBox="0 0 732 214" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshLoadAdditiveDiagram</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshLoadAdditiveDiagram" sketch:type="MSArtboardGroup">
|
||||
<g id="Rectangle-47-copy-+-Path-63-copy" sketch:type="MSLayerGroup" transform="translate(264.500000, 98.500000) rotate(-180.000000) translate(-264.500000, -98.500000) translate(188.000000, 35.000000)">
|
||||
<path d="M135,84 L135,127 L0,127 L0,0 L135,0 L135,47 L153,47 L153,84 L135,84 Z" id="Rectangle-47-copy" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M12.4042969,10.8847656 L123.503205,10.8847656 L123.503205,49.3222658 L129.791204,55.610265 L143.314665,55.610265 L143.314665,72.2085226 L131.047314,72.2085226 L124.131215,79.1246213 L124.131215,113.191395 L12.7949075,113.191395 L12.4042969,10.8847656 Z" id="Path-63-copy" stroke="#2A80A2" fill="#98E0FE" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
<text id="Scene-1" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="31" y="175">Scene 1</tspan>
|
||||
</text>
|
||||
<text id="Scene-2" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="211" y="178">Scene 2</tspan>
|
||||
</text>
|
||||
<g id="Rectangle-47-+-Path-63" sketch:type="MSLayerGroup" transform="translate(27.000000, 32.000000)">
|
||||
<path d="M135,84 L135,127 L0,127 L0,0 L135,0 L135,47 L153,47 L153,84 L135,84 Z" id="Rectangle-47" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10.4042969,9.88476562 L121.503205,9.88476562 L121.503205,48.3222658 L127.791204,54.610265 L141.314665,54.610265 L141.314665,71.2085226 L129.047314,71.2085226 L122.131215,78.1246213 L122.131215,112.191395 L10.7949075,112.191395 L10.4042969,9.88476562 Z" id="Path-63" stroke="#2A80A2" fill="#98E0FE" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
<g id="Oval-22-+-Oval-22-copy-+-Path-62" sketch:type="MSLayerGroup" transform="translate(150.000000, 78.000000)" stroke="#2A80A2" stroke-width="2">
|
||||
<ellipse id="Oval-22" sketch:type="MSShapeGroup" cx="9.5" cy="18" rx="9.5" ry="5"></ellipse>
|
||||
<path d="M9,16 C9,16 14.8963118,1.93176164e-06 32.0986372,0 C49.3009625,-1.5919511e-06 55,15.6006113 55,15.6006113" id="Path-62" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Path-62-decoration-1" d="M17.6078769,8.69989522 C14.5081128,10.5255076 11.9961818,12.5029402 9.30552153,15.270937 C10.2211688,11.380742 11.462861,8.08902615 13.4870885,4.33880553"></path>
|
||||
<path id="Path-62-decoration-2" d="M46.6926386,8.71006652 C49.7639973,10.5305833 52.2591991,12.5329515 54.8928798,15.3298335 C54.0472578,11.4316588 52.8256766,8.114777 50.829117,4.36385594"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Rectangle-47-copy-+-Path-63-copy" sketch:type="MSLayerGroup" transform="translate(639.500000, 98.500000) rotate(-180.000000) translate(-639.500000, -98.500000) translate(563.000000, 35.000000)">
|
||||
<path d="M135,84 L135,127 L0,127 L0,0 L135,0 L135,47 L153,47 L153,84 L135,84 Z" id="Rectangle-47-copy" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M12.4042969,10.8847656 L123.503205,10.8847656 L123.503205,49.3222658 L129.791204,55.610265 L143.314665,55.610265 L143.314665,72.2085226 L131.047314,72.2085226 L124.131215,79.1246213 L124.131215,113.191395 L12.7949075,113.191395 L12.4042969,10.8847656 Z" id="Path-63-copy" stroke="#2A80A2" fill="#98E0FE" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
<text id="Scene-1-copy" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="406" y="175">Scene 1</tspan>
|
||||
</text>
|
||||
<text id="Scene-2-copy" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="586" y="178">Scene 2</tspan>
|
||||
</text>
|
||||
<g id="Rectangle-47-+-Path-63-copy" sketch:type="MSLayerGroup" transform="translate(402.000000, 32.000000)">
|
||||
<path d="M135,84 L135,127 L0,127 L0,0 L135,0 L135,47 L153,47 L153,84 L135,84 Z" id="Rectangle-47" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10.4042969,9.88476562 L121.503205,9.88476562 L121.503205,48.3222658 L127.791204,54.610265 L141.314665,54.610265 L141.314665,71.2085226 L129.047314,71.2085226 L122.131215,78.1246213 L122.131215,112.191395 L10.7949075,112.191395 L10.4042969,9.88476562 Z" id="Path-63" stroke="#2A80A2" fill="#98E0FE" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
<g id="Oval-22-+-Oval-22-copy-+-Path-63" sketch:type="MSLayerGroup" transform="translate(525.000000, 78.000000)" stroke="#2A80A2" stroke-width="2">
|
||||
<ellipse id="Oval-22" sketch:type="MSShapeGroup" cx="9.5" cy="18" rx="9.5" ry="5"></ellipse>
|
||||
<ellipse id="Oval-22-copy" sketch:type="MSShapeGroup" cx="55.5" cy="18" rx="9.5" ry="5"></ellipse>
|
||||
<path d="M9,16 C9,16 14.8963118,1.93176164e-06 32.0986372,0 C49.3009625,-1.5919511e-06 55,15.6006113 55,15.6006113" id="Path-62" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Path-62-decoration-1" d="M17.6078769,8.69989522 C14.5081128,10.5255076 11.9961818,12.5029402 9.30552153,15.270937 C10.2211688,11.380742 11.462861,8.08902615 13.4870885,4.33880553"></path>
|
||||
<path id="Path-62-decoration-2" d="M46.6926386,8.71006652 C49.7639973,10.5305833 52.2591991,12.5329515 54.8928798,15.3298335 C54.0472578,11.4316588 52.8256766,8.114777 50.829117,4.36385594"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.0 KiB |
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="732px" height="193px" viewBox="0 0 732 193" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshLoadAdditiveTrouble</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshLoadAdditiveTrouble" sketch:type="MSArtboardGroup">
|
||||
<text id="Scene-1-copy-2" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="91" y="152">Scene 1</tspan>
|
||||
</text>
|
||||
<text id="Scene-2-copy-2" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="251" y="118">Scene 2</tspan>
|
||||
</text>
|
||||
<path d="M92.9921875,118.277344 L91.4492187,67.4648438 L145.972656,23.0332031 L191.902344,24.0332031 L191.902344,142.547947 L165.376953,144.087891 L92.9921875,118.277344 Z" id="Path-69" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M186.492188,123.912109 L172.511719,93.5664062 L177.720703,65.4375 L202.703125,42.2539062 L292.28125,53.734375 L295.710938,83.7324219 L186.492188,123.912109 Z" id="Path-71" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M185.615234,91.6757812 L188.894531,71.4785156 L205.5,55.3632812 L281.962891,64.5039062 L284.025391,77.5898438 L195.101562,110.253906 L185.615234,91.6757812 Z" id="Path-70" stroke="#2A80A2" fill-opacity="0.75" fill="#85DBFD" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M105.742188,107.992188 L103.894531,71.4785156 L150.804688,33.7714844 L181.712891,33.9882812 L182.712891,131.072266 L171.314453,132.115234 L105.742188,107.992188 Z" id="Path-70" stroke="#2A80A2" fill-opacity="0.75" fill="#85DBFD" sketch:type="MSShapeGroup"></path>
|
||||
<g id="Oval-22-+-Oval-22-copy-+-Path-64" sketch:type="MSLayerGroup" transform="translate(151.000000, 71.000000)" stroke="#2A80A2" stroke-width="2">
|
||||
<ellipse id="Oval-22" sketch:type="MSShapeGroup" cx="9.5" cy="18" rx="9.5" ry="5"></ellipse>
|
||||
<ellipse id="Oval-22-copy" sketch:type="MSShapeGroup" cx="55.5" cy="18" rx="9.5" ry="5"></ellipse>
|
||||
<path d="M9,16 C9,16 14.8963118,1.93176164e-06 32.0986372,0 C49.3009625,-1.5919511e-06 55,15.6006113 55,15.6006113" id="Path-62" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Path-62-decoration-1" d="M17.6078769,8.69989522 C14.5081128,10.5255076 11.9961818,12.5029402 9.30552153,15.270937 C10.2211688,11.380742 11.462861,8.08902615 13.4870885,4.33880553"></path>
|
||||
<path id="Path-62-decoration-2" d="M46.6926386,8.71006652 C49.7639973,10.5305833 52.2591991,12.5329515 54.8928798,15.3298335 C54.0472578,11.4316588 52.8256766,8.114777 50.829117,4.36385594"></path>
|
||||
</g>
|
||||
<text id="Scene-1-copy-3" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="465" y="155">Scene 1</tspan>
|
||||
</text>
|
||||
<text id="Scene-2-copy-3" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal" fill="#000000">
|
||||
<tspan x="610" y="118">Scene 2</tspan>
|
||||
</text>
|
||||
<path d="M466.992188,121.277344 L465.449219,70.4648438 L519.972656,26.0332031 L565.902344,27.0332031 L565.902344,145.547947 L539.376953,147.087891 L466.992188,121.277344 Z" id="Path-69-copy" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M529.492188,129.912109 L515.511719,99.5664062 L520.720703,71.4375 L545.703125,48.2539062 L635.28125,59.734375 L638.710938,89.7324219 L529.492188,129.912109 Z" id="Path-71-copy" stroke="#979797" fill="#D8D8D8" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M528.615234,97.6757812 L531.894531,77.4785156 L548.5,61.3632812 L624.962891,70.5039062 L627.025391,83.5898438 L538.101562,116.253906 L528.615234,97.6757812 Z" id="Path-70-copy" stroke="#2A80A2" fill-opacity="0.75" fill="#85DBFD" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M479.742188,110.992188 L477.894531,74.4785156 L524.804688,36.7714844 L555.712891,36.9882812 L556.712891,134.072266 L545.314453,135.115234 L479.742188,110.992188 Z" id="Path-70-copy" stroke="#2A80A2" fill-opacity="0.75" fill="#85DBFD" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M29,96.7281127 L43.988595,117 L78,71" id="Path-78" stroke="#7CCD2F" stroke-width="6" sketch:type="MSShapeGroup"></path>
|
||||
<g id="Line-+-Line" sketch:type="MSLayerGroup" transform="translate(391.000000, 73.000000)" stroke="#FF481B" stroke-width="6" stroke-linecap="square">
|
||||
<path d="M0.5,0.5 L46.1344185,46.1344185" id="Line" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M0.5,0.5 L46.1344185,46.1344185" id="Line" sketch:type="MSShapeGroup" transform="translate(23.500000, 23.500000) scale(-1, 1) translate(-23.500000, -23.500000) "></path>
|
||||
</g>
|
||||
<g id="Oval-22-+-Oval-22-copy-+-Path-64" sketch:type="MSLayerGroup" transform="translate(537.000000, 70.000000)" stroke="#2A80A2" stroke-width="2">
|
||||
<ellipse id="Oval-22" sketch:type="MSShapeGroup" cx="9.5" cy="18" rx="9.5" ry="5"></ellipse>
|
||||
<ellipse id="Oval-22-copy" sketch:type="MSShapeGroup" cx="55.5" cy="18" rx="9.5" ry="5"></ellipse>
|
||||
<path d="M9,16 C9,16 14.8963118,1.93176164e-06 32.0986372,0 C49.3009625,-1.5919511e-06 55,15.6006113 55,15.6006113" id="Path-62" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Path-62-decoration-1" d="M17.6078769,8.69989522 C14.5081128,10.5255076 11.9961818,12.5029402 9.30552153,15.270937 C10.2211688,11.380742 11.462861,8.08902615 13.4870885,4.33880553"></path>
|
||||
<path id="Path-62-decoration-2" d="M46.6926386,8.71006652 C49.7639973,10.5305833 52.2591991,12.5329515 54.8928798,15.3298335 C54.0472578,11.4316588 52.8256766,8.114777 50.829117,4.36385594"></path>
|
||||
</g>
|
||||
<path d="M584,129 L558.5,101.5" id="Line" stroke="#4A4A4A" stroke-width="4" stroke-linecap="square" sketch:type="MSShapeGroup"></path>
|
||||
<polygon id="Triangle-41" fill="#4A4A4A" sketch:type="MSShapeGroup" transform="translate(556.500000, 99.500000) rotate(318.000000) translate(-556.500000, -99.500000) " points="556.5 92 563 107 550 107 "></polygon>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 221 KiB |
|
After Width: | Height: | Size: 367 KiB |
|
After Width: | Height: | Size: 325 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 458 KiB |
|
After Width: | Height: | Size: 406 KiB |
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="285px" height="332px" viewBox="0 0 285 332" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>navmeshobstacle_trap</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="navmeshobstacle_trap" sketch:type="MSArtboardGroup">
|
||||
<text id="If-carving-is-not-en" fill="#000000" sketch:type="MSTextLayer" font-family="Helvetica" font-size="12" font-weight="normal">
|
||||
<tspan x="136" y="292">If carving is not enabled,</tspan>
|
||||
<tspan x="136" y="306">the agent can get stuck</tspan>
|
||||
<tspan x="136" y="320">in cluttered environments.</tspan>
|
||||
</text>
|
||||
<g id="Group" sketch:type="MSLayerGroup" transform="translate(15.000000, 14.000000)">
|
||||
<path d="M130.581081,28.4211409 L69.4189189,278.578859" id="Line" stroke="#D52120" stroke-width="2" stroke-linecap="square" sketch:type="MSShapeGroup"></path>
|
||||
<text id="When-a-moving-obstac" fill="#FFFFFF" sketch:type="MSTextLayer" font-family="Helvetica" font-size="7.48250729" font-weight="normal">
|
||||
<tspan x="131" y="140">When a moving obstacle</tspan>
|
||||
<tspan x="131" y="150">becomes stationary,</tspan>
|
||||
<tspan x="131" y="160" font-weight="bold">carving</tspan>
|
||||
<tspan x="157.616243" y="160"> should be turned</tspan>
|
||||
<tspan x="131" y="170">on so that the agent can</tspan>
|
||||
<tspan x="131" y="180">plan route around the</tspan>
|
||||
<tspan x="131" y="190">location blocked by the</tspan>
|
||||
<tspan x="131" y="200">obstacle.</tspan>
|
||||
</text>
|
||||
<g transform="translate(0.000000, 78.000000)" stroke="#979797" stroke-width="2" fill="#D8D8D8" sketch:type="MSShapeGroup">
|
||||
<rect id="Rectangle-27" transform="translate(215.000000, 55.500000) rotate(-267.000000) translate(-215.000000, -55.500000) " x="190" y="30" width="50" height="51"></rect>
|
||||
<rect id="Rectangle-27" transform="translate(142.000000, 130.500000) rotate(-267.000000) translate(-142.000000, -130.500000) " x="117" y="105" width="50" height="51"></rect>
|
||||
<rect id="Rectangle-27-copy" transform="translate(170.000000, 87.500000) rotate(70.000000) translate(-170.000000, -87.500000) " x="145" y="62" width="50" height="51"></rect>
|
||||
<rect id="Rectangle-27-copy-2" transform="translate(30.000000, 30.500000) rotate(-283.000000) translate(-30.000000, -30.500000) " x="5" y="5" width="50" height="51"></rect>
|
||||
<rect id="Rectangle-27-copy-2" transform="translate(92.000000, 109.500000) rotate(-283.000000) translate(-92.000000, -109.500000) " x="67" y="84" width="50" height="51"></rect>
|
||||
<rect id="Rectangle-27-copy-3" transform="translate(44.000000, 81.500000) rotate(-238.000000) translate(-44.000000, -81.500000) " x="19" y="56" width="50" height="51"></rect>
|
||||
</g>
|
||||
<circle id="Oval-10" stroke="#0AB8FD" fill="#98E0FE" sketch:type="MSShapeGroup" cx="131.5" cy="25.5" r="25.5"></circle>
|
||||
<path d="M131.571429,26.4210526 L126.428571,105.578947" id="Line" stroke="#FF481B" stroke-width="2" stroke-linecap="square" fill="#FF481B" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Line-decoration-1" d="M126.449628,105.254847 C127.742487,101.550874 128.850653,98.3760406 130.143512,94.6720677 C128.04793,94.5359187 126.251717,94.4192195 124.156135,94.2830704 C124.958858,98.1231923 125.646906,101.414725 126.449628,105.254847 C126.449628,105.254847 126.449628,105.254847 126.449628,105.254847 Z" stroke="#FF481B" stroke-width="2" stroke-linecap="square" fill="#FF481B"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 299 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 387 KiB |
|
After Width: | Height: | Size: 235 KiB |
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="335px" height="250px" viewBox="0 0 335 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshUnderstandingAreas</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshUnderstandingAreas" sketch:type="MSArtboardGroup">
|
||||
<path d="M126,129 L74,97 L74,129 L126,161 L126,129 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,129 L74,97 L74,129 L126,161 L126,129 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,129 L126,137 L106,145 L106,169 L170,145 L170,113 L126,129 Z" id="Shape" fill="#B7B7B7" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,129 L126,137 L106,145 L106,169 L170,145 L170,113 L126,129 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M202,133 L170,113 L170,145 L202,165 L202,133 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M202,133 L170,113 L170,145 L202,165 L202,133 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,65 L162,17 L298,89 L298,137 L162,65 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,65 L162,17 L298,89 L298,137 L162,65 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,17 L186,9 L322,81 L298,89 L162,17 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,17 L186,9 L322,81 L298,89 L162,17 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,65 L74,97 L126,129 L170,113 L202,133 L158,149 L202,177 L298,137 L162,65 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,65 L74,97 L126,129 L170,113 L202,133 L158,149 L202,177 L298,137 L162,65 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M202,177 L158,149 L158,181 L202,209 L202,177 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M202,177 L158,149 L158,181 L202,209 L202,177 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M106,145 L54,113 L54,125 L106,157 L106,145 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M106,145 L54,113 L54,125 L106,157 L106,145 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M54,113 L74,105 L126,137 L106,145 L54,113 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M54,113 L74,105 L126,137 L106,145 L54,113 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M138,165 L158,157 L202,185 L182,193 L138,165 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M138,165 L158,157 L202,185 L182,193 L138,165 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M182,193 L138,165 L138,177 L182,205 L182,193 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M182,193 L138,165 L138,177 L182,205 L182,193 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10,141 L54,125 L182,205 L126,229 L10,141 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10,141 L54,125 L182,205 L126,229 L10,141 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,229 L182,205 L182,193 L202,185 L202,177 L298,137 L298,89 L322,81 L322,157 L126,241 L126,229 Z" id="Shape" fill="#B7B7B7" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,229 L182,205 L182,193 L202,185 L202,177 L298,137 L298,89 L322,81 L322,157 L126,241 L126,229 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10,141 L126,229 L126,241 L10,153 L10,141 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10,141 L126,229 L126,241 L10,153 L10,141 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118,121 L162,105 L178,105 L210,125 L210,137 L170,153 L142,185 L126,185 L90,161 L90,153 L30,145 L126,217 L166,201 L194,169 L278,137 L162,73 L86,101 L54,137 L30,145 L90,153 L118,121 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118,121 L162,105 L178,105 L210,125 L210,137 L170,153 L142,185 L126,185 L90,161 L90,153 L30,145 L126,217 L166,201 L194,169 L278,137 L162,73 L86,101 L54,137 L30,145 L90,153 L118,121 Z" id="Shape" stroke="#434343" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M94,65.666664 L94,65.666664 C94,60.8801955 101.163437,57 110,57 C118.836563,57 126,60.8801955 126,65.666664 L126,100.333334 C126,105.119795 118.836563,108.999998 110,108.999998 C101.163437,108.999998 94,105.119795 94,100.333334 L94,65.666664 Z" id="Shape" fill="#EA9999" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,66 L126,66 C126,71.0680255 118.836563,75.1764762 110,75.1764762 C101.163437,75.1764762 94,71.0680257 94,66" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M94,65.666664 L94,65.666664 C94,60.8801955 101.163437,57 110,57 C118.836563,57 126,60.8801955 126,65.666664 L126,100.333334 C126,105.119795 118.836563,108.999998 110,108.999998 C101.163437,108.999998 94,105.119795 94,100.333334 L94,65.666664 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,66 L126,66 C126,71.0680255 118.836563,75.1764762 110,75.1764762 C101.163437,75.1764762 94,71.0680257 94,66" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M94,65.666664 L94,65.666664 C94,60.8801955 101.163437,57 110,57 C118.836563,57 126,60.8801955 126,65.666664 L126,100.333334 C126,105.119795 118.836563,108.999998 110,108.999998 C101.163437,108.999998 94,105.119795 94,100.333334 L94,65.666664 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M218,117.666672 L218,117.666672 C218,112.880203 225.163452,109 234,109 C242.836548,109 250,112.880203 250,117.666672 L250,152.333327 C250,157.119796 242.836548,160.999999 234,160.999999 C225.163452,160.999999 218,157.119796 218,152.333327 L218,117.666672 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M250,118 L250,118 C250,123.068025 242.836548,127.17646 234,127.17646 C225.163452,127.17646 218,123.068025 218,118" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M218,117.666672 L218,117.666672 C218,112.880203 225.163452,109 234,109 C242.836548,109 250,112.880203 250,117.666672 L250,152.333327 C250,157.119796 242.836548,160.999999 234,160.999999 C225.163452,160.999999 218,157.119796 218,152.333327 L218,117.666672 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M250,118 L250,118 C250,123.068025 242.836548,127.17646 234,127.17646 C225.163452,127.17646 218,123.068025 218,118" id="Shape" stroke="#E06666" stroke-dasharray="8,6" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M218,117.666672 L218,117.666672 C218,112.880203 225.163452,109 234,109 C242.836548,109 250,112.880203 250,117.666672 L250,152.333327 C250,157.119796 242.836548,160.999999 234,160.999999 C225.163452,160.999999 218,157.119796 218,152.333327 L218,117.666672 Z" id="Shape" stroke="#E06666" stroke-dasharray="8,6" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M218,153 L218,153 C218,148.581726 225.163452,145 234,145 L234,145 C242.836548,145 250,148.581726 250,153 L250,153 C250,157.418274 242.836548,161 234,161 L234,161 C225.163452,161 218,157.418274 218,153 L218,153 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M223,147 L246.130274,158.805621 M246.130274,147 L223,158.805621" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M218,153 L218,153 C218,148.581726 225.163452,145 234,145 L234,145 C242.836548,145 250,148.581726 250,153 L250,153 C250,157.418274 242.836548,161 234,161 L234,161 C225.163452,161 218,157.418274 218,153 L218,153 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M223,147 L246.130274,158.805621 M246.130274,147 L223,158.805621" id="Shape" stroke="#990000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M218,153 L218,153 C218,148.581726 225.163452,145 234,145 L234,145 C242.836548,145 250,148.581726 250,153 L250,153 C250,157.418274 242.836548,161 234,161 L234,161 C225.163452,161 218,157.418274 218,153 L218,153 Z" id="Shape" stroke="#990000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,185 L126,217" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,185 L126,217" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M142,185 L126,217" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M142,185 L126,217" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M142,185 L166,201" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M142,185 L166,201" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M170,153 L194,169" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M170,153 L194,169" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118,121 L86,101" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118,121 L86,101" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,105 L162,73" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,105 L162,73" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,73 L178,105" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,73 L178,105" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M30,145 L90,161" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M30,145 L90,161" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M54,137 L90,153" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M54,137 L90,153" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M210,137 L278,137" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M210,137 L278,137" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M278,137 L210,125" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M278,137 L210,125" id="Shape" stroke="#434343" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M74.3072797,153 L122.250108,189.962886 L109.942836,205.956282 L62,168.99341 L74.3072797,153 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<text id="Agent" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="93" y="50">Agent</tspan>
|
||||
</text>
|
||||
<text id="NavMesh" sketch:type="MSTextLayer" transform="translate(89.055969, 179.358792) rotate(38.000000) translate(-89.055969, -179.358792) " font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="67.5559692" y="182.858792">NavMesh</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="148px" height="110px" viewBox="0 0 148 110" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshUnderstandingAvoid</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshUnderstandingAvoid" sketch:type="MSArtboardGroup">
|
||||
<path d="M16.503935,27.496065 L16.503935,27.496065 C16.503935,22.2515355 24.6756195,18.000002 34.7559035,18.000002 L34.7559035,18.000002 C44.8361875,18.000002 53.007872,22.2515355 53.007872,27.496065 L53.007872,27.496065 C53.007872,32.7405945 44.8361875,36.992128 34.7559035,36.992128 L34.7559035,36.992128 C24.6756195,36.992128 16.503935,32.7405945 16.503935,27.496065 L16.503935,27.496065 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M16.503935,27.496065 L16.503935,27.496065 C16.503935,22.2515355 24.6756195,18.000002 34.7559035,18.000002 L34.7559035,18.000002 C44.8361875,18.000002 53.007872,22.2515355 53.007872,27.496065 L53.007872,27.496065 C53.007872,32.7405945 44.8361875,36.992128 34.7559035,36.992128 L34.7559035,36.992128 C24.6756195,36.992128 16.503935,32.7405945 16.503935,27.496065 L16.503935,27.496065 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M92.328065,53.17035 L101.339677,48.271035 L96.480241,57.9641425 L104.430986,56.1575095 L99.081834,60.671975 L107.936784,64.8462915 L97.9294445,66.0492563 L98.6906903,70.2630778 L94.6755383,70.5688868 L96.4191906,78.1632168 L90.1394511,72.7361998 L88.3536998,78.1393448 L84.717103,73.5750901 L81.5273142,78.1212251 L79.6694956,74.2729661 L75.8760081,77.3907258 L75.0770732,73.777887 L67.9564677,77.7396943 L70.3269663,71.8990723 L64.6141674,68.5038849 L69.9891521,65.8583314 L66.1864788,59.0487154 L73.9065258,59.8485124 L71.707246,52.0513324 L79.2467205,54.4783191 L80.9533397,46.6345461 L85.7845165,54.4439026 L91.219865,47.6383531 L92.328065,53.17035 Z" id="Shape" fill="#FF0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M92.328065,53.17035 L101.339677,48.271035 L96.480241,57.9641425 L104.430986,56.1575095 L99.081834,60.671975 L107.936784,64.8462915 L97.9294445,66.0492563 L98.6906903,70.2630778 L94.6755383,70.5688868 L96.4191906,78.1632168 L90.1394511,72.7361998 L88.3536998,78.1393448 L84.717103,73.5750901 L81.5273142,78.1212251 L79.6694956,74.2729661 L75.8760081,77.3907258 L75.0770732,73.777887 L67.9564677,77.7396943 L70.3269663,71.8990723 L64.6141674,68.5038849 L69.9891521,65.8583314 L66.1864788,59.0487154 L73.9065258,59.8485124 L71.707246,52.0513324 L79.2467205,54.4783191 L80.9533397,46.6345461 L85.7845165,54.4439026 L91.219865,47.6383531 L92.328065,53.17035 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M35,28 L64.496063,50.503937" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M35,28 L57.340775,45.04483" id="Shape" stroke="#FF0000" stroke-width="1.5" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M55.837945,47.0146 L62.752679,49.1738178 L58.8436061,43.0750553 L55.837945,47.0146 Z" id="Shape" stroke="#FF0000" stroke-width="1.5" fill="#FF0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M56.5,74.996065 L56.5,74.996065 C56.5,69.7515355 64.671692,65.500002 74.7519685,65.500002 L74.7519685,65.500002 C84.83226,65.500002 93.003937,69.7515355 93.003937,74.996065 L93.003937,74.996065 C93.003937,80.2405945 84.8322605,84.492128 74.7519685,84.492128 L74.7519685,84.492128 C64.671692,84.492128 56.5,80.2405945 56.5,74.996065 L56.5,74.996065 Z" id="Shape" fill="#EFEFEF" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M61.84588,68.281335 L87.658067,81.7107935 M87.658067,68.281335 L61.84588,81.7107935" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M56.5,74.996065 L56.5,74.996065 C56.5,69.7515355 64.671692,65.500002 74.7519685,65.500002 L74.7519685,65.500002 C84.83226,65.500002 93.003937,69.7515355 93.003937,74.996065 L93.003937,74.996065 C93.003937,80.2405945 84.8322605,84.492128 74.7519685,84.492128 L74.7519685,84.492128 C64.671692,84.492128 56.5,80.2405945 56.5,74.996065 L56.5,74.996065 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M61.84588,68.281335 L87.658067,81.7107935 M87.658067,68.281335 L61.84588,81.7107935" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M56.5,74.996065 L56.5,74.996065 C56.5,69.7515355 64.671692,65.500002 74.7519685,65.500002 L74.7519685,65.500002 C84.83226,65.500002 93.003937,69.7515355 93.003937,74.996065 L93.003937,74.996065 C93.003937,80.2405945 84.8322605,84.492128 74.7519685,84.492128 L74.7519685,84.492128 C64.671692,84.492128 56.5,80.2405945 56.5,74.996065 L56.5,74.996065 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M96,71 L96,71 C96,65.7554705 104.171692,61.503937 114.251969,61.503937 L114.251969,61.503937 C124.33226,61.503937 132.503937,65.7554705 132.503937,71 L132.503937,71 C132.503937,76.2445295 124.332261,80.496063 114.251969,80.496063 L114.251969,80.496063 C104.171692,80.496063 96,76.2445295 96,71 L96,71 Z" id="Shape" fill="#EFEFEF" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M101.34587,64.28527 L127.158065,77.7147285 M127.158065,64.28527 L101.34587,77.7147285" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M96,71 L96,71 C96,65.7554705 104.171692,61.503937 114.251969,61.503937 L114.251969,61.503937 C124.33226,61.503937 132.503937,65.7554705 132.503937,71 L132.503937,71 C132.503937,76.2445295 124.332261,80.496063 114.251969,80.496063 L114.251969,80.496063 C104.171692,80.496063 96,76.2445295 96,71 L96,71 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M101.34587,64.28527 L127.158065,77.7147285 M127.158065,64.28527 L101.34587,77.7147285" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M96,71 L96,71 C96,65.7554705 104.171692,61.503937 114.251969,61.503937 L114.251969,61.503937 C124.33226,61.503937 132.503937,65.7554705 132.503937,71 L132.503937,71 C132.503937,76.2445295 124.332261,80.496063 114.251969,80.496063 L114.251969,80.496063 C104.171692,80.496063 96,76.2445295 96,71 L96,71 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M81.5,93.98819 L81.5,93.98819 C81.5,88.7436605 89.671692,84.492127 99.7519685,84.492127 L99.7519685,84.492127 C109.83226,84.492127 118.003937,88.7436605 118.003937,93.98819 L118.003937,93.98819 C118.003937,99.2327275 109.832261,103.484253 99.7519685,103.484253 L99.7519685,103.484253 C89.671692,103.484253 81.5,99.232727 81.5,93.98819 L81.5,93.98819 Z" id="Shape" fill="#EFEFEF" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M86.84587,87.27346 L112.658065,100.702926 M112.658065,87.27346 L86.84587,100.702926" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M81.5,93.98819 L81.5,93.98819 C81.5,88.7436605 89.671692,84.492127 99.7519685,84.492127 L99.7519685,84.492127 C109.83226,84.492127 118.003937,88.7436605 118.003937,93.98819 L118.003937,93.98819 C118.003937,99.2327275 109.832261,103.484253 99.7519685,103.484253 L99.7519685,103.484253 C89.671692,103.484253 81.5,99.232727 81.5,93.98819 L81.5,93.98819 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M86.84587,87.27346 L112.658065,100.702926 M112.658065,87.27346 L86.84587,100.702926" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M81.5,93.98819 L81.5,93.98819 C81.5,88.7436605 89.671692,84.492127 99.7519685,84.492127 L99.7519685,84.492127 C109.83226,84.492127 118.003937,88.7436605 118.003937,93.98819 L118.003937,93.98819 C118.003937,99.2327275 109.832261,103.484253 99.7519685,103.484253 L99.7519685,103.484253 C89.671692,103.484253 81.5,99.232727 81.5,93.98819 L81.5,93.98819 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M35,28.5 L41,68.5" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M35,28.5 L39.6649322,59.599571" id="Shape" stroke="#33D0F4" stroke-width="1.5" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M37.21475,59.9671 L40.674711,66.3314035 L42.1151178,59.232046 L37.21475,59.9671 Z" id="Shape" stroke="#33D0F4" stroke-width="1.5" fill="#33D0F4" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.7 KiB |
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="335px" height="249px" viewBox="0 0 335 249" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshUnderstandingCarve</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshUnderstandingCarve" sketch:type="MSArtboardGroup">
|
||||
<path d="M20.259843,77.3331422 L20.259843,77.3331422 C20.259843,56.6111384 37.0583451,39.812638 57.7803472,39.812638 L57.7803472,39.812638 C67.7314009,39.812638 77.274889,43.7656783 84.3113507,50.8021369 C91.3478057,57.8385985 95.3008532,67.3820831 95.3008532,77.3331431 L95.3008532,77.3331431 C95.3008532,98.0551407 78.502351,114.853643 57.780349,114.853643 L57.780349,114.853643 C37.0583451,114.853643 20.2598448,98.0551407 20.2598448,77.3331431 L20.259843,77.3331422 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M20.259843,77.3331422 L20.259843,77.3331422 C20.259843,56.6111384 37.0583451,39.812638 57.7803472,39.812638 L57.7803472,39.812638 C67.7314009,39.812638 77.274889,43.7656783 84.3113507,50.8021369 C91.3478057,57.8385985 95.3008532,67.3820831 95.3008532,77.3331431 L95.3008532,77.3331431 C95.3008532,98.0551407 78.502351,114.853643 57.780349,114.853643 L57.780349,114.853643 C37.0583451,114.853643 20.2598448,98.0551407 20.2598448,77.3331431 L20.259843,77.3331422 Z" id="Shape" stroke="#000000" stroke-dasharray="2,6" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M183.317728,77.9874393 L183.317728,77.9874393 C183.317728,57.2654386 200.116236,40.4669374 220.838232,40.4669374 L220.838232,40.4669374 C230.789293,40.4669374 240.332766,44.4199813 247.369236,51.4564398 C254.405704,58.4928979 258.358724,68.036386 258.358724,77.9874398 L258.358724,77.9874398 C258.358724,98.7094436 241.56023,115.507944 220.838233,115.507944 L220.838233,115.507944 C200.116236,115.507944 183.317729,98.7094418 183.317729,77.9874398 L183.317728,77.9874393 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M183.317728,77.9874393 L183.317728,77.9874393 C183.317728,57.2654386 200.116236,40.4669374 220.838232,40.4669374 L220.838232,40.4669374 C230.789293,40.4669374 240.332766,44.4199813 247.369236,51.4564398 C254.405704,58.4928979 258.358724,68.036386 258.358724,77.9874398 L258.358724,77.9874398 C258.358724,98.7094436 241.56023,115.507944 220.838233,115.507944 L220.838233,115.507944 C200.116236,115.507944 183.317729,98.7094418 183.317729,77.9874398 L183.317728,77.9874393 Z" id="Shape" stroke="#000000" stroke-dasharray="2,6" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M45.0460303,77.3331422 L45.0460303,77.3331422 C45.0460303,70.300171 50.7473796,64.5988249 57.7803476,64.5988249 L57.7803476,64.5988249 C61.1576991,64.5988249 64.3967206,65.9404712 66.7848666,68.3286166 C69.1730188,70.7167689 70.5146654,73.9557873 70.5146654,77.3331417 L70.5146654,77.3331417 C70.5146654,84.3661062 64.8133197,90.067459 57.7803481,90.067459 L57.7803481,90.067459 C50.74738,90.067459 45.0460308,84.3661062 45.0460308,77.3331417 L45.0460303,77.3331422 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M45.0460303,77.3331422 L45.0460303,77.3331422 C45.0460303,70.300171 50.7473796,64.5988249 57.7803476,64.5988249 L57.7803476,64.5988249 C61.1576991,64.5988249 64.3967206,65.9404712 66.7848666,68.3286166 C69.1730188,70.7167689 70.5146654,73.9557873 70.5146654,77.3331417 L70.5146654,77.3331417 C70.5146654,84.3661062 64.8133197,90.067459 57.7803481,90.067459 L57.7803481,90.067459 C50.74738,90.067459 45.0460308,84.3661062 45.0460308,77.3331417 L45.0460303,77.3331422 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M70.5111472,39.2767626 L70.5111472,39.2767626 C70.5111472,30.763372 77.4126124,23.8619067 85.9260031,23.8619067 L85.9260031,23.8619067 C90.0142784,23.8619067 93.9351085,25.4859678 96.8259505,28.3768129 C99.7167993,31.2676599 101.340859,35.1884869 101.340859,39.2767622 L101.340859,39.2767622 C101.340859,47.7901528 94.4393933,54.6916181 85.9260026,54.6916181 L85.9260026,54.6916181 C77.412612,54.6916181 70.5111467,47.7901528 70.5111467,39.2767622 L70.5111472,39.2767626 Z" id="Shape" fill="#CCCCCC" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M70.5111472,39.2767626 L70.5111472,39.2767626 C70.5111472,30.763372 77.4126124,23.8619067 85.9260031,23.8619067 L85.9260031,23.8619067 C90.0142784,23.8619067 93.9351085,25.4859678 96.8259505,28.3768129 C99.7167993,31.2676599 101.340859,35.1884869 101.340859,39.2767622 L101.340859,39.2767622 C101.340859,47.7901528 94.4393933,54.6916181 85.9260026,54.6916181 L85.9260026,54.6916181 C77.412612,54.6916181 70.5111467,47.7901528 70.5111467,39.2767622 L70.5111472,39.2767626 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M95.3012061,52.1773327 L122.542796,43.4814108 L137.75362,91.1541959 L110.51203,99.8501178 L95.3012061,52.1773327 Z" id="Shape" fill="#CCCCCC" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M95.3012061,52.1773327 L122.542796,43.4814108 L137.75362,91.1541959 L110.51203,99.8501178 L95.3012061,52.1773327 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M88.6549982,90.0668756 L114.41912,102.463487 L102.402431,127.425561 L76.6383022,115.028949 L88.6549982,90.0668756 Z" id="Shape" fill="#CCCCCC" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M88.6549982,90.0668756 L114.41912,102.463487 L102.402431,127.425561 L76.6383022,115.028949 L88.6549982,90.0668756 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M58.001967,78.0015166 L101.340857,72.6404394" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M58.001967,78.0015166 L96.0203365,73.2985965" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M96.2015186,74.7632786 L100.044513,72.8007978 L95.8391562,71.833914 L96.2015186,74.7632786 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M208.103922,77.9874483 L208.103922,77.9874483 C208.103922,70.9544771 213.805275,65.253131 220.83824,65.253131 L220.83824,65.253131 C224.215595,65.253131 227.454619,66.5947773 229.842765,68.9829226 C232.23091,71.3710681 233.572557,74.6100934 233.572557,77.9874478 L233.572557,77.9874478 C233.572557,85.0204123 227.871204,90.7217651 220.838239,90.7217651 L220.838239,90.7217651 C213.805275,90.7217651 208.103922,85.0204123 208.103922,77.9874478 L208.103922,77.9874483 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M208.103922,77.9874483 L208.103922,77.9874483 C208.103922,70.9544771 213.805275,65.253131 220.83824,65.253131 L220.83824,65.253131 C224.215595,65.253131 227.454619,66.5947773 229.842765,68.9829226 C232.23091,71.3710681 233.572557,74.6100934 233.572557,77.9874478 L233.572557,77.9874478 C233.572557,85.0204123 227.871204,90.7217651 220.838239,90.7217651 L220.838239,90.7217651 C213.805275,90.7217651 208.103922,85.0204123 208.103922,77.9874478 L208.103922,77.9874483 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M233.569039,39.9310669 L233.569039,39.9310669 C233.569039,31.4176763 240.470505,24.5162096 248.983881,24.5162096 L248.983881,24.5162096 C253.072177,24.5162096 256.992994,26.1402708 259.883849,29.0311177 C262.774678,31.9219646 264.398751,35.8427916 264.398751,39.9310669 L264.398751,39.9310669 C264.398751,48.444454 257.497285,55.3459228 248.983881,55.3459228 L248.983881,55.3459228 C240.470504,55.3459228 233.569039,48.444454 233.569039,39.9310669 L233.569039,39.9310669 Z" id="Shape" fill="#CCCCCC" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M233.569039,39.9310669 L233.569039,39.9310669 C233.569039,31.4176763 240.470505,24.5162096 248.983881,24.5162096 L248.983881,24.5162096 C253.072177,24.5162096 256.992994,26.1402708 259.883849,29.0311177 C262.774678,31.9219646 264.398751,35.8427916 264.398751,39.9310669 L264.398751,39.9310669 C264.398751,48.444454 257.497285,55.3459228 248.983881,55.3459228 L248.983881,55.3459228 C240.470504,55.3459228 233.569039,48.444454 233.569039,39.9310669 L233.569039,39.9310669 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M258.359094,52.8316388 L285.600684,44.1357169 L300.811507,91.8085019 L273.569917,100.504424 L258.359094,52.8316388 Z" id="Shape" fill="#CCCCCC" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M258.359094,52.8316388 L285.600684,44.1357169 L300.811507,91.8085019 L273.569917,100.504424 L258.359094,52.8316388 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M251.712877,90.7211861 L277.477012,103.117798 L265.460317,128.079872 L239.696181,115.68326 L251.712877,90.7211861 Z" id="Shape" fill="#CCCCCC" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M251.712877,90.7211861 L277.477012,103.117798 L265.460317,128.079872 L239.696181,115.68326 L251.712877,90.7211861 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M221.059859,78.6558227 L219.272833,34.6696601" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M221.059859,78.6558227 L219.490458,40.0263171" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M220.965089,39.9664093 L219.325855,35.9748121 L218.015825,40.0862276 L220.965089,39.9664093 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M58.4487234,78.3661905 L160.309191,77.9159165"></path>
|
||||
<path id="Shape" stroke="#CC0000" stroke-width="1.5" fill="#000000" sketch:type="MSShapeGroup" d="M58.4487234,78.3661905 L160.309191,77.9159165"></path>
|
||||
<path d="M274.670618,34.2211462 L273.330349,21.7119642 L244.737937,13.2235919 L226.420923,27.9665543 L226.420923,48.9641085 L241.163885,67.2811224 L249.205501,68.1746353 L253.226309,81.1305719 L245.184693,78.0032768 L224.187141,119.551619 L271.096566,142.336197 L285.392772,108.382714 L311.751402,99.0008293 L288.073311,31.0938511 L274.670618,34.2211462 Z" id="Shape" stroke="#3D85C6" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M221.953372,78.8967897 L224.640946,27.9735925" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M221.953372,78.8967897 L224.640946,27.9735925" id="Shape" stroke="#CC0000" stroke-width="1.5" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M224.633911,27.9665534 L246.078219,12.3335959" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M224.633911,27.9665534 L246.078219,12.3335959" id="Shape" stroke="#CC0000" stroke-width="1.5" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M245.63145,12.3300781 L313.538428,20.3646589" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M245.63145,12.3300781 L313.538428,20.3646589" id="Shape" stroke="#CC0000" stroke-width="1.5" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M30.303068,160.122618 L150.920269,160.122618 L150.920269,175.755576 L30.303068,175.755576 L30.303068,160.122618 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M30.303068,223.562032 L150.920269,223.562032 L150.920269,239.19499 L30.303068,239.19499 L30.303068,223.562032 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M30.7498244,175 L150.480549,175"></path>
|
||||
<path d="M30.7498244,175 L150.480549,175" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M30.7463066,222 L150.477031,222"></path>
|
||||
<path d="M30.7463066,222 L150.477031,222" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M84.5784664,180.396756 L127.382663,166.73375 L142.593486,214.40654 L99.78929,228.069545 L84.5784664,180.396756 Z" id="Shape" fill="#CCCCCC" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M84.5784664,180.396756 L127.382663,166.73375 L142.593486,214.40654 L99.78929,228.069545 L84.5784664,180.396756 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M45.0460303,199.883941 L45.0460303,199.883941 C45.0460303,192.850977 50.7473796,187.149624 57.7803476,187.149624 L57.7803476,187.149624 C61.1576991,187.149624 64.3967206,188.49127 66.7848666,190.879415 C69.1730188,193.267561 70.5146654,196.506586 70.5146654,199.883941 L70.5146654,199.883941 C70.5146654,206.916905 64.8133197,212.618258 57.7803481,212.618258 L57.7803481,212.618258 C50.74738,212.618258 45.0460308,206.916905 45.0460308,199.883941 L45.0460303,199.883941 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M45.0460303,199.883941 L45.0460303,199.883941 C45.0460303,192.850977 50.7473796,187.149624 57.7803476,187.149624 L57.7803476,187.149624 C61.1576991,187.149624 64.3967206,188.49127 66.7848666,190.879415 C69.1730188,193.267561 70.5146654,196.506586 70.5146654,199.883941 L70.5146654,199.883941 C70.5146654,206.916905 64.8133197,212.618258 57.7803481,212.618258 L57.7803481,212.618258 C50.74738,212.618258 45.0460308,206.916905 45.0460308,199.883941 L45.0460303,199.883941 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M58.4487234,200.916998 L160.309191,200.466724"></path>
|
||||
<path id="Shape" stroke="#CC0000" stroke-width="1.5" fill="#000000" sketch:type="MSShapeGroup" d="M58.4487234,200.916998 L160.309191,200.466724"></path>
|
||||
<path d="M58.001967,200.552315 L78.1095243,205.252052" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M58.001967,200.552315 L72.8891423,204.031897" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M72.5532485,205.469009 L76.837573,204.954764 L73.2250397,202.594786 L72.5532485,205.469009 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M182.870391,163.456288 L303.487592,163.456288 L303.487592,179.089245 L182.870391,179.089245 L182.870391,163.456288 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M182.870391,226.895702 L303.487592,226.895702 L303.487592,242.528646 L182.870391,242.528646 L182.870391,226.895702 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M183.317147,178 L303.047872,178"></path>
|
||||
<path d="M183.317147,178 L303.047872,178" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M183.313631,226 L303.044356,226"></path>
|
||||
<path d="M183.313631,226 L303.044356,226" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M237.145803,183.730426 L279.949999,170.06742 L295.160823,217.740196 L252.356626,231.403202 L237.145803,183.730426 Z" id="Shape" fill="#CCCCCC" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M237.145803,183.730426 L279.949999,170.06742 L295.160823,217.740196 L252.356626,231.403202 L237.145803,183.730426 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M197.613353,203.217611 L197.613353,203.217611 C197.613353,196.184646 203.314706,190.483293 210.34767,190.483293 L210.34767,190.483293 C213.725025,190.483293 216.96405,191.82494 219.352196,194.213085 C221.740341,196.601231 223.081987,199.840256 223.081987,203.21761 L223.081987,203.21761 C223.081987,210.250575 217.380634,215.951928 210.34767,215.951928 L210.34767,215.951928 C203.314706,215.951928 197.613353,210.250575 197.613353,203.21761 L197.613353,203.217611 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M197.613353,203.217611 L197.613353,203.217611 C197.613353,196.184646 203.314706,190.483293 210.34767,190.483293 L210.34767,190.483293 C213.725025,190.483293 216.96405,191.82494 219.352196,194.213085 C221.740341,196.601231 223.081987,199.840256 223.081987,203.21761 L223.081987,203.21761 C223.081987,210.250575 217.380634,215.951928 210.34767,215.951928 L210.34767,215.951928 C203.314706,215.951928 197.613353,210.250575 197.613353,203.21761 L197.613353,203.217611 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M211.016046,204.250672 L183.099045,202.111864" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M211.016046,204.250672 L183.099045,202.111864" id="Shape" stroke="#CC0000" stroke-width="1.5" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M210.56929,203.885985 L179.964714,196.751952" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M210.56929,203.885985 L185.185813,197.969012" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M185.520863,196.531704 L181.236838,197.048498 L184.850769,199.406322 L185.520863,196.531704 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M221.953372,173.785623 L288.382895,152.580521 L311.318728,224.455545 L244.889205,245.660634 L221.953372,173.785623 Z" id="Shape" stroke="#0B5394" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="335px" height="112px" viewBox="0 0 335 112" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshUnderstandingCorridor</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshUnderstandingCorridor" sketch:type="MSArtboardGroup">
|
||||
<path d="M4.4179785,44.673385 L30.0915795,60.719375 L65.3927765,47.882583 L78.2295765,47.882583 L103.903177,63.928588 L103.903177,73.556182 L71.8111815,86.3929895 L91.0663765,99.2297815 L158.459576,73.5561815 L65.3927765,22.2089815 L4.4179785,44.673385 Z" id="Shape" fill-opacity="0.3808" fill="#525A61" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M4.4179785,44.673385 L30.0915795,60.719375 L65.3927765,47.882583 L78.2295765,47.882583 L103.903177,63.928588 L103.903177,73.556182 L71.8111815,86.3929895 L91.0663765,99.2297815 L158.459576,73.5561815 L65.3927765,22.2089815 L4.4179785,44.673385 Z" id="Shape" stroke="#000000" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M71.80675,86.38864 L91.066592,99.223296" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M71.80675,86.38864 L91.066592,99.223296" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M30.08989,60.71678 L4.4206,44.669539" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M30.08989,60.71678 L4.4206,44.669539" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M65.38877,47.88085 L65.38877,22.2115535" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M65.38877,47.88085 L65.38877,22.2115535" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M65.38877,22.208985 L78.223418,47.8782735" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M65.38877,22.208985 L78.223418,47.8782735" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M103.896635,73.55272 L158.447813,73.55272" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M103.896635,73.55272 L158.447813,73.55272" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M158.44945,73.55272 L103.898272,63.930665" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M158.44945,73.55272 L103.898272,63.930665" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M100.28653,86.388 L100.28653,86.388 C100.28653,82.8438105 106.032792,79.9706875 113.121171,79.9706875 L113.121171,79.9706875 C120.20955,79.9706875 125.955811,82.8438106 125.955811,86.388 L125.955811,86.388 C125.955811,89.9321895 120.20955,92.805328 113.121171,92.805328 L113.121171,92.805328 C106.032792,92.805328 100.28653,89.9321895 100.28653,86.388 L100.28653,86.388 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M104.04571,81.850265 L122.196642,90.925735 M122.196642,81.850265 L104.04571,90.925735" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M100.28653,86.388 L100.28653,86.388 C100.28653,82.8438105 106.032792,79.9706875 113.121171,79.9706875 L113.121171,79.9706875 C120.20955,79.9706875 125.955811,82.8438106 125.955811,86.388 L125.955811,86.388 C125.955811,89.9321895 120.20955,92.805328 113.121171,92.805328 L113.121171,92.805328 C106.032792,92.805328 100.28653,89.9321895 100.28653,86.388 L100.28653,86.388 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M104.04571,81.850265 L122.196642,90.925735 M122.196642,81.850265 L104.04571,90.925735" id="Shape" stroke="#CC0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M100.28653,86.388 L100.28653,86.388 C100.28653,82.8438105 106.032792,79.9706875 113.121171,79.9706875 L113.121171,79.9706875 C120.20955,79.9706875 125.955811,82.8438106 125.955811,86.388 L125.955811,86.388 C125.955811,89.9321895 120.20955,92.805328 113.121171,92.805328 L113.121171,92.805328 C106.032792,92.805328 100.28653,89.9321895 100.28653,86.388 L100.28653,86.388 Z" id="Shape" stroke="#CC0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M14.44607,42.26449 L14.44607,42.26449 C14.44607,38.7203005 20.1923355,35.847162 27.280716,35.847162 L27.280716,35.847162 C34.369095,35.847162 40.1153605,38.7203005 40.1153605,42.26449 L40.1153605,42.26449 C40.1153605,45.8086795 34.369095,48.6818102 27.280716,48.6818102 L27.280716,48.6818102 C20.192335,48.6818102 14.44607,45.8086794 14.44607,42.26449 L14.44607,42.26449 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M14.44607,42.26449 L14.44607,42.26449 C14.44607,38.7203005 20.1923355,35.847162 27.280716,35.847162 L27.280716,35.847162 C34.369095,35.847162 40.1153605,38.7203005 40.1153605,42.26449 L40.1153605,42.26449 C40.1153605,45.8086795 34.369095,48.6818102 27.280716,48.6818102 L27.280716,48.6818102 C20.192335,48.6818102 14.44607,45.8086794 14.44607,42.26449 L14.44607,42.26449 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M26.8809,41.864005 L76.21948,45.0766057" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M26.8809,41.864005 L70.23216,44.6867513" id="Shape" stroke="#FF0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M70.12485,46.335 L74.760676,44.9816217 L70.3394955,43.0385141 L70.12485,46.335 Z" id="Shape" stroke="#FF0000" fill="#FF0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M177.50563,44.673385 L203.17923,60.719375 L238.48044,47.882583 L251.317232,47.882583 L276.990847,63.928588 L276.990847,73.556182 L244.898837,86.3929895 L264.154025,99.2297815 L331.547245,73.5561815 L238.480445,22.2089815 L177.50563,44.673385 Z" id="Shape" fill-opacity="0.3808" fill="#525A61" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M177.50563,44.673385 L203.17923,60.719375 L238.48044,47.882583 L251.317232,47.882583 L276.990847,63.928588 L276.990847,73.556182 L244.898837,86.3929895 L264.154025,99.2297815 L331.547245,73.5561815 L238.480445,22.2089815 L177.50563,44.673385 Z" id="Shape" stroke="#000000" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M244.8944,86.38864 L264.154226,99.223296" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M244.8944,86.38864 L264.154226,99.223296" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M203.17755,60.71678 L177.508254,44.669539" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M203.17755,60.71678 L177.508254,44.669539" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M238.47645,47.88085 L238.47645,22.2115535" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M238.47645,47.88085 L238.47645,22.2115535" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M238.47645,22.208985 L251.311075,47.8782735" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M238.47645,22.208985 L251.311075,47.8782735" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M276.984285,73.55272 L331.535463,73.55272" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M276.984285,73.55272 L331.535463,73.55272" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M331.5371,73.55272 L276.985922,63.930665" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M331.5371,73.55272 L276.985922,63.930665" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M273.374175,86.388 L273.374175,86.388 C273.374175,82.8438105 279.120452,79.9706875 286.208831,79.9706875 L286.208831,79.9706875 C293.29721,79.9706875 299.043487,82.8438106 299.043487,86.388 L299.043487,86.388 C299.043487,89.9321895 293.29721,92.805328 286.208831,92.805328 L286.208831,92.805328 C279.120452,92.805328 273.374175,89.9321895 273.374175,86.388 L273.374175,86.388 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M277.13335,81.850265 L295.28429,90.925735 M295.28429,81.850265 L277.13335,90.925735" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M273.374175,86.388 L273.374175,86.388 C273.374175,82.8438105 279.120452,79.9706875 286.208831,79.9706875 L286.208831,79.9706875 C293.29721,79.9706875 299.043487,82.8438106 299.043487,86.388 L299.043487,86.388 C299.043487,89.9321895 293.29721,92.805328 286.208831,92.805328 L286.208831,92.805328 C279.120452,92.805328 273.374175,89.9321895 273.374175,86.388 L273.374175,86.388 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M277.13335,81.850265 L295.28429,90.925735 M295.28429,81.850265 L277.13335,90.925735" id="Shape" stroke="#CC0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M273.374175,86.388 L273.374175,86.388 C273.374175,82.8438105 279.120452,79.9706875 286.208831,79.9706875 L286.208831,79.9706875 C293.29721,79.9706875 299.043487,82.8438106 299.043487,86.388 L299.043487,86.388 C299.043487,89.9321895 293.29721,92.805328 286.208831,92.805328 L286.208831,92.805328 C279.120452,92.805328 273.374175,89.9321895 273.374175,86.388 L273.374175,86.388 Z" id="Shape" stroke="#CC0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M251.31238,45.07299 L278.997439,61.907638" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M251.31238,45.07299 L273.870821,58.7902675" id="Shape" stroke="#FF0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M273.012635,60.20155 L277.748322,61.1480832 L274.729005,57.378964 L273.012635,60.20155 Z" id="Shape" stroke="#FF0000" fill="#FF0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M280.1933,63.12352 L286.209047,85.580215" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M280.19327,63.12352 L284.656466,79.7845615" id="Shape" stroke="#FF0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M283.061,80.21196 L285.830745,84.1681062 L286.251948,79.3571627 L283.061,80.21196 Z" id="Shape" stroke="#FF0000" fill="#FF0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M188.73709,41.664385 L188.73709,41.664385 C188.73709,38.1201955 194.483367,35.247057 201.571746,35.247057 L201.571746,35.247057 C208.660125,35.247057 214.406387,38.1201955 214.406387,41.664385 L214.406387,41.664385 C214.406387,45.2085745 208.660125,48.0817053 201.571746,48.0817053 L201.571746,48.0817053 C194.483367,48.0817053 188.73709,45.2085745 188.73709,41.664385 L188.73709,41.664385 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M188.73709,41.664385 L188.73709,41.664385 C188.73709,38.1201955 194.483367,35.247057 201.571746,35.247057 L201.571746,35.247057 C208.660125,35.247057 214.406387,38.1201955 214.406387,41.664385 L214.406387,41.664385 C214.406387,45.2085745 208.660125,48.0817053 201.571746,48.0817053 L201.571746,48.0817053 C194.483367,48.0817053 188.73709,45.2085745 188.73709,41.664385 L188.73709,41.664385 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M201.57306,41.462885 L249.30533,45.0691853" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M201.57306,41.462885 L243.32242,44.617159" id="Shape" stroke="#FF0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M243.19797,46.2642 L247.847598,44.9590471 L243.446841,42.9701174 L243.19797,46.2642 Z" id="Shape" stroke="#FF0000" fill="#FF0000" sketch:type="MSShapeGroup"></path>
|
||||
<text id="Destination" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="107" y="105">Destination</tspan>
|
||||
</text>
|
||||
<text id="Start" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="179" y="30">Start</tspan>
|
||||
</text>
|
||||
<text id="Start-copy" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="10" y="30">Start</tspan>
|
||||
</text>
|
||||
<text id="Destination-copy" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="280.08765" y="105">Destination</tspan>
|
||||
</text>
|
||||
<text id="Corridor" sketch:type="MSTextLayer" transform="translate(99.500000, 50.488193) rotate(34.000000) translate(-99.500000, -50.488193) " font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="81" y="53.9881928">Corridor</tspan>
|
||||
</text>
|
||||
<text id="Corridor-copy" sketch:type="MSTextLayer" transform="translate(274.062809, 50.488193) rotate(34.000000) translate(-274.062809, -50.488193) " font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="255.562809" y="53.9881928">Corridor</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="400px" height="195px" viewBox="0 0 400 195" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshUnderstandingLoop</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshUnderstandingLoop" sketch:type="MSArtboardGroup">
|
||||
<path d="M324.5,132.5 L354.591522,132.5 C367.517487,132.5 377.996063,142.978562 377.996063,155.904525 L377.996063,159.858962 C377.996063,166.066238 375.530243,172.019271 371.141021,176.408477 C366.751831,180.797668 360.798797,183.263504 354.591521,183.263504 L351.248016,183.263504 L351.248016,188.01181 L337.874023,182.013824 L351.248016,176.015854 L351.248016,180.76416 L354.591521,180.76416 C366.137145,180.76416 375.496734,171.404587 375.496734,159.858963 L375.496734,155.904526 C375.496734,144.358902 366.137145,134.999329 354.591521,134.999329 L324.499999,134.999329 L324.5,132.5 Z" id="Shape" fill="#E69138" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M328.5,184 L38.93112,184 C25.4381865,184 14.500002,173.061814 14.500002,159.568878 L14.500002,159.568878 C14.500002,153.08934 17.073988,146.875198 21.6557105,142.293473 C26.2374345,137.711747 32.451586,135.137773 38.9311205,135.137773 L43.254443,135.137773 L43.254443,130.503938 L58.500823,136.75174 L43.254443,142.999543 L43.254443,138.365723 L38.9311205,138.365723 C27.2209365,138.365723 17.7279555,147.858704 17.7279555,159.568878 L17.7279555,159.568878 C17.7279555,171.279068 27.2209365,180.772048 38.9311205,180.772048 L328.500001,180.772048 L328.5,184 Z" id="Shape" fill="#E69138" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M106,135.24933 L119.643265,135.24933 L119.643265,131.503938 L133.496063,136.748033 L119.643265,141.992128 L119.643265,138.246736 L106,138.246736 L106,135.24933 Z" id="Shape" fill="#E69138" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M185.5,134.24933 L199.143265,134.24933 L199.143265,130.503938 L212.996063,135.748033 L199.143265,140.992128 L199.143265,137.246736 L185.5,137.246736 L185.5,134.24933 Z" id="Shape" fill="#E69138" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M250.5,134.24933 L264.14325,134.24933 L264.14325,130.503938 L277.996063,135.748033 L264.14325,140.992128 L264.14325,137.246736 L250.5,137.246736 L250.5,134.24933 Z" id="Shape" fill="#E69138" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M78.5,37.492125 L80.6259842,37.492125 L80.6259842,31.2559035 L84.8779527,31.2559035 L84.8779527,37.492125 L87.0039369,37.492125 L82.7519684,41.7440935 L78.5,37.492125 Z" id="Shape" fill="#666666" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M78.5,70.992125 L80.6259842,70.992125 L80.6259842,64.7559035 L84.8779527,64.7559035 L84.8779527,70.992125 L87.0039369,70.992125 L82.7519684,75.2440935 L78.5,70.992125 Z" id="Shape" fill="#666666" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M78.5,119.492125 L80.6259842,119.492125 L80.6259842,92.751967 L84.8779527,92.751967 L84.8779527,119.492125 L87.0039369,119.492125 L82.7519684,123.744093 L78.5,119.492125 Z" id="Shape" fill="#666666" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162.75197,52 L127.507875,21.0078735" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162.75197,52 L132.013597,24.970005" id="Shape" stroke="#B7B7B7" stroke-dasharray="8,6" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M133.104325,23.729635 L128.605698,21.9732492 L130.922868,26.2103822 L133.104325,23.729635 Z" id="Shape" stroke="#B7B7B7" fill="#B7B7B7" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162.75197,52 L112.5,52" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162.75197,52 L118.5,52" id="Shape" stroke="#B7B7B7" stroke-dasharray="8,6" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118.5,50.348265 L113.961899,51.9999984 L118.5,53.6517318 L118.5,50.348265 Z" id="Shape" stroke="#B7B7B7" fill="#B7B7B7" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162.75197,52 L112.5,82.3779525" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162.75197,52 L117.634715,79.273964" id="Shape" stroke="#B7B7B7" stroke-dasharray="8,6" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M116.78021,77.86043 L113.751073,81.621668 L118.489202,80.6874868 L116.78021,77.86043 Z" id="Shape" stroke="#B7B7B7" fill="#B7B7B7" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M15,106 L379,106" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M15,106 L379,106" id="Shape" stroke="#000000" stroke-dasharray="2,6" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<text id="NavMesh" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="169" y="56">NavMesh</tspan>
|
||||
</text>
|
||||
<text id="Map-Locations" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="50.8088235" y="24.1680267">Map Locations</tspan>
|
||||
</text>
|
||||
<text id="Find-Path" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="60.8088235" y="55.8437803">Find Path</tspan>
|
||||
</text>
|
||||
<text id="Corridor" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="62.8088235" y="87.5195338">Corridor</tspan>
|
||||
</text>
|
||||
<text id="Global" sketch:type="MSTextLayer" font-family="Helvetica" font-size="8" font-style="italic" font-weight="normal" fill="#000000">
|
||||
<tspan x="15" y="98.9121232">Global</tspan>
|
||||
</text>
|
||||
<text id="Local" sketch:type="MSTextLayer" font-family="Helvetica" font-size="8" font-style="italic" font-weight="normal" fill="#000000">
|
||||
<tspan x="15" y="118.587877">Local</tspan>
|
||||
</text>
|
||||
<text id="Steering" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" sketch:alignment="middle" fill="#000000">
|
||||
<tspan x="64.3769531" y="140">Steering</tspan>
|
||||
</text>
|
||||
<text id="Obstacle" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" sketch:alignment="middle" fill="#000000">
|
||||
<tspan x="140.768555" y="134">Obstacle</tspan>
|
||||
<tspan x="137.238281" y="146">Avoidance</tspan>
|
||||
</text>
|
||||
<text id="Move" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" sketch:alignment="middle" fill="#000000">
|
||||
<tspan x="219.273438" y="140">Move</tspan>
|
||||
</text>
|
||||
<text id="Update" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" sketch:alignment="middle" fill="#000000">
|
||||
<tspan x="286.376953" y="134">Update</tspan>
|
||||
<tspan x="284.440918" y="146">Corridor</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.4 KiB |
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="335px" height="105px" viewBox="0 0 335 105" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshUnderstandingMove</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshUnderstandingMove" sketch:type="MSArtboardGroup">
|
||||
<path d="M61.0229856,38.0550626 L88.2844851,28.1417917 L98.197756,28.1417917 L118.024298,40.5333821 L118.024298,47.9683336 L93.2411175,57.8816045 L75.8928951,77.7081464 L65.9796242,77.7081464 L43.6747628,62.8382435 L43.6747628,57.8816045 L6.4999985,52.9249725 L65.9796242,97.5346962 L90.7628046,87.6214186 L108.111027,67.7948768 L160.155695,47.9683349 L88.2844851,8.3152555 L41.1964481,25.6634779 L21.3699062,47.9683358 L6.49999982,52.9249747 L43.6747641,57.8816067 L61.0229856,38.0550626 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M61.0229856,38.0550626 L88.2844851,28.1417917 L98.197756,28.1417917 L118.024298,40.5333821 L118.024298,47.9683336 L93.2411175,57.8816045 L75.8928951,77.7081464 L65.9796242,77.7081464 L43.6747628,62.8382435 L43.6747628,57.8816045 L6.4999985,52.9249725 L65.9796242,97.5346962 L90.7628046,87.6214186 L108.111027,67.7948768 L160.155695,47.9683349 L88.2844851,8.3152555 L41.1964481,25.6634779 L21.3699062,47.9683358 L6.49999982,52.9249747 L43.6747641,57.8816067 L61.0229856,38.0550626 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M65,77.7099594 L65,97.5430478"></path>
|
||||
<path d="M65,77.7099594 L65,97.5430478" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M75.894375,77.7099594 L65.9847634,97.5430478" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M75.894375,77.7099594 L65.9847634,97.5430478" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M75.894375,77.7099594 L90.7657216,87.6195779" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M75.894375,77.7099594 L90.7657216,87.6195779" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M93.24296,57.882907 L108.114307,67.7925186" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M93.24296,57.882907 L108.114307,67.7925186" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M61.0241473,38.0558415 L41.191062,25.6653626" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M61.0241473,38.0558415 L41.191062,25.6653626" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M88,28.1423153 L88,8.30923"></path>
|
||||
<path d="M88,28.1423153 L88,8.30923" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M88.2862233,8.31525418 L98.1958348,28.1483325" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M88.2862233,8.31525418 L98.1958348,28.1483325" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M6.49999982,52.9261395 L43.6714391,62.8357511" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M6.49999982,52.9261395 L43.6714391,62.8357511" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M21.3702217,47.9693677 L43.6703122,57.8789792" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M21.3702217,47.9693677 L43.6703122,57.8789792" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M118.026661,47 L160.159831,47"></path>
|
||||
<path d="M118.026661,47 L160.159831,47" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160.158956,47.9693677 L118.025772,40.540627" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160.158956,47.9693677 L118.025772,40.540627" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M229.474933,39.8505976 L256.73644,29.9373267 L266.649717,29.9373267 L286.476246,42.3289171 L286.476246,49.7638686 L261.693065,59.6771395 L244.344837,79.5036814 L234.431586,79.5036814 L212.126704,64.6337785 L212.126704,59.6771395 L174.951947,54.7205076 L234.431586,99.3302224 L259.214766,89.4169581 L276.562969,69.5904096 L328.607654,49.7638677 L256.73644,10.1107883 L209.648405,27.4590142 L189.821863,49.7638695 L174.951946,54.7205085 L212.126704,59.6771404 L229.474933,39.8505976 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M229.474933,39.8505976 L256.73644,29.9373267 L266.649717,29.9373267 L286.476246,42.3289171 L286.476246,49.7638686 L261.693065,59.6771395 L244.344837,79.5036814 L234.431586,79.5036814 L212.126704,64.6337785 L212.126704,59.6771395 L174.951947,54.7205076 L234.431586,99.3302224 L259.214766,89.4169581 L276.562969,69.5904096 L328.607654,49.7638677 L256.73644,10.1107883 L209.648405,27.4590142 L189.821863,49.7638695 L174.951946,54.7205085 L212.126704,59.6771404 L229.474933,39.8505976 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M234,79.5055076 L234,99.3385885"></path>
|
||||
<path d="M234,79.5055076 L234,99.3385885" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M244.346305,79.5055076 L234.436707,99.3385885" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M244.346305,79.5055076 L234.436707,99.3385885" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M244.346305,79.5055076 L259.217658,89.4151191" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M244.346305,79.5055076 L259.217658,89.4151191" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M261.694912,59.6784333 L276.566265,69.5880448" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M261.694912,59.6784333 L276.566265,69.5880448" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M229.476077,39.8513765 L209.642996,27.4608941" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M229.476077,39.8513765 L209.642996,27.4608941" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M256,29.9378504 L256,10.104765"></path>
|
||||
<path d="M256,29.9378504 L256,10.104765" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M256.738188,10.1107892 L266.647786,29.9438745" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M256.738188,10.1107892 L266.647786,29.9438745" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M174.951943,54.7216746 L212.123395,64.6312861" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M174.951943,54.7216746 L212.123395,64.6312861" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M189.822157,49.7649071 L212.122245,59.6745186" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M189.822157,49.7649071 L212.122245,59.6745186" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup" d="M286.478604,49 L328.611788,49"></path>
|
||||
<path d="M286.478604,49 L328.611788,49" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M328.610899,49.7649071 L286.477715,42.3361664" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M328.610899,49.7649071 L286.477715,42.3361664" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M190.441754,49.4540789 L212.436829,59.6771373 L229.475276,39.8505954 L256.117168,30.2471186 L266.650033,30.2471186 L286.476562,42.3289149 L286.78637,50.0736605 L262.003189,59.6771373 L276.563312,69.9002024 L328.607971,49.7638664 L256.736757,10.110787 L209.648721,27.1492188 L190.441754,49.4540789 Z" id="Shape" fill-opacity="0.3808" fill="#525A61" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M190.441754,49.4540789 L212.436829,59.6771373 L229.475276,39.8505954 L256.117168,30.2471186 L266.650033,30.2471186 L286.476562,42.3289149 L286.78637,50.0736605 L262.003189,59.6771373 L276.563312,69.9002024 L328.607971,49.7638664 L256.736757,10.110787 L209.648721,27.1492188 L190.441754,49.4540789 Z" id="Shape" stroke="#000000" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M280.282691,59.6764795 L280.282691,59.6764795 C280.282691,56.9400141 284.72246,54.7216737 290.199218,54.7216737 L290.199218,54.7216737 C295.675976,54.7216737 300.115772,56.9400139 300.115772,59.6764795 L300.115772,59.6764795 C300.115772,62.4129449 295.675976,64.6312852 290.199218,64.6312852 L290.199218,64.6312852 C284.72246,64.6312852 280.282691,62.412945 280.282691,59.6764795 L280.282691,59.6764795 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M283.187189,56.172903 L297.211279,63.1800595 M297.211279,56.172903 L283.187189,63.1800595" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M280.282691,59.6764795 L280.282691,59.6764795 C280.282691,56.9400141 284.72246,54.7216737 290.199218,54.7216737 L290.199218,54.7216737 C295.675976,54.7216737 300.115772,56.9400139 300.115772,59.6764795 L300.115772,59.6764795 C300.115772,62.4129449 295.675976,64.6312852 290.199218,64.6312852 L290.199218,64.6312852 C284.72246,64.6312852 280.282691,62.412945 280.282691,59.6764795 L280.282691,59.6764795 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M283.187189,56.172903 L297.211279,63.1800595 M297.211279,56.172903 L283.187189,63.1800595" id="Shape" stroke="#CC0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M280.282691,59.6764795 L280.282691,59.6764795 C280.282691,56.9400141 284.72246,54.7216737 290.199218,54.7216737 L290.199218,54.7216737 C295.675976,54.7216737 300.115772,56.9400139 300.115772,59.6764795 L300.115772,59.6764795 C300.115772,62.4129449 295.675976,64.6312852 290.199218,64.6312852 L290.199218,64.6312852 C284.72246,64.6312852 280.282691,62.412945 280.282691,59.6764795 L280.282691,59.6764795 Z" id="Shape" stroke="#CC0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M102.757429,11.7920277 L142.201845,38.0975399 L135.327488,48.409082 L95.8830724,22.1035672 L102.757429,11.7920277 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M41.1971874,25.6634761 L61.0237258,38.055063 L88.2852253,28.1417921 L98.1984962,28.1417921 L118.025038,40.5333825 L118.025038,47.968334 L93.2418576,57.8816049 L108.111767,67.7948759 L160.156435,47.968334 L88.2852253,8.31525462 L41.1971874,25.6634761 Z" id="Shape" fill-opacity="0.3808" fill="#525A61" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M41.1971874,25.6634761 L61.0237258,38.055063 L88.2852253,28.1417921 L98.1984962,28.1417921 L118.025038,40.5333825 L118.025038,47.968334 L93.2418576,57.8816049 L108.111767,67.7948759 L160.156435,47.968334 L88.2852253,8.31525462 L41.1971874,25.6634761 Z" id="Shape" stroke="#000000" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118.142986,54.3773679 L132.167102,61.3845244 M132.167102,54.3773679 L118.142986,61.3845244" id="Shape" stroke="#CC0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M115.238501,57.8809488 L115.238501,57.8809488 C115.238501,55.14449 119.678283,52.9261431 125.155041,52.9261431 L125.155041,52.9261431 C130.631799,52.9261431 135.071582,55.14449 135.071582,57.8809488 L135.071582,57.8809488 C135.071582,60.6174143 130.631799,62.8357546 125.155041,62.8357546 L125.155041,62.8357546 C119.678283,62.8357546 115.238501,60.6174144 115.238501,57.8809488 L115.238501,57.8809488 Z" id="Shape" stroke="#CC0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M49.251082,22.6612683 L49.251082,22.6612683 C49.251082,19.9248029 53.6908681,17.7064626 59.1676264,17.7064626 L59.1676264,17.7064626 C64.6443781,17.7064626 69.0841668,19.9248028 69.0841668,22.6612683 L69.0841668,22.6612683 C69.0841668,25.3977305 64.6443777,27.6160741 59.1676264,27.6160741 L59.1676264,27.6160741 C53.6908681,27.6160741 49.251082,25.3977305 49.251082,22.6612683 L49.251082,22.6612683 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M49.251082,22.6612683 L49.251082,22.6612683 C49.251082,19.9248029 53.6908681,17.7064626 59.1676264,17.7064626 L59.1676264,17.7064626 C64.6443781,17.7064626 69.0841668,19.9248028 69.0841668,22.6612683 L69.0841668,22.6612683 C69.0841668,25.3977305 64.6443777,27.6160741 59.1676264,27.6160741 L59.1676264,27.6160741 C53.6908681,27.6160741 49.251082,25.3977305 49.251082,22.6612683 L49.251082,22.6612683 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M59.4751635,23.4953463 L96.0367792,26.2811232" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M59.4751635,23.4953463 L90.7715289,25.8799446" id="Shape" stroke="#FF0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M90.6610959,27.3294077 L94.7538995,26.1833783 L90.8819764,24.4304847 L90.6610959,27.3294077 Z" id="Shape" stroke="#FF0000" fill="#FF0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M40.0818054,35.5749451 L40.0818054,35.5749451 C40.0818054,32.8384863 44.5215915,30.6201393 49.9983458,30.6201393 L49.9983458,30.6201393 C55.4751006,30.6201393 59.9148832,32.8384863 59.9148832,35.5749451 L59.9148832,35.5749451 C59.9148832,38.3114105 55.4751006,40.5297509 49.9983458,40.5297509 L49.9983458,40.5297509 C44.521591,40.5297509 40.0818054,38.3114107 40.0818054,35.5749451 L40.0818054,35.5749451 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M40.0818054,35.5749451 L40.0818054,35.5749451 C40.0818054,32.8384863 44.5215915,30.6201393 49.9983458,30.6201393 L49.9983458,30.6201393 C55.4751006,30.6201393 59.9148832,32.8384863 59.9148832,35.5749451 L59.9148832,35.5749451 C59.9148832,38.3114105 55.4751006,40.5297509 49.9983458,40.5297509 L49.9983458,40.5297509 C44.521591,40.5297509 40.0818054,38.3114107 40.0818054,35.5749451 L40.0818054,35.5749451 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M59.2956131,22.875752 L49.6909143,35.8760563" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M59.2956131,22.875752 L52.8287127,31.6289396" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M51.6595232,30.7651385 L50.4554368,34.8412429 L53.9978888,32.4927352 L51.6595232,30.7651385 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M208.12133,37.3108588 L208.12133,37.3108588 C208.12133,34.5743934 212.561126,32.356053 218.037884,32.356053 L218.037884,32.356053 C223.514643,32.356053 227.954412,34.5743933 227.954412,37.3108588 L227.954412,37.3108588 C227.954412,40.0473242 223.514642,42.2656646 218.037884,42.2656646 L218.037884,42.2656646 C212.561126,42.2656646 208.12133,40.0473244 208.12133,37.3108588 L208.12133,37.3108588 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M208.12133,37.3108588 L208.12133,37.3108588 C208.12133,34.5743934 212.561126,32.356053 218.037884,32.356053 L218.037884,32.356053 C223.514643,32.356053 227.954412,34.5743933 227.954412,37.3108588 L227.954412,37.3108588 C227.954412,40.0473242 223.514642,42.2656646 218.037884,42.2656646 L218.037884,42.2656646 C212.561126,42.2656646 208.12133,40.0473244 208.12133,37.3108588 L208.12133,37.3108588 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M218.013638,37.3729972 L254.256473,29.6254785" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M218.013638,37.3729972 L249.09264,30.7293376" id="Shape" stroke="#FF0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M249.396506,32.1508842 L252.998305,29.8944324 L248.788763,29.3077856 L249.396506,32.1508842 Z" id="Shape" stroke="#FF0000" fill="#FF0000" sketch:type="MSShapeGroup"></path>
|
||||
<text id="Corridor" sketch:type="MSTextLayer" transform="translate(112.500000, 29.427198) rotate(31.000000) translate(-112.500000, -29.427198) " font-family="Helvetica" font-size="8" font-weight="normal" fill="#000000">
|
||||
<tspan x="98" y="31.9271978">Corridor</tspan>
|
||||
</text>
|
||||
<text id="Corridor-copy" sketch:type="MSTextLayer" transform="translate(280.500000, 30.461509) rotate(31.000000) translate(-280.500000, -30.461509) " font-family="Helvetica" font-size="8" font-weight="normal" fill="#000000">
|
||||
<tspan x="266" y="32.9615088">Corridor</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,75 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="335px" height="249px" viewBox="0 0 335 249" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshUnderstandingOffmesh</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshUnderstandingOffmesh" sketch:type="MSArtboardGroup">
|
||||
<path d="M124,129 L72,97 L72,129 L124,161 L124,129 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M124,129 L72,97 L72,129 L124,161 L124,129 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M124,129 L124,137 L104,145 L104,169 L168,145 L168,113 L124,129 Z" id="Shape" fill="#B7B7B7" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M124,129 L124,137 L104,145 L104,169 L168,145 L168,113 L124,129 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M200,133 L168,113 L168,145 L200,165 L200,133 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M200,133 L168,113 L168,145 L200,165 L200,133 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,65 L160,17 L296,89 L296,137 L160,65 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,65 L160,17 L296,89 L296,137 L160,65 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,17 L184,9 L320,81 L296,89 L160,17 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,17 L184,9 L320,81 L296,89 L160,17 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,65 L72,97 L124,129 L168,113 L200,133 L156,149 L200,177 L296,137 L160,65 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,65 L72,97 L124,129 L168,113 L200,133 L156,149 L200,177 L296,137 L160,65 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M200,177 L156,149 L156,181 L200,209 L200,177 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M200,177 L156,149 L156,181 L200,209 L200,177 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M104,145 L52,113 L52,125 L104,157 L104,145 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M104,145 L52,113 L52,125 L104,157 L104,145 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M52,113 L72,105 L124,137 L104,145 L52,113 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M52,113 L72,105 L124,137 L104,145 L52,113 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M136,165 L156,157 L200,185 L180,193 L136,165 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M136,165 L156,157 L200,185 L180,193 L136,165 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M180,193 L136,165 L136,177 L180,205 L180,193 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M180,193 L136,165 L136,177 L180,205 L180,193 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M8,141 L52,125 L180,205 L124,229 L8,141 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M8,141 L52,125 L180,205 L124,229 L8,141 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M124,229 L180,205 L180,193 L200,185 L200,177 L296,137 L296,89 L320,81 L320,157 L124,241 L124,229 Z" id="Shape" fill="#B7B7B7" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M124,229 L180,205 L180,193 L200,185 L200,177 L296,137 L296,89 L320,81 L320,157 L124,241 L124,229 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M8,141 L124,229 L124,241 L8,153 L8,141 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M8,141 L124,229 L124,241 L8,153 L8,141 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M116,121 L160,105 L176,105 L208,125 L208,137 L168,153 L140,185 L124,185 L88,161 L88,153 L28,145 L124,217 L164,201 L192,169 L276,137 L160,73 L84,101 L52,137 L28,145 L88,153 L116,121 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M116,121 L160,105 L176,105 L208,125 L208,137 L168,153 L140,185 L124,185 L88,161 L88,153 L28,145 L124,217 L164,201 L192,169 L276,137 L160,73 L84,101 L52,137 L28,145 L88,153 L116,121 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M124,185 L124,217" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M124,185 L124,217" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M140,185 L124,217" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M140,185 L124,217" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M140,185 L164,201" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M140,185 L164,201" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M168,153 L192,169" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M168,153 L192,169" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M116,121 L84,101" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M116,121 L84,101" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,105 L160,73" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,105 L160,73" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,73 L176,105" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M160,73 L176,105" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M28,145 L88,161" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M28,145 L88,161" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M52,137 L88,153" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M52,137 L88,153" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M208,137 L276,137" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M208,137 L276,137" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M276,137 L208,125" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M276,137 L208,125" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M117.63234,108.430815 L117.63234,108.430815 C122.279846,98.1458725 133.447617,92.409475 146.73616,93.481459 C160.024703,94.5534424 173.303909,102.261977 181.342468,113.570296 C189.381027,124.87863 190.890411,137.974073 185.275985,147.697721 L152,126.999997 L117.63234,108.430815 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M117.63234,108.430815 L117.63234,108.430815 C122.279846,98.1458725 133.447617,92.409475 146.73616,93.481459 C160.024703,94.5534424 173.303909,102.261977 181.342468,113.570296 C189.381027,124.87863 190.890411,137.974073 185.275985,147.697721" id="Shape" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M117.63234,108.430815 L117.63234,108.430815 C122.279846,98.1458725 133.447617,92.409475 146.73616,93.481459 C160.024703,94.5534424 173.303909,102.261977 181.342468,113.570296 C189.381027,124.87863 190.890411,137.974073 185.275985,147.697721" id="Shape" stroke="#000000" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M107.25197,106.996065 L107.25197,106.996065 C107.25197,103.682359 112.064028,100.996065 118.000001,100.996065 L118.000001,100.996065 C123.935975,100.996065 128.748033,103.682359 128.748033,106.996065 L128.748033,106.996065 C128.748033,110.30977 123.935975,112.996065 118.000001,112.996065 L118.000001,112.996065 C112.064028,112.996065 107.25197,110.30977 107.25197,106.996065 L107.25197,106.996065 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M107.25197,106.996065 L107.25197,106.996065 C107.25197,103.682359 112.064028,100.996065 118.000001,100.996065 L118.000001,100.996065 C123.935975,100.996065 128.748033,103.682359 128.748033,106.996065 L128.748033,106.996065 C128.748033,110.30977 123.935975,112.996065 118.000001,112.996065 L118.000001,112.996065 C112.064028,112.996065 107.25197,110.30977 107.25197,106.996065 L107.25197,106.996065 Z" id="Shape" stroke="#000000" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M176.75197,147.496065 L176.75197,147.496065 C176.75197,144.182359 181.564028,141.496065 187.500001,141.496065 L187.500001,141.496065 C193.435975,141.496065 198.248033,144.182359 198.248033,147.496065 L198.248033,147.496065 C198.248033,150.80977 193.435975,153.496065 187.500001,153.496065 L187.500001,153.496065 C181.564028,153.496065 176.75197,150.80977 176.75197,147.496065 L176.75197,147.496065 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M176.75197,147.496065 L176.75197,147.496065 C176.75197,144.182359 181.564028,141.496065 187.500001,141.496065 L187.500001,141.496065 C193.435975,141.496065 198.248033,144.182359 198.248033,147.496065 L198.248033,147.496065 C198.248033,150.80977 193.435975,153.496065 187.500001,153.496065 L187.500001,153.496065 C181.564028,153.496065 176.75197,150.80977 176.75197,147.496065 L176.75197,147.496065 Z" id="Shape" stroke="#000000" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<text id="NavMesh" sketch:type="MSTextLayer" transform="translate(89.055969, 179.358792) rotate(38.000000) translate(-89.055969, -179.358792) " font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="67.5559692" y="182.858792">NavMesh</tspan>
|
||||
</text>
|
||||
<text id="Off-Mesh-Link" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="58" y="75">Off-Mesh Link</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,114 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="335px" height="250px" viewBox="0 0 335 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<title>NavMeshUnderstandingPath</title>
|
||||
<description>Created with Sketch (http://www.bohemiancoding.com/sketch)</description>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="NavMeshUnderstandingPath" sketch:type="MSArtboardGroup">
|
||||
<path d="M126,133 L74,101 L74,133 L126,165 L126,133 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,133 L74,101 L74,133 L126,165 L126,133 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,133 L126,141 L106,149 L106,173 L170,149 L170,117 L126,133 Z" id="Shape" fill="#B7B7B7" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,133 L126,141 L106,149 L106,173 L170,149 L170,117 L126,133 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M202,137 L170,117 L170,149 L202,169 L202,137 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M202,137 L170,117 L170,149 L202,169 L202,137 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,69 L162,21 L298,93 L298,141 L162,69 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,69 L162,21 L298,93 L298,141 L162,69 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,21 L186,13 L322,85 L298,93 L162,21 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,21 L186,13 L322,85 L298,93 L162,21 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,69 L74,101 L126,133 L170,117 L202,137 L158,153 L202,181 L298,141 L162,69 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,69 L74,101 L126,133 L170,117 L202,137 L158,153 L202,181 L298,141 L162,69 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M202,181 L158,153 L158,185 L202,213 L202,181 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M202,181 L158,153 L158,185 L202,213 L202,181 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M106,149 L54,117 L54,129 L106,161 L106,149 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M106,149 L54,117 L54,129 L106,161 L106,149 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M54,117 L74,109 L126,141 L106,149 L54,117 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M54,117 L74,109 L126,141 L106,149 L54,117 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M138,169 L158,161 L202,189 L182,197 L138,169 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M138,169 L158,161 L202,189 L182,197 L138,169 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M182,197 L138,169 L138,181 L182,209 L182,197 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M182,197 L138,169 L138,181 L182,209 L182,197 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10,145 L54,129 L182,209 L126,233 L10,145 Z" id="Shape" fill="#F3F3F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10,145 L54,129 L182,209 L126,233 L10,145 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,233 L182,209 L182,197 L202,189 L202,181 L298,141 L298,93 L322,85 L322,161 L126,245 L126,233 Z" id="Shape" fill="#B7B7B7" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,233 L182,209 L182,197 L202,189 L202,181 L298,141 L298,93 L322,85 L322,161 L126,245 L126,233 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10,145 L126,233 L126,245 L10,157 L10,145 Z" id="Shape" fill="#D9D9D9" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M10,145 L126,233 L126,245 L10,157 L10,145 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118,125 L162,109 L178,109 L210,129 L210,141 L170,157 L142,189 L126,189 L90,165 L90,157 L30,149 L126,221 L166,205 L194,173 L278,141 L162,77 L86,105 L54,141 L30,149 L90,157 L118,125 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118,125 L162,109 L178,109 L210,129 L210,141 L170,157 L142,189 L126,189 L90,165 L90,157 L30,149 L126,221 L166,205 L194,173 L278,141 L162,77 L86,105 L54,141 L30,149 L90,157 L118,125 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,189 L126,221" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M126,189 L126,221" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M142,189 L126,221" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M142,189 L126,221" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M142,189 L166,205" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M142,189 L166,205" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M170,157 L194,173" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M170,157 L194,173" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118,125 L86,105" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M118,125 L86,105" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,109 L162,77" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,109 L162,77" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,77 L178,109" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M162,77 L178,109" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M30,149 L90,165" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M30,149 L90,165" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M54,141 L90,157" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M54,141 L90,157" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M210,141 L278,141" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M210,141 L278,141" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M278,141 L210,129" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M278,141 L210,129" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M86,105 L118,125 L162,109 L178,109 L210,129 L210,141 L170,157 L194,173 L278,141 L162,77 L86,105 Z" id="Shape" fill-opacity="0.3808" fill="#525A61" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M86,105 L118,125 L162,109 L178,109 L210,129 L210,141 L170,157 L194,173 L278,141 L162,77 L86,105 Z" id="Shape" stroke="#000000" stroke-width="2" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M189.10235,89 L232.362207,117.850387 L221.25982,134.496062 L177.999995,105.645668 L189.10235,89 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M205.5,157 L205.5,157 C205.5,152.581726 212.663452,149 221.5,149 L221.5,149 C230.336548,149 237.5,152.581726 237.5,157 L237.5,157 C237.5,161.418274 230.336548,165 221.5,165 L221.5,165 C212.663452,165 205.5,161.418274 205.5,157 L205.5,157 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M210.18628,151.34314 L232.813721,162.65686 M232.813721,151.34314 L210.18628,162.65686" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M205.5,157 L205.5,157 C205.5,152.581726 212.663452,149 221.5,149 L221.5,149 C230.336548,149 237.5,152.581726 237.5,157 L237.5,157 C237.5,161.418274 230.336548,165 221.5,165 L221.5,165 C212.663452,165 205.5,161.418274 205.5,157 L205.5,157 Z" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M210.18628,151.34314 L232.813721,162.65686 M232.813721,151.34314 L210.18628,162.65686" id="Shape" stroke="#CC0000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M205.5,157 L205.5,157 C205.5,152.581726 212.663452,149 221.5,149 L221.5,149 C230.336548,149 237.5,152.581726 237.5,157 L237.5,157 C237.5,161.418274 230.336548,165 221.5,165 L221.5,165 C212.663452,165 205.5,161.418274 205.5,157 L205.5,157 Z" id="Shape" stroke="#CC0000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M152.5,97 L161.996063,96.4960633" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M152.5,97 L156.004486,96.8140259" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M156.092025,98.46343 L160.536209,96.5735298 L155.916961,95.1646095 L156.092025,98.46343 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M169.5,96.5 L179.5,97.5078735" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M169.5,96.5 L173.530243,96.9061966" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M173.36461,98.549605 L178.045472,97.3612734 L173.695878,95.2627932 L173.36461,98.549605 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M231,125.5 L233,135.5" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M231,125.5 L231.823303,129.616516" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M230.20365,129.94045 L232.713293,134.066488 L233.442969,129.292592 L230.20365,129.94045 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M238,137.5 L232,144.996063" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M238,137.5 L235.749359,140.311813" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M234.45985,139.27965 L232.913555,143.854738 L237.03889,141.343966 L234.45985,139.27965 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M114,116.5 L102.48819,123.003937" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M114,116.5 L107.712097,120.052536" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M106.89961,118.61445 L103.760999,122.284814 L108.52458,121.49061 L106.89961,118.61445 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M72,138.5 L64,147.507873" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M72,138.5 L67.98423,143.021683" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M66.749235,141.924865 L64.9707621,146.414809 L69.2192286,144.118499 L66.749235,141.924865 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M66,149.5 L71.5118105,156.996063" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M66,149.5 L67.9574738,152.162155" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M66.62675,153.140625 L70.6458005,155.818283 L69.2881879,151.183685 L66.62675,153.140625 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M78,158 L81.4960633,169.496063" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M78,158 L79.750351,163.755646" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M78.170075,164.23622 L81.0707175,168.097411 L81.3306204,163.275069 L78.170075,164.23622 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M115,198 L127.503937,201.007873" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M115,198 L121.670349,199.604584" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M121.28404,201.2105 L126.082578,200.66596 L122.056654,197.998662 L121.28404,201.2105 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M132,198.5 L142.48819,200.01181" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M132,198.5 L136.549561,199.155792" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M136.31392,200.790635 L141.041246,199.803239 L136.785219,197.520951 L136.31392,200.790635 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M149.5,201.5 L156.996063,195.5" id="Shape" fill-opacity="0" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M149.5,201.5 L152.311798,199.249359" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M153.343965,200.5389 L155.854738,196.413534 L151.279649,197.95986 L153.343965,200.5389 Z" id="Shape" stroke="#000000" fill="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M100,101.503935 L100,101.503935 C100,97.0856535 107.163437,93.503935 116,93.503935 L116,93.503935 C124.836563,93.503935 132,97.0856535 132,101.503935 L132,101.503935 C132,105.922216 124.836563,109.503935 116,109.503935 L116,109.503935 C107.163437,109.503935 100,105.922217 100,101.503935 L100,101.503935 Z" id="Shape" fill="#CFE2F3" sketch:type="MSShapeGroup"></path>
|
||||
<path d="M100,101.503935 L100,101.503935 C100,97.0856535 107.163437,93.503935 116,93.503935 L116,93.503935 C124.836563,93.503935 132,97.0856535 132,101.503935 L132,101.503935 C132,105.922216 124.836563,109.503935 116,109.503935 L116,109.503935 C107.163437,109.503935 100,105.922217 100,101.503935 L100,101.503935 Z" id="Shape" stroke="#000000" sketch:type="MSShapeGroup"></path>
|
||||
<text id="Corridor" sketch:type="MSTextLayer" transform="translate(203.500000, 112.488193) rotate(34.000000) translate(-203.500000, -112.488193) " font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="185" y="115.988193">Corridor</tspan>
|
||||
</text>
|
||||
<text id="Start" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="88" y="87">Start</tspan>
|
||||
</text>
|
||||
<text id="Destination" sketch:type="MSTextLayer" font-family="Helvetica" font-size="10" font-weight="normal" fill="#000000">
|
||||
<tspan x="238.829925" y="176.721147">Destination</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 125 KiB |
@@ -0,0 +1,197 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="371"
|
||||
height="271"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.2 r9819"
|
||||
sodipodi:docname="NavPatrolMaze.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.07"
|
||||
inkscape:cx="232.07975"
|
||||
inkscape:cy="145.03988"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1150"
|
||||
inkscape:window-height="628"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid2985"
|
||||
empspacing="5"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Maze"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-199.5,-61.862183)">
|
||||
<rect
|
||||
style="fill:#fafce7;fill-opacity:1;stroke:#d5b729;stroke-opacity:1"
|
||||
id="rect2991"
|
||||
width="370"
|
||||
height="270"
|
||||
x="200"
|
||||
y="62.362183"
|
||||
ry="5"
|
||||
rx="5" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#d5b729;stroke-opacity:1"
|
||||
id="rect3761"
|
||||
width="80"
|
||||
height="190"
|
||||
x="240"
|
||||
y="102.36218"
|
||||
ry="5"
|
||||
rx="5" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#d5b729;stroke-opacity:1"
|
||||
id="rect3763"
|
||||
width="170"
|
||||
height="80"
|
||||
x="360"
|
||||
y="102.36218"
|
||||
ry="5"
|
||||
rx="5" />
|
||||
<rect
|
||||
y="222.36218"
|
||||
x="360"
|
||||
height="70"
|
||||
width="170"
|
||||
id="rect3765"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#d5b729;stroke-opacity:1"
|
||||
ry="5"
|
||||
rx="5" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
|
||||
d="m 220,82.362183 330,0 0,229.999997 -330,0 z"
|
||||
id="path3767"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
|
||||
d="m 340,82.362183 0,229.999997 0,0"
|
||||
id="path3769"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
|
||||
d="m 340,202.36218 210,0"
|
||||
id="path3771"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Dots"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(-199.5,-61.862183)">
|
||||
<path
|
||||
transform="translate(225,-115)"
|
||||
d="m 120,197.36218 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
|
||||
sodipodi:ry="5"
|
||||
sodipodi:rx="5"
|
||||
sodipodi:cy="197.36218"
|
||||
sodipodi:cx="115"
|
||||
id="path3801"
|
||||
style="fill:#ff2015;fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2015;fill-opacity:1;stroke:none"
|
||||
id="path3805"
|
||||
sodipodi:cx="115"
|
||||
sodipodi:cy="197.36218"
|
||||
sodipodi:rx="5"
|
||||
sodipodi:ry="5"
|
||||
d="m 120,197.36218 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
|
||||
transform="translate(225,115)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2015;fill-opacity:1;stroke:none"
|
||||
id="path3807"
|
||||
sodipodi:cx="115"
|
||||
sodipodi:cy="197.36218"
|
||||
sodipodi:rx="5"
|
||||
sodipodi:ry="5"
|
||||
d="m 120,197.36218 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
|
||||
transform="translate(105,5)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2015;fill-opacity:1;stroke:none"
|
||||
id="path3809"
|
||||
sodipodi:cx="115"
|
||||
sodipodi:cy="197.36218"
|
||||
sodipodi:rx="5"
|
||||
sodipodi:ry="5"
|
||||
d="m 120,197.36218 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
|
||||
transform="translate(225,5)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2015;fill-opacity:1;stroke:none"
|
||||
id="path3830"
|
||||
sodipodi:cx="115"
|
||||
sodipodi:cy="197.36218"
|
||||
sodipodi:rx="5"
|
||||
sodipodi:ry="5"
|
||||
d="m 120,197.36218 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
|
||||
transform="translate(435,-115)" />
|
||||
<path
|
||||
transform="translate(435,5)"
|
||||
d="m 120,197.36218 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
|
||||
sodipodi:ry="5"
|
||||
sodipodi:rx="5"
|
||||
sodipodi:cy="197.36218"
|
||||
sodipodi:cx="115"
|
||||
id="path3832"
|
||||
style="fill:#ff2015;fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ff2015;fill-opacity:1;stroke:none"
|
||||
id="path3834"
|
||||
sodipodi:cx="115"
|
||||
sodipodi:cy="197.36218"
|
||||
sodipodi:rx="5"
|
||||
sodipodi:ry="5"
|
||||
d="m 120,197.36218 c 0,2.76143 -2.23858,5 -5,5 -2.76142,0 -5,-2.23857 -5,-5 0,-2.76142 2.23858,-5 5,-5 2.76142,0 5,2.23858 5,5 z"
|
||||
transform="translate(435,115)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 275 KiB |
|
After Width: | Height: | Size: 235 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 347 KiB |
|
After Width: | Height: | Size: 393 KiB |
@@ -0,0 +1,57 @@
|
||||
# Use NavMesh Agent with Other Components
|
||||
|
||||
You can use [**NavMesh Agent**](./NavMeshAgent.md), [**NavMesh Obstacle**](./NavMeshObstacle.md) and [**NavMesh Link**](./NavMeshLink.md) components with other Unity components too. Here’s a list of dos and don’ts when mixing different components together.
|
||||
|
||||
## NavMesh Agent and Physics
|
||||
|
||||
- You don’t need to add physics [**colliders**][1] to NavMesh Agents for them to avoid each other
|
||||
- That is, the navigation system simulates agents and their reaction to obstacles and the static world. Here the static world is the baked NavMesh.
|
||||
- If you want a NavMesh Agent to push around physics objects or use physics triggers:
|
||||
- Add a Collider component (if not present)
|
||||
- Add [**Rigidbody**][2] component
|
||||
- Turn on kinematic (Is Kinematic) - this is important!
|
||||
- Kinematic means that the rigid body is controlled by something else than the physics simulation
|
||||
- If both NavMesh Agent and Rigidbody (non-kinematic) are active at the same time, you have race condition
|
||||
- Both components may try to move the agent at the same time which leads to undefined behavior
|
||||
- You can use a NavMesh Agent to move e.g. a player character, without physics
|
||||
- Set players agent’s avoidance priority to a small number (high priority), to allow the player to brush through crowds
|
||||
- Move the player agent using [NavMeshAgent.velocity](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent-velocity.html), so that other agents can predict the player movement to avoid the player.
|
||||
|
||||
## NavMesh Agent and Animator
|
||||
|
||||
- NavMesh Agent and Animator with [**Root Motion**][3] can cause race condition
|
||||
- Both components try to move the transform each frame
|
||||
- Two possible solutions
|
||||
- Information should always flow in one direction
|
||||
- Either agent moves the character and animations follows
|
||||
- Or animation moves the character based on simulated result
|
||||
- Otherwise you’ll end up having a hard to debug feedback loop
|
||||
- _Animation follows agent_
|
||||
- Use the [NavMeshAgent.velocity](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent-velocity.html) as input to the Animator to roughly match the agent’s movement to the animations
|
||||
- Robust and simple to implement, will result in foot sliding where animations cannot match the velocity
|
||||
- _Agent follows animation_
|
||||
- Disable [NavMeshAgent.updatePosition](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent-updatePosition.html) and [NavMeshAgent.updateRotation](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent-updateRotation.html) to detach the simulation from the game objects locations
|
||||
- Use the difference between the simulated agent’s position ([NavMeshAgent.nextPosition](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent-nextPosition.html)) and animation root ([Animator.rootPosition](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Animator-rootPosition.html)) to calculate controls for the animations
|
||||
- See [Coupling Animation and Navigation](./CouplingAnimationAndNavigation.md) for more details
|
||||
|
||||
## NavMesh Agent and NavMesh Obstacle
|
||||
|
||||
- Do not mix well!
|
||||
- Enabling both will make the agent trying to avoid itself
|
||||
- If carving is enabled in addition, the agent tries to constantly remap to the edge of the carved hole, even more erroneous behavior ensues
|
||||
- Make sure only one of them are active at any given time
|
||||
- Deceased state, you may turn off the agent and turn on the obstacle to force other agents to avoid it
|
||||
- Alternatively you can use priorities to make certain agents to be avoided more
|
||||
|
||||
## NavMesh Obstacle and Physics
|
||||
|
||||
- If you want physics controlled object to affect NavMesh Agent’s behavior
|
||||
- Add NavMesh Obstacle component to the object which agent should be aware of, this allows the avoidance system to reason about the obstacle
|
||||
- If a game object has a Rigidbody and a NavMesh Obstacle attached, the obstacle’s velocity is obtained from the Rigidbody automatically
|
||||
- This allows NavMesh Agents to predict and avoid the moving obstacle
|
||||
|
||||
[1]: ./Glossary.md#collider "An invisible shape that is used to handle physical collisions for an object. A collider doesn’t need to be exactly the same shape as the object’s mesh - a rough approximation is often more efficient and indistinguishable in gameplay."
|
||||
|
||||
[2]: ./Glossary.md#rigidbody "A component that allows a GameObject to be affected by simulated gravity and other forces."
|
||||
|
||||
[3]: ./Glossary.md#root-motion "Motion of character’s root node, whether it’s controlled by the animation itself or externally."
|
||||
@@ -0,0 +1,70 @@
|
||||
# Make an Agent Patrol Between a Set of Points
|
||||
|
||||
Many games feature NPCs that patrol automatically around the playing area. The navigation system can be used to implement this behavior but it is slightly more involved than standard pathfinding - merely using the shortest path between two points makes for a limited and predictable patrol route. You can get a more convincing patrol pattern by keeping a set of key points that are “useful” for the NPC to pass through and visiting them in some kind of sequence. For example, in a maze, you might place the key patrol points at junctions and corners to ensure the agent checks every corridor. For an office building, the key points might be the individual offices and other rooms.
|
||||
|
||||

|
||||
|
||||
A maze with key patrol points marked
|
||||
|
||||
The ideal sequence of patrol points depends on the way you want the NPCs to behave. For example, a robot would probably just visit the points in a methodical order while a human guard might try to catch the player out by using a more random pattern. You can implement the simple behavior of the robot with the code shown below.
|
||||
|
||||
The patrol points are supplied to the script using a public array of Transforms. This array can be assigned from the [**inspector**][1] using [**GameObjects**][2] to mark the points’ positions. The _GotoNextPoint_ function sets the destination point for the agent (which also starts it moving) and then selects the new destination that will be used on the next call. As it stands, the code cycles through the points in the sequence they occur in the array but you can easily modify this, say by using [Random.Range][3] to choose an array index at random.
|
||||
|
||||
In the _Update_ function, the script checks how close the agent is to the destination using the [remainingDistance][4] property. When this distance is very small, a call to _GotoNextPoint_ is made to start the next leg of the patrol.
|
||||
|
||||
``` C#
|
||||
// Patrol.cs
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
using System.Collections;
|
||||
|
||||
|
||||
public class Patrol : MonoBehaviour {
|
||||
|
||||
public Transform[] points;
|
||||
private int destPoint = 0;
|
||||
private NavMeshAgent agent;
|
||||
|
||||
|
||||
void Start () {
|
||||
agent = GetComponent<NavMeshAgent>();
|
||||
|
||||
// Disabling auto-braking allows for continuous movement
|
||||
// between points (i.e. the agent doesn't slow down as it
|
||||
// approaches a destination point).
|
||||
agent.autoBraking = false;
|
||||
|
||||
GotoNextPoint();
|
||||
}
|
||||
|
||||
|
||||
void GotoNextPoint() {
|
||||
// Returns if no points have been set up
|
||||
if (points.Length == 0)
|
||||
return;
|
||||
|
||||
// Set the agent to go to the currently selected destination.
|
||||
agent.destination = points[destPoint].position;
|
||||
|
||||
// Choose the next point in the array as the destination,
|
||||
// cycling to the start if necessary.
|
||||
destPoint = (destPoint + 1) % points.Length;
|
||||
}
|
||||
|
||||
|
||||
void Update () {
|
||||
// Choose the next destination point when the agent gets
|
||||
// close to the current one.
|
||||
if (!agent.pathPending && agent.remainingDistance < 0.5f)
|
||||
GotoNextPoint();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[1]: ./Glossary.md#inspector "A Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values."
|
||||
|
||||
[2]: ./Glossary.md#gameobject "The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it."
|
||||
|
||||
[3]: https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Random.Range.html
|
||||
|
||||
[4]: https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent-remainingDistance.html
|
||||
@@ -0,0 +1,24 @@
|
||||
# AI Navigation preferences reference
|
||||
|
||||
Use the AI Navigation preferences to specify how the navigation meshes (NavMesh and HeightMesh) display in the Scene view.
|
||||
|
||||
The AI Navigation preferences are located in the [Preferences window](xref:Preferences). To open the AI Navigation preferences, do the following:
|
||||
|
||||
1. In the main menu, go to **Edit** > **Preferences**.
|
||||
1. Select **AI Navigation**.
|
||||
|
||||
The following table describes the controls available in the AI Navigation preferences tab.
|
||||
|
||||
| **Control** | **Description** |
|
||||
|:--------------------------------|:-----------------------------------|
|
||||
| **Selected Surfaces Opacity** | Specify the opacity of the displayed meshes (NavMesh and HeightMesh) for [NavMesh Surface](./NavMeshSurface.md) instances that are part of the current selection hierarchy. |
|
||||
| **Unselected Surfaces Opacity** | Specify the opacity of displayed meshes (NavMesh and HeightMesh) for [NavMesh Surface](./NavMeshSurface.md) instances that are outside of the current selection hierarchy. |
|
||||
| **Height Mesh Color** | Set the color used to display the [HeightMesh](./HeightMesh.md). |
|
||||
| **Reset to Defaults** | Set all the NavMesh Visualization Settings parameters to their default value. |
|
||||
|
||||
> [!Note]
|
||||
> The NavMesh is represented in the colors described in the [Areas tab](./NavigationWindow.md#areas-tab) of the Navigation window. That color palette cannot be modified.
|
||||
|
||||
## Additional resources
|
||||
- [Preferences window](xref:Preferences)
|
||||
- [AI Navigation overlay](./NavigationOverlay.md)
|
||||
@@ -0,0 +1,10 @@
|
||||
# Navigation How-Tos
|
||||
|
||||
The following topics describe a set of techniques, and include code samples, to implement common tasks in navigation. As with all code in our documentation, you are free to use these samples for any purpose without crediting Unity.
|
||||
|
||||
| **Topic** | **Description** |
|
||||
|:-----------|:-------------------------------|
|
||||
| [Tell a NavMeshAgent to Move to a Destination](./NavMoveToDestination.md) | Set a destination for a NavMesh agent. |
|
||||
| [Move an Agent to a Position Clicked by the Mouse](./NavMoveToClickPoint.md) | Use a mouse click to set the destination for a NavMesh agent. |
|
||||
| [Make an Agent Patrol Between a Set of Points](./NavAgentPatrol.md) | Set patrol points for a NavMesh agent. |
|
||||
| [Couple Animation and Navigation](./CouplingAnimationAndNavigation.md) | Integrate animation into your navigation. |
|
||||
@@ -0,0 +1,93 @@
|
||||
# Inner Workings of the Navigation System
|
||||
|
||||
When you want to intelligently move characters in your game (or agents as they are called in AI circles), you have to solve two problems: how to reason about the level to find the destination, then how to move there. These two problems are tightly coupled, but quite different in nature. The problem of reasoning about the level is more global and static, in that it takes into account the whole [**Scene**][1]. Moving to the destination is more local and dynamic, it only considers the direction to move and how to prevent [collisions][2] with other moving agents.
|
||||
|
||||
## Walkable Areas
|
||||
|
||||

|
||||
|
||||
The navigation system needs its own data to represent the walkable areas in a game scene. The walkable areas define the places in the scene where the agent can stand and move. In Unity the agents are described as cylinders. The walkable area is built automatically from the geometry in the scene by testing the locations where the agent can stand. Then the locations are connected to a surface laying on top of the scene geometry. This surface is called the navigation [mesh][3] (NavMesh for short).
|
||||
|
||||
The [NavMesh][4] stores this surface as convex polygons. Convex polygons are a useful representation, since we know that there are no obstructions between any two points inside a polygon. In addition to the polygon boundaries, we store information about which polygons are neighbors to each other. This allows us to reason about the whole walkable area.
|
||||
|
||||
## Finding Paths
|
||||
|
||||

|
||||
|
||||
To find a path between two locations in the scene, we first need to map the start and destination locations to their nearest polygons. Then we start searching from the start location, visiting all the neighbors until we reach the destination polygon. Tracing the visited polygons allows us to find the sequence of polygons which will lead from the start to the destination. A common algorithm to find the path is A\* (pronounced “A star”), which is what Unity uses.
|
||||
|
||||
## Following the Path
|
||||
|
||||

|
||||
|
||||
The sequence of polygons which describe the path from the start to the destination polygon is called a corridor. The agent will reach the destination by always steering towards the next visible corner of the corridor. If you have a simple game where only one agent moves in the scene, it is fine to find all the corners of the corridor in one swoop and animate the character to move along the line segments connecting the corners.
|
||||
|
||||
When dealing with multiple agents moving at the same time, they will need to deviate from the original path when avoiding each other. Trying to correct such deviations using a path consisting of line segments soon becomes very difficult and error prone.
|
||||
|
||||

|
||||
|
||||
Since the agent movement in each frame is quite small, we can use the connectivity of the polygons to fix up the corridor in case we need to take a little detour. Then we quickly find the next visible corner to steer towards.
|
||||
|
||||
## Avoiding Obstacles
|
||||
|
||||

|
||||
|
||||
The steering logic takes the position of the next corner and based on that figures out a desired direction and speed (or velocity) needed to reach the destination. Using the desired velocity to move the agent can lead to collision with other agents.
|
||||
|
||||
Obstacle avoidance chooses a new velocity which balances between moving in the desired direction and preventing future collisions with other agents and edges of the navigation mesh. Unity is using reciprocal velocity obstacles (RVO) to predict and prevent collisions.
|
||||
|
||||
## Moving the Agent
|
||||
|
||||
Finally after steering and obstacle avoidance the final velocity is calculated. In Unity the agents are simulated using a simple dynamic model, which also takes into account acceleration to allow more natural and smooth movement.
|
||||
|
||||
At this stage you can feed the velocity from the simulated agent to the animation system to move the character using [root motion][5], or let the navigation system take care of that.
|
||||
|
||||
Once the agent has been moved using either method, the simulated agent location is moved and constrained to NavMesh. This last small step is important for robust navigation.
|
||||
|
||||
## Global and Local
|
||||
|
||||

|
||||
|
||||
One of the most important things to understand about navigation is the difference between global and local navigation.
|
||||
|
||||
Global navigation is used to find the corridor across the world. Finding a path across the world is a costly operation requiring quite a lot of processing power and memory.
|
||||
|
||||
The linear list of polygons describing the path is a flexible data structure for steering, and it can be locally adjusted as the agent’s position moves. Local navigation tries to figure out how to efficiently move towards the next corner without colliding with other agents or moving objects.
|
||||
|
||||
## Two Cases for Obstacles
|
||||
|
||||
Many applications of navigation require other types of obstacles rather than just other agents. These could be the usual crates and barrels in a shooter game, or vehicles. The obstacles can be handled using local obstacle avoidance or global pathfinding.
|
||||
|
||||
When an obstacle is moving, it is best handled using local obstacles avoidance. This way the agent can predictively avoid the obstacle. When the obstacle becomes stationary, and can be considered to block the path of all agents, the obstacles should affect the global navigation, that is, the navigation mesh.
|
||||
|
||||
Changing the NavMesh is called carving. The process detects which parts of the obstacle touches the NavMesh and carves holes into the NavMesh. This is a computationally expensive operation, which is yet another compelling reason, why moving obstacles should be handled using collision avoidance.
|
||||
|
||||

|
||||
|
||||
You can use local collision avoidance to steer around sparsely scattered obstacles too. Since the algorithm is local, it only considers the next immediate collisions, and cannot steer around traps or handle cases where an obstacle blocks a path. Use carving to solve these cases.
|
||||
|
||||
## About shortcuts between positions on NavMeshes
|
||||
|
||||

|
||||
|
||||
The connections between the NavMesh polygons are described using links inside the pathfinding system. Sometimes it is necessary to let the agent navigate across places which are not walkable, for example, jumping over a fence, or traversing through a closed door. These cases need to know the location of the action.
|
||||
|
||||
You can annotate these actions with the **NavMesh Link** component, which tells the pathfinder that a route exists through the specified link. Your code can later access this link and perform the special action as the agent follows the path.
|
||||
|
||||
## About Voxels
|
||||
|
||||
The NavMesh bake process uses voxelization to build the NavMesh from arbitrary level geometry. The algorithm first [rasterizes](./Glossary.md#rasterization) the scene into voxels, then it extracts the walkable surfaces, then finally, turns the walkable surfaces into a navigation mesh. Voxels are the cells in a regular 3D grid where the scene geometry overlaps with that grid. The grid cells have a width and a length of [**Voxel Size**](./NavMeshSurface.md#advanced-settings) and a height that is half of that width.
|
||||
|
||||
To increase the accuracy of the resulting NavMesh shape, reduce the **Voxel Size** so that the 3D grid can rasterize finer details from the scene geometry. The time it takes to process the scene geometry is proportional to the number of voxels that the geometry occupies. When the NavMesh Surface uses a small voxel size, it generally creates the NavMesh more slowly than when it uses a larger voxel size. If you want to create the NavMesh faster, and you can no longer reduce the number of [scene objects](./NavMeshSurface.md#object-collection) to process, you can increase the voxel size. With that modification, the resulting NavMesh matches the scene geometry with lower accuracy, both at the edges around obstacles and in the elevation relative to the ground.
|
||||
|
||||
To extend the NavMesh Surface through narrow passages, such as doors, and to maintain a quick baking time, choose the voxel size such that 3 voxels fit one Agent radius (6 per diameter). The **NavMesh Surface** uses this size by default. For big open areas, using 1 or 2 voxels per radius speeds up baking. Tight indoor spots are better suited to smaller voxels, for example 4 to 6 voxels per radius. More than 8 voxels per radius does not usually provide much additional benefit.
|
||||
|
||||
[1]: ./Glossary.md#scene "A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces."
|
||||
|
||||
[2]: ./Glossary.md#collision "A collision occurs when the physics engine detects that the colliders of two GameObjects make contact or overlap, when at least one has a Rigidbody component and is in motion."
|
||||
|
||||
[3]: ./Glossary.md#mesh "The main graphics primitive of Unity. Meshes make up a large part of your 3D worlds. Unity supports triangulated or Quadrangulated polygon meshes. Nurbs, Nurms, Subdiv surfaces must be converted to polygons."
|
||||
|
||||
[4]: ./Glossary.md#navmesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[5]: ./Glossary.md#root-motion "Motion of character’s root node, whether it’s controlled by the animation itself or externally."
|
||||
@@ -0,0 +1,53 @@
|
||||
# NavMesh Agent component reference
|
||||
|
||||
The NavMesh Agent component allows you to create characters (agents) that avoid each other as they move through a scene. Agents use the [NavMesh][1] to navigate through the space of the game and avoid each other and other moving obstacles. You can use the scripting API of the NavMesh Agent to handle pathfinding and spatial reasoning.
|
||||
|
||||
To use the NavMesh Agent component, add it to a GameObject:
|
||||
1. Select the GameObject that represents your agent.
|
||||
2. In the Inspector, click **Add Component**.
|
||||
3. Select **Navigation** > **NavMesh Agent**.
|
||||
<br/>The NavMesh Agent component is displayed in the Inspector window.
|
||||
|
||||
You can use this component to create NavMesh agents. For more details, see [Create a NavMesh Agent](./CreateNavMeshAgent.md). For more information about NavMesh agents, see [About NavMesh agents](./AboutAgents.md).
|
||||
|
||||
The following tables describe the properties available in the NavMesh agent component.
|
||||
|
||||
| Property | Description |
|
||||
|:----------------|:------------------------|
|
||||
| **Agent type** | Select the type of agent you want to create. This allows the agent to move along any NavMesh created for the selected agent type. |
|
||||
| **Base offset** | Specify the offset of the collision cylinder in relation to the transform pivot point. |
|
||||
|
||||
## Steering
|
||||
| Property | Description |
|
||||
|:----------------------|:------------------------|
|
||||
| **Speed** | Set the maximum speed (in Unity units per second) at which the agent can move along a path. |
|
||||
| **Angular Speed** | Set the maximum rotation speed (in degrees per second) of the agent. |
|
||||
| **Acceleration** | Set the maximum acceleration (in Unity units per second squared). |
|
||||
| **Stopping Distance** | Specify how close the agent can get to its destination. The agent stops when it arrives this close to the destination location. |
|
||||
| **Auto Braking** | Specify if the agent slows down as it approaches its destination. When enabled, the agent slows down as it approaches the destination. Disable this if you want the agent to move smoothly between multiple points (for example, if the agent is a guard on patrol). |
|
||||
|
||||
## Obstacle Avoidance
|
||||
| Property | Description |
|
||||
|:-------------|:------------------------|
|
||||
| **Radius** | Specify the distance from the agent's center that is used to calculate [collisions][2] between the agent and other GameObjects. |
|
||||
| **Height** | Specify the height clearance that the agent needs to pass below an obstacle that is overhead. For example, the minimum height of a doorway or tunnel.|
|
||||
| **Quality** | Select the obstacle avoidance quality. If you have a high number of agents, you can reduce the obstacle avoidance quality to reduce performance costs. If you set obstacle avoidance quality to none, then collisions resolve, but other agents and obstacles are not actively avoided. |
|
||||
| **Priority** | Specify how agents behave as they avoid each other. Agents avoid other agents of higher priority and ignore other agents of lower priority. The value should be in the range 0–99 where lower numbers indicate higher priority. |
|
||||
|
||||
## Path Finding
|
||||
| Property | Description |
|
||||
|:-------------------------------|:------------------------|
|
||||
| **Auto Traverse OffMesh Link** | Specify whether or not the agent automatically traverses NavMesh links or OffMesh links (deprecated). When enabled, the agent automatically traverses NavMesh links. Disable **Auto Traverse OffMesh Link** if you want to use animation or a specific way to traverse NavMesh links. |
|
||||
| **Auto Repath** | Specify what the agent does when it reaches the end of a partial path. When there is no path to the destination, Unity generates a partial path to the reachable location that is closest to the destination. If this property is enabled, when the agent reaches the end of a partial path it tries again to find a path to the destination. |
|
||||
| **Area Mask** | Specify which [area types](./AreasAndCosts.md#area-mask) the agent considers as it tries to find a path. You can select multiple options. When you prepare meshes for NavMesh baking, you can set each mesh's area type. For example, you can mark stairs with a special area type, and restrict some agent types from using the stairs. |
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Create a NavMesh Agent](./CreateNavMeshAgent.md)
|
||||
- [About NavMesh agents](./AboutAgents.md)
|
||||
- [Inner Workings of the Navigation System](./NavInnerWorkings.md#moving-the-agent)
|
||||
- [NavMesh Agent scripting reference](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent.html)
|
||||
|
||||
[1]: ./Glossary.md#NavMesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[2]: ./Glossary.md#collision "A collision occurs when the physics engine detects that the colliders of two game objects make contact or overlap, and at least one has a Rigidbody component and is in motion."
|
||||
@@ -0,0 +1,10 @@
|
||||
# NavMesh Building Components
|
||||
|
||||
The NavMesh-building components provide you with controls that allow you to automatically generate and use NavMeshes at runtime and in the Unity Editor.
|
||||
|
||||
Here we introduce four high level components for the navigation system:
|
||||
|
||||
* [NavMesh Surface](./NavMeshSurface.md) - Use for building and enabling a NavMesh surface for one type of Agent.
|
||||
* [NavMesh Modifier](./NavMeshModifier.md) - Use for affecting the NavMesh generation of NavMesh area types based on the transform hierarchy.
|
||||
* [NavMesh Modifier Volume](./NavMeshModifierVolume.md) - Use for affecting the NavMesh generation of NavMesh area types based on volume.
|
||||
* [NavMesh Link](./NavMeshLink.md) - Use for connecting the same or different NavMesh surfaces for one type of Agent.
|
||||
@@ -0,0 +1,103 @@
|
||||
# NavMesh Link component reference
|
||||
|
||||
Use the NavMesh Link component to connect different NavMeshes built for the same [agent type](./NavigationWindow.md#agents-tab). The link can be a line from one point to another (no width), or a span (with width). If the link is a span (with width), the Agent uses the nearest location along the entry edge to cross the link. For example, you can use the **NavMesh Link** component to connect a NavMesh that represents a building’s interior to a NavMesh that represents the building’s exterior. You can't overlap separate NavMeshes to create a link between them.
|
||||
|
||||
To use the NavMesh Link you can either add it to your scene as a GameObject or add it to an existing GameObject as a component.
|
||||
|
||||
To add a NavMesh Link to your scene as a GameObject, do the following:
|
||||
- From the main menu go to **GameObject** > **AI** > **NavMesh Link**.<br/> The **NavMesh Link** component is displayed in the **Inspector** window.
|
||||
|
||||
To add the NavMesh Link component to an existing GameObject, do the following:
|
||||
1. Select the GameObject you want to add the component to.
|
||||
2. In the Inspector select **Add Component**, then select **Navigation** > **NavMesh Link**. <br/> The **NavMesh Link** component is displayed in the **Inspector** window.
|
||||
|
||||
|
||||
The following table describes the properties available in the NavMesh Link component.
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="1"><strong>Property</strong></th>
|
||||
<th colspan="2"><strong>Description</strong></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Agent Type</strong></td>
|
||||
<td colspan="2">Specify which Agent type can use the link.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Start Transform</strong></td>
|
||||
<td colspan="2">Select the GameObject that represents the start location of the link. This object is tracked by the middle of the link's start edge.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Start Point</strong></td>
|
||||
<td colspan="2">Specify the start point of the link, relative to the GameObject's world-space position and orientation. The three values define the point's X, Y, and Z coordinates. Neither transform scale nor shear affect this point. </br>The link uses this start position only when <strong>Start Transform</strong> does not reference any object.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>End Transform</strong></td>
|
||||
<td colspan="2">Select the GameObject that represents the end location of the link. This GameObject is tracked by the middle of the link's end edge.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>End Point</strong></td>
|
||||
<td colspan="2">Specify the end point of the link, relative to the GameObject's world-space position and orientation. The three values define the point's X, Y, and Z coordinates. Neither transform scale nor shear affect this point. </br>The link uses this end position only when <strong>End Transform</strong> does not reference any object.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Swap</strong></td>
|
||||
<td colspan="2">Swap the start and end points and swap the start and end transforms.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Re-Center Origin</strong></td>
|
||||
<td colspan="2">Move the GameObject to the center point of the link and align the transform’s forward axis with the end point. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Width</strong></td>
|
||||
<td colspan="2">Specify the width of the link. You can also drag the handles at the side of the link to adjust the width. <br/><strong>Note</strong>: The GameObject's scale does not affect the width of the link.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Cost Override</strong></td>
|
||||
<td colspan="2">Choose how to assign the cost to move across the link. <br/> Select <strong>Cost Override</strong> to set the cost value directly in the adjacent number field.<br/> Deselect <strong>Cost Override</strong> for the cost of the Area type to become the cost of moving over the NavMesh link. In this case the adjacent number field is disabled and not used. <br/> Path finding uses the cost in conjunction with the distance between the start and end positions in world space. Refer to <a href="./AreasAndCosts.html#pathfinding-cost">Areas and costs</a> for more information.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Auto Update Positions</strong></td>
|
||||
<td colspan="2">Update the positions of the link's ends automatically when any of the GameObject transform, the start transform or the end transform change position.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Bidirectional</strong></td>
|
||||
<td colspan="2">Control the direction NavMesh Agents move across the link. When you select this checkbox, NavMesh Agents can move across the link in both directions (from the start point to the end point, and from the end point to the start point).<br/>When you clear this checkbox, NavMesh Agents can only move across the link in one direction (from the start point to the end point).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="5"><strong>Area Type</strong></td>
|
||||
<td colspan="2">The area type of the NavMesh Link. The area type allows you to apply a common traversal cost to similar area types and prevent certain characters from accessing the NavMesh Link based on the agent’s Area Mask. For more information about area types and traversal costs, refer to <a href="./AreasAndCosts.html">Areas and costs</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Walkable</strong></td>
|
||||
<td>Make the link walkable for the affected agent types. This is the default option.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Not Walkable</strong></td>
|
||||
<td>Prevent the affected agent types from crossing the link. Links with a <strong>Not Walkable</strong> area type do not connect to any NavMesh.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Jump</strong></td>
|
||||
<td>Change the area type of the link to <strong>Jump</strong>. This is the type that is assigned to all auto-generated NavMesh links.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Open Area Settings </strong></td>
|
||||
<td>Open the <a href="./NavigationWindow.html#areas-tab">Areas tab</a> of the Navigation window to define new area types or modify existing ones.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Activated</strong></td>
|
||||
<td colspan="2">Allow agents and queries to use the link in pathfinding. <br/>Select <strong>Activated</strong> to display the link's gizmo in the Scene view with black lines. <br/>Deselect <strong>Activated</strong> to display the link's gizmo in the Scene view with red lines.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
To adjust the ends of the link directly from the scene view you can drag the yellow handler gizmos at each end. A yellow cube represents the **Point** position for that end. In the opposite arrangement where the link references an object, a yellow sphere represents the **Transform** position of the referenced object. If you move the yellow sphere, the referenced object moves along to the same position.
|
||||
To adjust the width of the link you can drag the orange dot handler gizmos placed on the sides of the link, at one third of the distance from the start to the end.
|
||||
To display the handles, enable the NavMesh Link gizmo and select the GameObject. For more information on gizmos, refer to [Gizmos menu](https://docs.unity3d.com/6000.0/Documentation/Manual/GizmosMenu.html).
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [About Agents](./NavigationWindow.md#agents-tab)
|
||||
- [Areas and costs](./AreasAndCosts.md)
|
||||
- [OffMesh Link component (deprecated) reference](./OffMeshLink.md)
|
||||
@@ -0,0 +1,80 @@
|
||||
# NavMesh Modifier component reference
|
||||
|
||||
Use the NavMesh Modifier component to adjust the behavior of a [GameObject][1] when the [NavMesh][2] is baked at runtime. The NavMesh Modifier component affects the NavMesh during the generation process only. This means the NavMesh is updated to reflect any changes to NavMesh Modifier components when you bake the NavMesh. Use the available properties to specify changes in behavior and any limits to those changes.
|
||||
|
||||
To use the NavMesh Modifier component, add it to a GameObject as follows:
|
||||
1. Select the GameObject whose effect on the NavMesh you want to modify.
|
||||
2. In the Inspector, select **Add Component**, then select **Navigation** > **NavMesh Modifier**. <br/> The NavMesh Modifier component is displayed in the Inspector window.
|
||||
|
||||
The NavMesh Modifier can also affect the NavMesh generation process hierarchically. This means that the GameObject the component is attached to, as well as all its children, are affected. In addition, you can place another NavMesh Modifier further down the hierarchy to override the NavMesh Modifier that is further up the hierarchy.
|
||||
|
||||
To apply the NavMesh Modifier hierarchically, select the **Apply To Children** property.
|
||||
|
||||
> [!Note]
|
||||
> The NavMesh Modifier component replaces the legacy Navigation Static setting which you could enable from the Objects tab of the Navigation window and the Static flags dropdown on the GameObject. The NavMesh Modifier component is available for baking at runtime, whereas the Navigation Static flags were available in the Editor only.
|
||||
|
||||
The following table describes the properties available in the NavMesh Modifier component.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="1"><strong>Property</strong></th>
|
||||
<th colspan="2"><strong>Description</strong></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td rowspan="3"><strong>Mode</strong></td>
|
||||
<td colspan="2">Specify whether to consider or ignore the affected GameObject(s).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Add or Modify Object</strong></td>
|
||||
<td>Consider the affected GameObject(s) when building the NavMesh.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Remove Object</strong></td>
|
||||
<td>Ignore the affected object(s) when building the NavMesh for the specified agent type.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="3"><strong>Affected Agents</strong></td>
|
||||
<td colspan="2">Specify which agents the NavMesh Modifier affects. For example, you can choose to have certain obstacles be ignored by specific agents. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>All</strong></td>
|
||||
<td>Modify the behavior of all agents. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>None</strong></td>
|
||||
<td>Exclude all agents from the modified behavior.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Apply to Children</strong></td>
|
||||
<td colspan="2">Apply the configuration to the child hierarchy of the GameObject.<br/>To override this component's influence further down the hierarchy, add another NavMesh Modifier component.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2"><strong>Override Area</strong></td>
|
||||
<td colspan="2">Change the <a href="./AreasAndCosts.html">area type</a> for the affected GameObject(s).<br/> If you want to change the area type, select the checkbox then select the new area type in the Area Type dropdown. <br/> If you do not want to change the area type, clear the checkbox.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Area Type</strong></td>
|
||||
<td>Select the new area type you want to apply from the dropdown.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2"><strong>Override Generate Links</strong></td>
|
||||
<td colspan="2">Force the NavMesh bake process to either include or ignore the affected GameObject(s) when you generate links. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Generate Links</strong></td>
|
||||
<td>Specify whether or not to include the affected GameObject(s) when you generate links.<br/> To include the GameObject(s) when you generate links in the NavMesh bake process, select this checkbox. <br/> To ignore the GameObject(s) when you generate links in the NavMesh bake process, clear this checkbox.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## Additional resources
|
||||
- [Create a NavMesh](./CreateNavMesh.md)
|
||||
- [Navigation Areas and Costs](./AreasAndCosts.md)
|
||||
- [Navigation Agent Types](./NavigationWindow.md#agents-tab)
|
||||
|
||||
[1]: ./Glossary.md#gameobject "The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more."
|
||||
|
||||
[2]: ./Glossary.md#navmesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
@@ -0,0 +1,75 @@
|
||||
# NavMesh Modifier Volume component reference
|
||||
|
||||
Use the NavMesh Modifier Volume component to change the area type of any [NavMeshes][1] within a defined region. The available properties allow you to define the affected region and specify the change in area type that you want. However, the modifier volume only affects the NavMeshes that are being newly built for the selected agent types. It has no effect on NavMeshes that already exist in the scene or in that volume and no effect on NavMeshes that get built for unaffected agent types.
|
||||
|
||||
You need to add the NavMesh Modifier Volume component to a [GameObject][2]. Though you can add the NavMesh Modifier Volume component to any GameObject in your scene, you typically add it to the GameObject that's associated with the NavMesh you want to affect.
|
||||
|
||||
To add the NavMesh Modifier Volume component to a GameObject, do the following:
|
||||
1. Select the GameObject you want to use.
|
||||
2. In the Inspector, select **Add Component** > **Navigation** > **NavMesh Modifier Volume**. <br/> The NavMesh Modifier Volume component is displayed in the Inspector window.
|
||||
|
||||
To change the area type of an entire GameObject, use the [NavMesh Modifier](./NavMeshModifier.md) component instead.
|
||||
|
||||
NavMesh Modifier Volume is useful when you need to assign an area type to part of your NavMesh that might not be represented as separate geometry. For example, you can use NavMesh Modifier Volume to make part of your NavMesh non-walkable or more difficult to cross.
|
||||
The NavMesh Modifier Volume always assigns its area type when it overlaps with [NavMesh Modifier](./NavMeshModifier.md) objects, even if the area type of the volume has a lower index. When multiple volumes intersect, the area type with the highest index value out of all of them takes precedence. The exception to these rules is that the built-in Not Walkable area type assigned to any of the overlapping components is always the most important.
|
||||
|
||||
The NavMesh Modifier Volume affects the NavMesh generation process. As a result, the NavMesh is updated to reflect any changes to NavMesh Modifier Volumes.
|
||||
|
||||
The following table describes the properties available in the NavMesh Modifier Volume component.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="1"><strong>Property</strong></th>
|
||||
<th colspan="2"><strong>Description</strong></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td rowspan="1"><strong> Edit Volume </strong></td>
|
||||
<td colspan="2">Toggle the ability to edit the size of the volume in the Scene view. To modify the size of the volume as needed, click the Edit Volume button. A wire box with handles, representing the volume, is displayed in the Scene view. Drag the handles to modify the size of the volume.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong> Size </strong></td>
|
||||
<td colspan="2">Specify the dimensions of the NavMesh Modifier Volume, defined by XYZ measurements.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong> Center </strong></td>
|
||||
<td colspan="2">Specify the center of the NavMesh Modifier Volume relative to the center of the GameObject, defined by XYZ coordinates. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2"><strong> Area Type </strong></td>
|
||||
<td colspan="2">Select the <a href="./AreasAndCosts.html">area type</a> that the NavMesh Modifier Volume applies to NavMeshes within the defined region. The available options include all of the area types that have a cost defined in the <a href="./NavigationWindow.html#areas-tab">Areas tab</a> of the Navigation window.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Open Area Settings </strong></td>
|
||||
<td>Open the Areas tab of the Navigation window to define new area types or modify existing ones.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="4"><strong> Affected Agents </strong></td>
|
||||
<td colspan="2">Select the agent types for which the NavMesh Modifier Volume change applies. For example, you can make the selected NavMesh Modifier Volume a danger zone for specific agent types only. The available options include all of the agent types defined on the <a href="./NavigationWindow.html#areas-tab">Agents tab</a> of the Navigation window.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>All</strong></td>
|
||||
<td>Apply the change to all of the defined agent types whether now or in the future.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>None</strong></td>
|
||||
<td>Do not apply the change to any of the defined agent types.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Defined area types</strong></td>
|
||||
<td>Apply the change to the selected agent types. You can select more than one agent type.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## Additional resources
|
||||
- [Create a NavMesh](./CreateNavMesh.md)
|
||||
- [Navigation Areas and Costs](./AreasAndCosts.md)
|
||||
- [Navigation Agent Types](./NavigationWindow.md#agents-tab)
|
||||
|
||||
[1]: ./Glossary.md#navmesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[2]: ./Glossary.md#gameobject "The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more."
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
# NavMesh Obstacle component reference
|
||||
|
||||
The NavMesh Obstacle component allows you to define obstacles that [NavMesh Agents](./AboutAgents.md) should avoid as they navigate the world (for example, barrels or crates controlled by the physics system). It contains properties that allow you to define the size, shape, and behavior of the obstacle.
|
||||
|
||||
To use the NavMesh component you need to add it to a game object as follows:
|
||||
1. Select the GameObject you want to use as an obstacle.
|
||||
2. In the Inspector select **Add Component**, then select **Navigation** > **NavMesh Obstacle**. <br/> The NavMesh Obstacle component is displayed in the Inspector window.
|
||||
|
||||
You can use this component to create NavMesh obstacles. For more information, see [Create a NavMesh Obstacle](./CreateNavMeshObstacle.md). For more information on NavMesh obstacles and how to use them, see [About NavMesh obstacles](./AboutObstacles.md).
|
||||
|
||||
The following table describes the properties available in the NavMesh Obstacle component.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="1"><strong>Property</strong></th>
|
||||
<th colspan="2"><strong>Description</strong></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td rowspan="3"><strong>Shape</strong></td>
|
||||
<td colspan="2">Specify the shape of the obstacle geometry. Choose whichever one best fits the shape of the object. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Box</strong></td>
|
||||
<td>Select a cube-shaped geometry for the obstacle.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Capsule</strong></td>
|
||||
<td>Select a 3D oval-shaped geometry for the obstacle.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Center</strong></td>
|
||||
<td colspan="2"> Specify the center of the box relative to the transform position.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Size</strong></td>
|
||||
<td colspan="2"> Specify the size of the box. <br/> This property is visible only when <strong>Shape</strong> is set to <strong>Box</strong>. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Center </strong></td>
|
||||
<td colspan="2"> Specify the center of the capsule relative to the transform position.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Radius </strong></td>
|
||||
<td colspan="2"> Specify the radius of the capsule. <br/> This property is visible only when <strong>Shape</strong> is set to <strong>Capsule</strong>. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Height </strong></td>
|
||||
<td colspan="2"> Specify the height of the capsule. <br/> This property is visible only when <strong>Shape</strong> is set to <strong>Capsule</strong>. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="4"><strong>Carve</strong></td>
|
||||
<td colspan="2">Allow the NavMesh Obstacle to create a hole in the NavMesh. <br/> When selected, the NavMesh obstacle carves a hole in the NavMesh. <br/> When deselected, the NavMesh obstacle does not carve a hole in the NavMesh. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Move Threshold</strong></td>
|
||||
<td> Set the threshold distance for updating a moving carved hole. Unity treats the NavMesh obstacle as moving when it has moved more than the distance set by the Move Threshold. <br/> This property is available only when <strong>Carve</strong> is selected.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Time To Stationary</strong></td>
|
||||
<td> Specify the time (in seconds) to wait until the obstacle is treated as stationary. <br/> This property is available only when <strong>Carve</strong> is selected.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Carve Only Stationary</strong></td>
|
||||
<td> Specify when the obstacle is carved. <br/> This property is available only when <strong>Carve</strong> is selected.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [About NavMesh obstacles](./AboutObstacles.md "Details on how to use NavMesh obstacles.")
|
||||
- [Create a NavMesh Obstacle](./CreateNavMeshObstacle.md "Guidance on creating NavMesh obstacles.")
|
||||
- [Inner Workings of the Navigation System](./NavInnerWorkings.md#two-cases-for-obstacles "Learn more about how NavMesh Obstacles are used as part of navigation.")
|
||||
- [NavMesh Obstacle scripting reference](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshObstacle.html "Full description of the NavMesh Obstacle scripting API.")
|
||||
@@ -0,0 +1,146 @@
|
||||
# NavMesh Surface component reference
|
||||
|
||||
Use the NavMesh Surface component to define and build a [NavMesh](./Glossary.md#NavMesh) for a specific type of [NavMesh Agent](./NavMeshAgent.md) in your scene. Use the available properties to specify the type of NavMesh Agent that can use the NavMesh, the area type to assign to the generated NavMesh, and the geometry to use when you bake the NavMesh.
|
||||
|
||||
To use the **NavMesh Surface** component, apply it to the [GameObject](./Glossary.md#gameobject) on which you want to build the NavMesh.
|
||||
|
||||
To apply the NavMesh Surface component to a GameObject, do the following:
|
||||
|
||||
1. Select the GameObject.
|
||||
2. In the Inspector, select **Add Component** > **Navigation** > **NavMesh Surface**. <br/> The Inspector window displays the NavMesh Surface component.
|
||||
|
||||
In the NavMesh Surface component, you can click **Bake** to generate the NavMesh for the current settings and scene geometry. The resulting [NavMesh data](./NavMeshSurface.md#navmesh-surface-asset-file) replaces any NavMesh that **NavMesh Surface** already contains, if that is the case.
|
||||
A [**Scene**](./Glossary.md#scene) can contain multiple NavMesh surfaces. You can add the NavMesh Surface component to any GameObject in your scene. This is useful for when you want to use the GameObject parenting [hierarchy][1] to define which GameObjects contribute to the NavMesh. Only the NavMesh Surface components that are enabled and part of active GameObjects load their NavMesh data into the navigation system. You can unload NavMesh data from the scene by disabling either the **NavMesh Surface** that contains it or the GameObject that the NavMesh Surface is attached to.
|
||||
|
||||
<a id="navmesh-surface-main-settings"></a>
|
||||
The following table describes the properties available in the NavMesh Surface component. Use the main settings for the NavMesh Surface component to filter the input geometry on a broad scale. Use the [NavMesh Modifier](./NavMeshModifier.md) component to adjust how Unity treats input geometry on a per-GameObject basis.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="1"><strong>Property</strong></th>
|
||||
<th colspan="2"><strong>Description</strong></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Agent Type</strong></td>
|
||||
<td colspan="2">Select the type of <a href="NavMeshAgent.html">NavMesh Agent</a> that can use the NavMesh.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="4"><strong>Default Area</strong></td>
|
||||
<td colspan="2">Specify the area type to assign to the generated NavMesh. The area types define how difficult it is for agents to move across the NavMesh. The available options include all of the area types defined on the Areas tab of the Navigation window. There are 29 custom area types and 3 built-in area types: </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Walkable</strong></td>
|
||||
<td>Make the NavMesh walkable for the assigned Agent type. (This is the default option.)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Not Walkable</strong></td>
|
||||
<td>Prevent the specified Agent type from crossing this surface unless there is a GameObject that <a href="NavMeshModifier.html">overrides the area type</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Jump</strong></td>
|
||||
<td>This option is used for automatically generated links. <br/> For more details about area types, refer to <a href="AreasAndCosts.html">Navigation Areas and Costs</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Generate Links</strong></td>
|
||||
<td colspan="2">Automatically generate links between objects that the NavMesh Surface collects when you bake the NavMesh. If you select <strong>Generate Links</strong>, NavMesh Surface attempts to generate links between any collected GameObjects when you bake the NavMesh. If you do not select <strong>Generate Links</strong>, NavMesh Surface doesn't attempt to generate any links between the collected GameObjects when you bake the NavMesh.<br/> Refer to the <a href="BuildingOffMeshLinksAutomatically.html#links-generation">Links Generation</a> section for more information.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="3"><strong>Use Geometry</strong></td>
|
||||
<td colspan="2">Select which geometry to use when you bake the NavMesh.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Render Meshes</strong></td>
|
||||
<td>Use geometry from Render Meshes and <a href="https://docs.unity3d.com/6000.0/Documentation/Manual/terrain-UsingTerrains.html">Terrains</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Physics Colliders</strong></td>
|
||||
<td>Use geometry from Colliders and Terrains. Agents can move closer to the edge of the physical bounds of the environment with this option than they can with the <strong>Render Meshes</strong> option. For more information on Colliders, refer to <a href="https://docs.unity3d.com/6000.0/Documentation/Manual/CollidersOverview.html">Introduction to collision</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>NavMesh Data</strong><a id="navmesh-surface-asset-file"></a></td>
|
||||
<td colspan="2">(Read-only) Locate the asset file where the NavMesh is stored.</br> The text box displays <strong>None</strong> when the NavMesh Surface does not contain NavMesh data.</br> The text box displays <strong>Missing</strong> if you delete the asset file from the Project window and don't use <strong>Clear</strong> first.</br></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Clear</strong></td>
|
||||
<td colspan="2">Remove the asset file where the NavMesh is stored. </br> Use this button also when you plan to remove the component.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Bake</strong></td>
|
||||
<td colspan="2">Bake a NavMesh with the current settings. When you bake the NavMesh, it automatically excludes GameObjects that have a <strong>NavMesh Agent</strong> or <strong>NavMesh Obstacle</strong>. They are dynamic users of the NavMesh and don't contribute to the process. </br> Unity stores the NavMesh data in an asset file. The <strong>NavMesh Data</strong> property displays a reference to the asset file.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## Object collection
|
||||
|
||||
Use the Object Collection settings to define which GameObjects to use when you bake the NavMesh.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="1"><strong>Property</strong></th>
|
||||
<th colspan="2"><strong>Description</strong></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td rowspan="5"><strong>Collect Objects</strong></td>
|
||||
<td colspan="2">Define which GameObjects to use when you bake the NavMesh.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>All Game Objects</strong></td>
|
||||
<td>Use all active GameObjects in the scene. (This is the default option.)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Volume</strong></td>
|
||||
<td>Use all active GameObjects that overlap the bounding volume. Geometry that is located outside of the bounding volume but within the agent radius is included when you bake the NavMesh.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Current Object Hierarchy</strong></td>
|
||||
<td>Use the GameObject that the <strong>NavMesh Surface</strong> component is placed on and all active GameObjects which are children of this GameObject. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>NavMeshModifier Component Only</strong></td>
|
||||
<td>Use any GameObjects in the scene that have a NavMesh Modifier attached to them and, if their <strong>Apply To Children</strong> option is turned on, use their child objects as well.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Include Layers</strong></td>
|
||||
<td colspan="2">Select the layers for which GameObjects are included in the bake process. In addition to <strong>Collect Objects</strong>, this allows for further exclusion of specific GameObjects from the bake process (for example, effects or animated characters).<br/> This is set to <strong>Everything</strong> by default, but you can toggle options on (denoted by a check mark) or off, individually.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Furthermore, you can use the [NavMesh Modifier](./NavMeshModifier.md) component to designate more precisely the objects, and their hierarchies, that the NavMesh Surface can or cannot collect.
|
||||
|
||||
## Advanced Settings
|
||||
|
||||
Use the Advanced settings section to customize the following additional properties:
|
||||
|
||||
| **Property** | **Description** |
|
||||
|:------------------------|:---------------------|
|
||||
| **Override Voxel Size** | Control how accurately Unity processes the input geometry when you bake the NavMesh. This is a trade-off between speed and accuracy. <br/> The default size is one third of the Agent [radius](./NavigationWindow.md#agents-tab), which translates into 3 [voxels](./NavInnerWorkings.md#about-voxels) per Agent radius. This voxel size allows the capture of narrow passages, such as doors, and maintains a quick baking time. For big open areas, you can use 1 or 2 voxels per radius to speed up baking. Tight indoor spots are better suited to smaller voxels, for example 4 to 6 voxels per radius. More than 8 voxels per radius doesn't usually provide much additional benefit. <br/> To change the default size, select this checkbox. In the **Voxel Size** field, specify the size of the voxels to use when you bake the NavMesh. |
|
||||
| **Voxel Size** | Specify the size, in world units, of the voxels to use when you bake the NavMesh. This property is only available if you select the **Override Voxel Size** option.|
|
||||
| **Override Tile Size** | Change the default Tile Size of the NavMesh. To make the bake process parallel and memory efficient, the Scene is divided into tiles for baking. The white lines visible on the NavMesh are tile boundaries. <br/> The default tile size is 256 voxels, which provides a good trade-off between memory use and NavMesh fragmentation. <br/> To change this default tile size, select this checkbox. In the **Tile Size** field, specify the number of voxels you want the tile size to be. <br/> The smaller the tiles, the more fragmented the NavMesh is. This can sometimes cause non-optimal paths. NavMesh carving also operates on tiles. If you have a lot of obstacles in your scene, you can often speed up carving by making the tile size smaller (for example around 64 to 128 voxels). For more information, refer to [Carving](./AboutObstacles.md#carving). <br/> If you plan to bake the NavMesh at runtime, use a smaller tile size to keep the maximum memory use low.|
|
||||
| **Tile Size** | Specify the desired Tile Size in voxels. This property is only available if you select the **Override Tile Size** option. |
|
||||
| **Minimum Region Area**| Remove small regions that are disconnected from the larger NavMesh. The process that builds the NavMesh doesn't retain the stretches of the mesh that have a surface size smaller than the specified value. <br/> **Note**: Some areas might not get removed despite the **Minimum Region Area** parameter. The NavMesh is built in parallel as a grid of tiles. If an area straddles a tile boundary, the area isn't removed. The reason for this is that the area pruning step takes place at a stage in the build process when the surrounding tiles aren't accessible. |
|
||||
| **Build Height Mesh** | Generate additional data that specifies the height of the surface at each point on the NavMesh. Select this option to generate HeightMesh data. Clear this option if you do not want to generate HeightMesh data. For more information, refer to [**Build a HeightMesh for Accurate Character Placement**](./HeightMesh.md). |
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [About NavMesh agents](./AboutAgents.md)
|
||||
- [Build a HeightMesh for Accurate Character Placement](./HeightMesh.md)
|
||||
- [Links Generation](./BuildingOffMeshLinksAutomatically.md#links-generation)
|
||||
- [Carving](./AboutObstacles.md#carving)
|
||||
- [Hierarchy](https://docs.unity3d.com/6000.0/Documentation/Manual/Hierarchy.html)
|
||||
- [Create a NavMesh agent](./CreateNavMeshAgent.md)
|
||||
- [Navigation areas and costs](./AreasAndCosts.md)
|
||||
- [Navigation agent configurations](./NavigationWindow.md#agents-tab)
|
||||
- [NavMesh Modifier component reference](./NavMeshModifier.md)
|
||||
- [NavMesh Modifier Volume component reference](./NavMeshModifierVolume.md)
|
||||
- Physics [Colliders](https://docs.unity3d.com/6000.0/Documentation/Manual/CollidersOverview.html)
|
||||
- [Terrains](https://docs.unity3d.com/6000.0/Documentation/Manual/terrain-UsingTerrains.html)
|
||||
|
||||
[1]: ./Glossary.md#hierarchy "Unity uses the concept of parent-child hierarchies, or parenting, to group GameObjects. An object can contain other GameObjects that inherit its properties."
|
||||
@@ -0,0 +1,33 @@
|
||||
# Move an Agent to a Position Clicked by the Mouse
|
||||
|
||||
This script lets you choose the destination point on the [**NavMesh**][1] by clicking the mouse on the object’s surface. The position of the click is determined by a _raycast_, rather like pointing a laser beam at the object to see where it hits (see the page [Rays from the Camera][2] for a full description of this technique). Since the [GetComponent][3] function is fairly slow to execute, the script stores its result in a variable during the _Start_ function rather than call it repeatedly in _Update_.
|
||||
|
||||
``` C#
|
||||
// MoveToClickPoint.cs
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
|
||||
public class MoveToClickPoint : MonoBehaviour {
|
||||
NavMeshAgent agent;
|
||||
|
||||
void Start() {
|
||||
agent = GetComponent<NavMeshAgent>();
|
||||
}
|
||||
|
||||
void Update() {
|
||||
if (Input.GetMouseButtonDown(0)) {
|
||||
RaycastHit hit;
|
||||
|
||||
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100)) {
|
||||
agent.destination = hit.point;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[1]: ./Glossary.md#navmesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
|
||||
[2]: https://docs.unity3d.com/6000.0/Documentation/Manual/CameraRays.html
|
||||
|
||||
[3]: https://docs.unity3d.com/6000.0/Documentation/ScriptReference/GameObject.GetComponent.html
|
||||
@@ -0,0 +1,23 @@
|
||||
# Tell a NavMeshAgent to Move to a Destination
|
||||
|
||||
You can tell an agent to start calculating a path simply by setting the [NavMeshAgent.destination][1] property with the point you want the agent to move to. As soon as the calculation is finished, the agent will automatically move along the path until it reaches its destination. The following code implements a simple class that uses a [**GameObject**][2] to mark the target point which gets assigned to the _destination_ property in the _Start_ function. Note that the script assumes you have already added and configured the NavMeshAgent component from the editor.
|
||||
|
||||
``` C#
|
||||
// MoveDestination.cs
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
|
||||
public class MoveDestination : MonoBehaviour {
|
||||
|
||||
public Transform goal;
|
||||
|
||||
void Start () {
|
||||
NavMeshAgent agent = GetComponent<NavMeshAgent>();
|
||||
agent.destination = goal.position;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[1]: https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.NavMeshAgent-destination.html
|
||||
|
||||
[2]: https://docs.unity3d.com/6000.0/Documentation/Manual/class-GameObject.html "The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it."
|
||||
@@ -0,0 +1,35 @@
|
||||
# AI Navigation overlay reference
|
||||
|
||||
The **AI Navigation** overlay allows you to control the display of NavMesh surfaces, agents, and GameObjects in the Scene view. You can use it to help you debug any issues with AI Navigation and pathfinding.
|
||||
|
||||
Use the [Overlay Menu](https://docs.unity3d.com/Manual/display-and-hide-overlay.html) to show or hide the **AI Navigation** overlay. It docks to the lower right corner of the Scene view by default. To [reposition](https://docs.unity3d.com/Manual/position-overlay.html) the overlay, click and drag its handle.
|
||||
|
||||
## Surfaces
|
||||
This section controls the way [NavMesh Surface](./NavMeshSurface.md) instances are displayed. The following table describes the controls available in the Surfaces section of the overlay.
|
||||
|
||||
| **Control** | **Description** |
|
||||
| :---------------------- | :------------------------ |
|
||||
| **Show Only Selected** | Display only the surfaces part of the current scene selection hierarchy.<br/> You can set the opacity of the selected and non-selected surfaces in the Preferences window. For more details, refer to [AI Navigation preferences](./NavEditorPreferences.md). |
|
||||
| **Show NavMesh** | Display navigation meshes for the relevant surfaces. <br/>The colors used to display this mesh are the ones defined for the area types. |
|
||||
| **Show HeightMesh** | Display [**HeightMeshes**](./HeightMesh.md) (surface precise elevation information) for the relevant surfaces. |
|
||||
|
||||
## Agents
|
||||
This section controls the displayed information for the currently selected [NavMesh Agents](./NavMeshAgent.md). The following table describes the controls available in the Agents section of the overlay.
|
||||
|
||||
| **Control** | **Description** |
|
||||
| :------------------------ | :------------------------ |
|
||||
| **Show Path Polygons** | Display the NavMesh polygons part of the agent's path in a darker color. |
|
||||
| **Show Path Query Nodes** | Display the path nodes explored during the pathfinding query in yellow. |
|
||||
| **Show Neighbors** | Display the collision avoidance neighbors (dynamic obstacles) relative to the agent. |
|
||||
| **Show Walls** | Display the collision avoidance walls (static obstacles) for an agent. |
|
||||
| **Show Avoidance** | Show the different positions sampled during the collision avoidance process. |
|
||||
|
||||
## Obstacles
|
||||
This section controls the displayed information for the currently selected [NavMesh Obstacles](./NavMeshObstacle.md). The following table describes the controls available in the Obstacles section of the overlay.
|
||||
|
||||
| **Control** | **Description** |
|
||||
| :------------------- | :-------------------------|
|
||||
| **Show Carve Hull** | Display the convex shape that is used to carve the NavMesh. |
|
||||
|
||||
## Additional resources
|
||||
- [Overlays](xref:overlays) - How to use and work with overlays.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Navigation Overview
|
||||
|
||||
This section provides details on how to build NavMeshes for your [**Scene**][1] or prefabs, and create [**NavMesh**][2] agents, NavMesh obstacles and NavMesh links.
|
||||
|
||||
| **Topic** | **Description** |
|
||||
|:-----------|:-------------------------------|
|
||||
| [Create a NavMesh](./CreateNavMesh.md)| Define the area(s) of your scene where a character can navigate intelligently. |
|
||||
| [Create a NavMesh agent](./CreateNavMeshAgent.md)| Create a character to navigate your scene. |
|
||||
| [Create a NavMesh obstacle](./CreateNavMeshObstacle.md) | Create obstacles for the agents to avoid as they navigate your scene. |
|
||||
| [Create a NavMesh link](./CreateNavMeshLink.md) | Create navigation shortcuts that cannot be represented by a walkable surface. |
|
||||
| [Using NavMesh Agent with other components](./MixingComponents.md) | Best practices when using navigation components along with other Unity components.|
|
||||
| [Advanced navigation how-tos](./NavHowTos.md)| Advanced techniques to implement common tasks in navigation. |
|
||||
|
||||
|
||||
[1]: ./Glossary.md#scene "A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces."
|
||||
|
||||
[2]: ./Glossary.md#navmesh "A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation."
|
||||
@@ -0,0 +1,10 @@
|
||||
# Navigation System in Unity
|
||||
|
||||
This section describes the key concepts necessary to use AI Navigation in Unity. It contains the following topics:
|
||||
|
||||
| **Topic** | **Description** |
|
||||
|:-----------|:-------------------------------|
|
||||
| [**Inner Workings of the Navigation System**](./NavInnerWorkings.md)| Understand how the different elements of the AI Navigation system work together. |
|
||||
| [**About Agents**](./AboutAgents.md)| Learn about NavMesh agents. |
|
||||
| [**About Obstacles**](./AboutObstacles.md)| Learn about NavMesh obstacles. |
|
||||
| [**Navigation Areas and Costs**](./AreasAndCosts.md)| Understand the purpose of navigation areas and why you would use one type of area over another. |
|
||||
@@ -0,0 +1,44 @@
|
||||
# Navigation window reference
|
||||
|
||||
Use the Navigation window to specify the types of NavMesh agents and areas used in your scenes.
|
||||
|
||||
To get to the Navigation window, in the main menu go to **Window** > **AI** > **Navigation**.
|
||||
|
||||
## Agents tab
|
||||
The Agents tab contains properties that allow you to define the type of agents that you use in your scenes.
|
||||
|
||||
| **Property** | **Description** |
|
||||
| :------------------ | :------------------------ |
|
||||
| **Agent Types** | Select an agent type to modify. <br/> Click the "+" icon to add an agent type. <br/> Click the "-" icon to remove the currently selected agent type. |
|
||||
| **Name** | Specify the name of the type of agent. |
|
||||
| **Radius** | Define how close the agent center can get to a wall or a ledge. |
|
||||
| **Height** | Specify the height of this type of agent in Unity units. |
|
||||
| **Step Height** | Specify the maximum step height that this type of agent can climb. |
|
||||
| **Max Slope** | Specify how steep of a ramp the agent can walk up. Type a value, in degrees, in the text box or drag the slider to adjust the value. |
|
||||
|
||||
### Generated Links
|
||||
The following table describes the properties that define the limits of this agent type with respect to generated links.
|
||||
|
||||
| **Property** | **Description** |
|
||||
| :------------------ | :------------------------ |
|
||||
| **Drop Height** | Specify the maximum height from which this agent type can jump down. |
|
||||
| **Jump Distance** | Specify the maximum distance of jump-across links for this agent type. |
|
||||
|
||||
## Areas tab
|
||||
The Areas tab contains properties that allow you to specify how difficult it is to walk across the different area types used in your scenes. There are 29 custom area types, and 3 built-in area types:
|
||||
|
||||
- **Walkable** is a generic area type which specifies that the area can be walked on.
|
||||
- **Not Walkable** is a generic area type which prevents navigation. It is useful for cases where you want to mark a certain object to be an obstacle, but you don't want to put a NavMesh on top of it.
|
||||
- **Jump** is an area type that is assigned to all auto-generated links that connect NavMeshes.
|
||||
|
||||
The following table describes the properties available on the Areas tab.
|
||||
|
||||
| **Property** | **Description** |
|
||||
| :-------------- | :------------------------ |
|
||||
| **Name** | Specify a name for the area type. |
|
||||
| **Cost** | Specify the cost of traveling across this area. Costs are multipliers applied to the distance traveled across an area. A cost of 2 means an area is twice as difficult to cross as an area with a cost of 1. The default value is 1. |
|
||||
|
||||
## Additional resources
|
||||
- [About NavMesh agents](./AboutAgents.md)
|
||||
- [Create a NavMesh agent](./CreateNavMeshAgent.md)
|
||||
- [Navigation Areas and costs](./AreasAndCosts.md)
|
||||
@@ -0,0 +1,68 @@
|
||||
# OffMesh Link component reference
|
||||
|
||||
> [!Important]
|
||||
> The OffMesh Link component is deprecated and no longer supported. Use the [NavMesh Link component](./NavMeshLink.md) instead.
|
||||
|
||||
Use OffMesh Link components to incorporate navigation shortcuts, which can't be represented using a walkable surface, into your scene. For example, with OffMesh links, an agent can jump over a ditch or a fence, or open a door then walk through it.
|
||||
|
||||
OffMesh Links only apply to the Humanoid agent type, so if the NavMeshes in your scene use a different agent type, the OffMesh Link won't create a link between them.
|
||||
|
||||
The following table describes the properties available in the OffMesh Link component:
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="1"><strong>Property</strong></th>
|
||||
<th colspan="2"><strong>Description</strong></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Start</strong></td>
|
||||
<td colspan="2">Select the GameObject that represents the start location of the link.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>End</strong></td>
|
||||
<td colspan="2">Select the GameObject that represents the end location of the link.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Cost Override</strong></td>
|
||||
<td colspan="2">Override the cost to move across the link. <br/>If the Cost Override value is negative, the cost of the Navigation Area type is used. If the Cost Override value is non-negative, the cost of moving over the link is equal to the Cost Override value multiplied by the length of the link. The length of the link is the distance between the start and end points of the link.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Bidirectional</strong></td>
|
||||
<td colspan="2">Control the direction NavMesh Agents move across the link. When you select this checkbox, NavMesh Agents can move across the link in both directions (from the start to the end, and from the end to the start).<br/>When you clear this checkbox, NavMesh Agents can only move across the link in one direction (from the start to the end).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Activated</strong></td>
|
||||
<td colspan="2">Allow the link to be used in pathfinding.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="1"><strong>Auto Update Positions</strong></td>
|
||||
<td colspan="2">Reconnect the OffMesh link to the NavMesh if you move the end points. If disabled, the link stays at its start location even if the end points move.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="4"><strong>Navigation Area</strong></td>
|
||||
<td colspan="2">Specify the area type of the OffMesh Link. Use the area type to apply a common traversal cost to similar area types and prevent certain characters from crossing the link based on the agent’s Area Mask.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Walkable</strong></td>
|
||||
<td>Make the link walkable for the affected agent types. This is the default option.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Not Walkable</strong></td>
|
||||
<td>Prevent the affected agent types from crossing the link.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Jump</strong></td>
|
||||
<td>Change the area type of the link to Jump.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [NavMesh Link component reference](./NavMeshLink.md)
|
||||
- [Create Off-Mesh Links (deprecated)](./CreateOffMeshLink.md)
|
||||
- [Off-Mesh Link (deprecated) scripting reference](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/AI.OffMeshLink.html)
|
||||
@@ -0,0 +1,15 @@
|
||||
# Navigation user interface
|
||||
|
||||
The Navigation user interface consists of the Navigation window, AI Navigation overlay, AI Navigation Editor Preferences and several components for building a NavMesh. The NavMesh building components provide you with additional controls that allow you to generate and use NavMeshes at runtime and in the Unity Editor.
|
||||
|
||||
| **Topic** | **Description** |
|
||||
| :-------------------- | :----------------------- |
|
||||
| [**Navigation window**](./NavigationWindow.md) | Define the types of agents and areas in your game world. |
|
||||
| [**AI Navigation preferences**](./NavEditorPreferences.md) | Customize the navigation debug visualization. |
|
||||
| [**AI Navigation overlay**](./NavigationOverlay.md) | Display navigation debug visualization. |
|
||||
| [**NavMesh Agent component**](./NavMeshAgent.md) | Define the characters that you want to navigate the game world. |
|
||||
| [**NavMesh Surface component**](./NavMeshSurface.md) | Build and enable a NavMesh surface for one type of Agent. |
|
||||
| [**NavMesh Modifier component**](./NavMeshModifier.md) | Adjust the behavior of a GameObject when the NavMesh is baked at runtime. |
|
||||
| [**NavMesh Modifier Volume component**](./NavMeshModifierVolume.md) | Control the generation of NavMesh area types based on volume. |
|
||||
| [**NavMesh Obstacle component**](./NavMeshObstacle.md) | Define moving obstacles that NavMesh Agents avoid as they navigate your game world. |
|
||||
| [**NavMesh Link component**](./NavMeshLink.md) | Connect the NavMesh surfaces for each type of agent. |
|
||||
@@ -0,0 +1,19 @@
|
||||
# Navigation Samples
|
||||
|
||||
The following sample scenes are included with the AI Navigation package:
|
||||
|
||||
1. **Multiple Agent Sizes**: Demonstrates how a different radius on an agent type can change the way agents navigate through the same scene.
|
||||
|
||||
2. **Drop Plank**: Demonstrates dynamically changing walkable paths by allowing the player to add walkable planks by pressing space.
|
||||
|
||||
3. **Free Orientation**: Demonstrates a controllable agent that can walk on a tilted plane.
|
||||
|
||||
4. **Sliding Window Infinite**: Demonstrates a controllable agent that can walk through a dynamically created world that gets updated to simulate infinity as the agent walks through it. The NavMesh is only built in some set bounds that follow the agent.
|
||||
|
||||
5. **Sliding Window Terrain**: Demonstrates a controllable agent that can walk through a terrain for which the NavMesh is only generated within a set distance of the agent.
|
||||
|
||||
6. **Modify Mesh**: Demonstrates agents walking aimlessly on planes whose mesh can be modified dynamically by the player.
|
||||
|
||||
7. **Dungeon**: Demonstrates a controllable agent that can walk through a maze generated from pre-baked tiles that connect to each other at runtime. The link traversal animation can be modified with some presets (teleport, normal speed, parabola, curve).
|
||||
|
||||
8. **Height Mesh**: Demonstrates two agents walking down stairs. The environment on the left uses `NavMeshSurface` with a Height Mesh which allows the agent to snap to each step in the stairs as it goes down. The environment on the right uses a `NavMeshSurface` with no Height Mesh; the agent simply slides down the stairs.
|
||||
@@ -0,0 +1,33 @@
|
||||
* [Navigation and Pathfinding](./index.md)
|
||||
* [What's new](./whats-new.md)
|
||||
* [Upgrade](./UpgradeGuide.md)
|
||||
* [Navigation System in Unity](./NavigationSystem.md)
|
||||
* [Inner Workings of the Navigation System](./NavInnerWorkings.md)
|
||||
* [About Agents](./AboutAgents.md)
|
||||
* [About Obstacles](./AboutObstacles.md)
|
||||
* [Navigation Areas and Costs](./AreasAndCosts.md)
|
||||
* [Navigation overview](./NavigationOverview.md)
|
||||
* [Create a NavMesh](./CreateNavMesh.md)
|
||||
* [Create a NavMesh agent](./CreateNavMeshAgent.md)
|
||||
* [Create a NavMesh obstacle](./CreateNavMeshObstacle.md)
|
||||
* [Create a NavMesh link](./CreateNavMeshLink.md)
|
||||
* [Use NavMesh Agents with other components](./MixingComponents.md)
|
||||
* [Build a HeightMesh for Accurate Character Placement](./HeightMesh.md)
|
||||
* [Advanced navigation how-tos](./NavHowTos.md)
|
||||
* [Tell a NavMesh agent to move to a destination](./NavMoveToDestination.md)
|
||||
* [Move an agent to a position clicked by the mouse](./NavMoveToClickPoint.md)
|
||||
* [Make an agent patrol between a set of points](./NavAgentPatrol.md)
|
||||
* [Couple animation and navigation](./CouplingAnimationAndNavigation.md)
|
||||
* [Navigation interface](./Reference.md)
|
||||
* [AI Navigation editor preferences](./NavEditorPreferences.md)
|
||||
* [AI Navigation overlay](./NavigationOverlay.md)
|
||||
* [Navigation window](./NavigationWindow.md)
|
||||
* [NavMesh Agent component](./NavMeshAgent.md)
|
||||
* [NavMesh Link component](./NavMeshLink.md)
|
||||
* [NavMesh Modifier component](./NavMeshModifier.md)
|
||||
* [NavMesh Modifier Volume component](./NavMeshModifierVolume.md)
|
||||
* [NavMesh Obstacle component](./NavMeshObstacle.md)
|
||||
* [NavMesh Surface component](./NavMeshSurface.md)
|
||||
* [OffMesh Link component (deprecated)](./OffMeshLink.md)
|
||||
* [Navigation Samples](./Samples.md)
|
||||
* [Glossary](./Glossary.md)
|
||||
@@ -0,0 +1,81 @@
|
||||
# Upgrade projects for use with AI Navigation package
|
||||
|
||||
Navigation and Pathfinding in Unity is handled by the AI Navigation package as of Unity 2022.2.
|
||||
|
||||
If you have projects that were created with the Navigation feature in previous versions of Unity, the AI Navigation package is automatically installed and added to your project. You can then do one of the following:
|
||||
|
||||
- Continue to use your projects as they are
|
||||
- Convert your projects to use the new package
|
||||
|
||||
## Remove old component scripts
|
||||
|
||||
If your project uses the **NavMesh Surface**, **NavMesh Modifier**, **NavMesh Modifier Volume** or **NavMesh Link** components defined by scripts downloaded from [Unity’s NavMeshComponents GitHub repository](https://github.com/Unity-Technologies/NavMeshComponents), then remove those scripts and any associated files before you add the AI Navigation package to your project. If you don’t remove these scripts, you might get conflicts and errors related to these components in the Console. The new components mirror the same behavior as the old components do in your project except when using the following components:
|
||||
|
||||
- The **NavMesh Surface** component now includes an option to use only the objects that have a **NavMesh Modifier** in the baking process.
|
||||
- You can now specify whether or not to apply the **NavMesh Modifier** component to child objects in the hierarchy.
|
||||
|
||||
## Convert your project
|
||||
|
||||
If you want to use the new package you need to convert your project(s). As part of the conversion process, the **Navigation Updater** makes the following changes:
|
||||
|
||||
- Any NavMesh that was previously baked and embedded in the scene is now referenced from a **NavMesh Surface** component created on a new GameObject
|
||||
called Navigation.
|
||||
- Any object that was marked with Navigation Static now has a **NavMesh Modifier** component with the appropriate settings.
|
||||
|
||||
The updater can also convert **OffMesh Link** components to **NavMesh Link** components. Refer to [Convert OffMesh Link to NavMesh Link](#convert-offmesh-link-to-navmesh-link) for more information.
|
||||
|
||||
To convert your project do the following:
|
||||
|
||||
1. In the main menu go to **Window** > **AI** > **Navigation Updater**.
|
||||
2. In the **Navigation Updater** window, select which kind of data to convert.
|
||||
2. In the **Navigation Updater** window, verify that **NavMesh Scene Converter** is selected.
|
||||
4. Select the data you want to convert.
|
||||
5. Click **Convert Assets** to complete the conversion.
|
||||
|
||||
## Create new agent types
|
||||
|
||||
If the NavMeshes in different scenes are baked with different agent settings then you need to create new agent types to match those settings.
|
||||
|
||||
To create the agent types do the following:
|
||||
|
||||
1. In the main menu go to **Window** > **AI** > **Navigation**.
|
||||
2. Select **Agents**.
|
||||
3. Create new entries and specify the relevant settings.
|
||||
|
||||
### Assign new agent types
|
||||
When you have created the new agent types you then need to assign them as follows:
|
||||
|
||||
- Assign the newly created agent types to their respective **NavMesh Surfaces** in the Navigation GameObject created for that scene.
|
||||
- Assign the agent types to the **NavMesh Agents** intended to use that NavMesh.
|
||||
|
||||
To find the settings that were used for each existing NavMesh, select the NavMesh `.asset` file in the **Project** window. The NavMesh settings will be displayed in the **Inspector**.
|
||||
|
||||
## Create NavMesh Links instead of OffMesh Links
|
||||
|
||||
The **OffMesh Link** component was originally designed to work with only the **Humanoid** agent type. Now it has been deprecated. Your project can still use this component but you can no longer add it from the editor. You are encouraged to use the **NavMesh Link** component instead. It has the same properties as **OffMesh Link**, and a few additional ones: agent type, width, and two positions that can define the ends.
|
||||
|
||||
To replace an **OffMesh Link** component with a **NavMesh Link** component do the following:
|
||||
|
||||
1. Select the GameObject that has the **OffMesh Link** component. The GameObject can be in a scene or a prefab.
|
||||
2. Add a **NavMesh Link** component.
|
||||
3. Assign to the **NavMesh Link** the same properties as the **OffMesh Link**.
|
||||
4. Remove the **OffMesh Link** from the GameObject.
|
||||
5. Save the scene or prefab as needed.
|
||||
|
||||
|
||||
### Convert OffMesh Links to NavMesh Links
|
||||
|
||||
To ease the transition from [OffMesh Link](./OffMeshLink.md) to [NavMesh Link](./NavMeshLink.md), the package comes with an upgrade utility to automatically change any **OffMesh Link** component into a **NavMesh Link** component. The upgrade utility scans all scenes and prefabs in the project to find all instances of **OffMesh Link** components.
|
||||
|
||||
To convert **OffMesh Link** components to **NavMesh Link** components do the following:
|
||||
1. From the main menu go to **Window** > **AI** > **Navigation Updater**.
|
||||
2. In the **Navigation Updater** window, verify that **OffMesh Link Converter** is checked.
|
||||
3. Select **Initialize Converters** to detect and display the prefabs and scenes that are eligible for conversion.
|
||||
4. Deselect any items you do not want to convert.
|
||||
5. Select **Convert Assets** to complete the conversion.
|
||||
|
||||
Do note that the upgrade utility will not replace `OffMeshLink` with `NavMeshLink` in scripts. Refer to the following section for information on how to perform this upgrade manually.
|
||||
|
||||
### Replace OffMeshLink with NavMeshLink in scripts
|
||||
|
||||
In your scripts you can replace any occurrence of the `OffMeshLink` class with the `NavMeshLink` class. The scripts will continue to work as before, as long as the `NavMeshLink` component exists on the affected GameObjects. The `OffMeshLink` properties `autoUpdatePositions`, `biDirectional`, `costOverride` and the method `UpdatePositions()` have equivalents in the `NavMeshLink` component. You can substitute those class members in places where you use them in scripts, or you can accept the suggestion from the **Script Updating Consent** utility to do the same thing. This utility runs when the editor reloads the scripts in the project.
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"DefineConstants": "UNITY_2023_2_OR_NEWER"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
apiRules:
|
||||
- exclude:
|
||||
uidRegex: ^Unity\.AI\.Navigation\.Editor\.Converter.*$
|
||||
type: Namespace
|
||||
- exclude:
|
||||
uidRegex: ^Unity\.AI\.Navigation\.Samples.*$
|
||||
type: Namespace
|
||||
- exclude:
|
||||
uidRegex: ^Unity\.AI\.Navigation\.Tests.*$
|
||||
type: Namespace
|
||||
- exclude:
|
||||
uidRegex: ^Unity\.AI\.Navigation\.Editor\.Tests.*$
|
||||
type: Namespace
|
||||
@@ -0,0 +1,31 @@
|
||||
# AI Navigation
|
||||
|
||||
The navigation system allows you to create characters that can intelligently move around the game world. These characters use navigation meshes that are created automatically from your [**Scene**][1] geometry. Dynamic obstacles allow you to alter the navigation of the characters at runtime, while NavMesh links let you build specific actions like opening doors or jumping over gaps or down from a ledge. This section describes Unity's navigation and pathfinding systems in detail.
|
||||
|
||||
The following table describes the main topics of the AI Navigation package documentation.
|
||||
|
||||
| **Topic** | **Description** |
|
||||
|:-----------------------------------------------|:------------------------------------------------------------|
|
||||
| [**What's new**](./whats-new.md) | See what's changed in the latest version of the AI Navigation package. |
|
||||
| [**Upgrade**](./UpgradeGuide.md) | Convert your projects to work with the new navigation system. |
|
||||
| [**Navigation System**](./NavigationSystem.md) | Understand the key concepts necessary to use AI Navigation in Unity. |
|
||||
| [**Navigation Overview**](./NavigationOverview.md) | Create NavMeshes, agents, links, and obstacles with this package. |
|
||||
| [**Navigation Interface**](./Reference.md) | Learn about the interface of the Navigation components in this package. |
|
||||
| [**Samples**](./Samples.md) | Learn about the sample projects included with this package. |
|
||||
| [**Glossary**](./Glossary.md) | View AI Navigation terminology definitions. |
|
||||
|
||||
## Additional resources
|
||||
- [A guide on using the new AI Navigation package in Unity 2022 LTS and above](https://discussions.unity.com/t/a-guide-on-using-the-new-ai-navigation-package-in-unity-2022-lts-and-above)
|
||||
- [Navigation tutorials](http://unity3d.com/learn/tutorials/topics/navigation)
|
||||
- [Getting Started with AI Pathfinding](https://learn.unity.com/project/beginner-ai-pathfinding)
|
||||
- [Navigation Meshes](https://learn.unity.com/project/navigation-meshes)
|
||||
- [Working with NavMesh Agents](https://learn.unity.com/tutorial/working-with-navmesh-agents)
|
||||
- [3D Game Kit](https://assetstore.unity.com/packages/templates/tutorials/unity-learn-3d-game-kit-115747) and [3D Game Kit Lite](https://assetstore.unity.com/packages/templates/tutorials/3d-game-kit-lite-135162) - Sample projects that include navigation
|
||||
- [The Explorer: 3D Game Kit](https://learn.unity.com/project/3d-game-kit?uv=2020.3) - Tutorial about the sample project
|
||||
- [Enemies in the 3D Game Kit](https://learn.unity.com/tutorial/quick-start?uv=2020.3&projectId=5c514897edbc2a001fd5bdd0#5c7f8528edbc2a002053b746)
|
||||
- [A Deeper Look at Enemies](https://learn.unity.com/tutorial/3d-game-kit-walkthrough?uv=2020.3&projectId=5c514897edbc2a001fd5bdd0#5c7f8528edbc2a002053b753)
|
||||
- [Decorating in 3D Game Kit](https://learn.unity.com/tutorial/quick-start?uv=2020.3&projectId=5c514897edbc2a001fd5bdd0#5c7f8528edbc2a002053b746)
|
||||
- [Unity Discussions](https://discussions.unity.com/tag/navigation) - Navigation topics on the Unity forums
|
||||
- [Unity Knowledge Base](https://support.unity3d.com/hc/en-us)
|
||||
|
||||
[1]: ./Glossary.md#scene "A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces."
|
||||
@@ -0,0 +1,15 @@
|
||||
# What's new in AI Navigation version 2.0.0
|
||||
|
||||
The main updates in this release include:
|
||||
|
||||
## Added
|
||||
|
||||
* New option to specify the end points of a NavMeshLink through Transform references.
|
||||
* New `NavMeshLink.activated` property that gets or sets whether agents can use the link.
|
||||
|
||||
## Updated
|
||||
|
||||
* The `NavMeshLink.costModifier` property is now a float.
|
||||
* The `OffMeshLink` component has been deprecated. You can no longer add it to GameObjects from the **Add Component** menu. Instead, you can now use a `NavMeshLink` component just as you would have used an `OffMeshLink` component in previous versions.
|
||||
|
||||
For a full list of changes and updates in this version, see the AI Navigation package changelog.
|
||||