1118 lines
779 KiB
HTML
1118 lines
779 KiB
HTML
|
<!DOCTYPE HTML>
|
||
|
<html lang="en">
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
<meta name="generator" content="Doxydoc"/>
|
||
|
<meta name="description" content="Get Started with the A* Pathfinding Project.">
|
||
|
<title>Get Started Guide - A* Pathfinding Project</title>
|
||
|
<style>/*!
|
||
|
* Bootstrap v3.3.5 (http://getbootstrap.com)
|
||
|
* Copyright 2011-2015 Twitter, Inc.
|
||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
|
* Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=ca1d29b8c16a782c676c)
|
||
|
* Config saved to config.json and https://gist.github.com/ca1d29b8c16a782c676c
|
||
|
*//*!
|
||
|
* Bootstrap v3.3.5 (http://getbootstrap.com)
|
||
|
* Copyright 2011-2015 Twitter, Inc.
|
||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||
|
*//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}
|
||
|
<style>.com { color: #93a1a1; }
|
||
|
.lit { color: #195f91; }
|
||
|
.pun, .opn, .clo { color: #93a1a1; }
|
||
|
.fun { color: #dc322f; }
|
||
|
.str, .atv { color: #D14; }
|
||
|
.kwd, .prettyprint .tag { color: #1e347b; }
|
||
|
.typ, .atn, .dec, .var { color: teal; }
|
||
|
.pln { color: #48484c; }
|
||
|
|
||
|
.prettyprint {
|
||
|
padding: 8px;
|
||
|
background-color: #f7f7f9;
|
||
|
border: 1px solid #e1e1e8;
|
||
|
}
|
||
|
.prettyprint.linenums {
|
||
|
-webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
|
||
|
-moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
|
||
|
box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
|
||
|
}
|
||
|
|
||
|
/* Specify class=linenums on a pre to get line numbering */
|
||
|
ol.linenums {
|
||
|
margin: 0 0 0 33px; /* IE indents via margin-left */
|
||
|
}
|
||
|
ol.linenums li {
|
||
|
padding-left: 12px;
|
||
|
color: #bebec5;
|
||
|
line-height: 20px;
|
||
|
text-shadow: 0 1px 0 #fff;
|
||
|
}
|
||
|
|
||
|
.str { color:#181; font-style:italic }
|
||
|
.kwd { color:#369 }
|
||
|
.com { color:#666 }
|
||
|
.typ { color:#c40 }
|
||
|
.lit { color:#900 }
|
||
|
.pun { color:#000; font-weight:bold }
|
||
|
.pln { color:#333 }
|
||
|
.tag { color:#369; font-weight:bold }
|
||
|
.atn { color:#939; font-weight:bold }
|
||
|
.atv { color:#181 }
|
||
|
.dec { color:#606 }
|
||
|
|
||
|
.com{ color: #A62A00; }
|
||
|
.typ{ color: #0A67A3; }
|
||
|
.kwd{ color: #3B0470; }</style>
|
||
|
<style>nav.sidebar {
|
||
|
width: 300px;
|
||
|
margin-top: 75px;
|
||
|
box-shadow: inset 2px 0px 0px 0px #CCC;
|
||
|
flex-grow: 0;
|
||
|
flex-shrink: 0;
|
||
|
}
|
||
|
nav.sidebar #searchfield {
|
||
|
width: 100%;
|
||
|
background-color: #f5f5f5;
|
||
|
border-radius: 4px;
|
||
|
}
|
||
|
nav.sidebar .sidebar-package-header {
|
||
|
padding-left: 18px;
|
||
|
padding-bottom: 5px;
|
||
|
padding-top: 10px;
|
||
|
position: relative;
|
||
|
vertical-align: baseline;
|
||
|
}
|
||
|
nav.sidebar .sidebar-brand {
|
||
|
font-size: 14pt;
|
||
|
font-family: bitter;
|
||
|
color: #333;
|
||
|
}
|
||
|
nav.sidebar .sidebar-brand:hover {
|
||
|
text-decoration: none;
|
||
|
color: #000;
|
||
|
}
|
||
|
nav.sidebar .package-version {
|
||
|
font-family: bitter;
|
||
|
margin-left: 8px;
|
||
|
right: 10px;
|
||
|
position: absolute;
|
||
|
padding-right: 10px;
|
||
|
}
|
||
|
|
||
|
nav.navbar span.package-version {
|
||
|
display: inline-block;
|
||
|
font-size: 18px;
|
||
|
line-height: 20px;
|
||
|
color: #777;
|
||
|
}
|
||
|
nav.navbar .navbar-header {
|
||
|
display: flex;
|
||
|
flex-direction: row;
|
||
|
align-items: center;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version {
|
||
|
font-size: 18px;
|
||
|
margin-right: 8px;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version button {
|
||
|
background-color: rgba(255, 255, 255, 0);
|
||
|
border-color: rgba(255, 255, 255, 0);
|
||
|
transition: background-color 0.1s, border-color 0.1s, color 0.1s;
|
||
|
color: #777;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version button .caret {
|
||
|
opacity: 0.5;
|
||
|
transition: opacity 0.1s;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version button:hover {
|
||
|
border-color: #adadad;
|
||
|
color: #333333;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version button:hover .caret {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version button:active {
|
||
|
border-color: #999;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version li a {
|
||
|
gap: 5px;
|
||
|
display: flex;
|
||
|
flex-direction: row;
|
||
|
justify-content: flex-start;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version .item-version {
|
||
|
width: 50px;
|
||
|
flex-grow: 0;
|
||
|
flex-shrink: 0;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version .item-date {
|
||
|
color: #666;
|
||
|
margin-right: 25px;
|
||
|
flex-grow: 1;
|
||
|
}
|
||
|
nav.navbar .dropdown.package-version .dropdown-menu {
|
||
|
max-height: 385px;
|
||
|
overflow-y: scroll;
|
||
|
}
|
||
|
nav.navbar .version-badge {
|
||
|
font-size: 10px;
|
||
|
padding: 2px 8px;
|
||
|
background: #3872d7;
|
||
|
color: white;
|
||
|
border-radius: 3px;
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
|
||
|
.wrapper {
|
||
|
display: flex;
|
||
|
align-items: start;
|
||
|
}
|
||
|
|
||
|
.sidenav-l0 {
|
||
|
padding-left: 0px;
|
||
|
font-weight: bold;
|
||
|
line-height: 1.5;
|
||
|
margin-bottom: 0px;
|
||
|
}
|
||
|
.sidenav-l0 li {
|
||
|
position: relative;
|
||
|
display: block;
|
||
|
list-style: none;
|
||
|
}
|
||
|
.sidenav-l0 a {
|
||
|
position: relative;
|
||
|
display: block;
|
||
|
padding-left: 10px;
|
||
|
padding-top: 0px;
|
||
|
padding-bottom: 5px;
|
||
|
}
|
||
|
.sidenav-l0 a:hover, .sidenav-l0 a:focus {
|
||
|
text-decoration: none;
|
||
|
}
|
||
|
.sidenav-l0 li > a:hover, .sidenav-l0 li.active > a {
|
||
|
padding-left: 8px;
|
||
|
border-width: 0px 0px 0px 2px;
|
||
|
border-color: #000000;
|
||
|
border-style: solid;
|
||
|
background-color: transparent;
|
||
|
}
|
||
|
.sidenav-l0 li.active > a {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
|
||
|
li p {
|
||
|
margin-bottom: 0px;
|
||
|
}
|
||
|
|
||
|
.sidenav-l1 {
|
||
|
font-weight: normal;
|
||
|
padding-left: 0px;
|
||
|
}
|
||
|
.sidenav-l1 li > a {
|
||
|
padding-left: 30px;
|
||
|
}
|
||
|
.sidenav-l1 li > a:hover, .sidenav-l1 li.active > a {
|
||
|
padding-left: 28px;
|
||
|
}
|
||
|
|
||
|
.sidenav-l2 {
|
||
|
font-weight: normal;
|
||
|
padding-left: 0px;
|
||
|
}
|
||
|
.sidenav-l2 li > a {
|
||
|
padding-left: 40px;
|
||
|
}
|
||
|
.sidenav-l2 li > a:hover, .sidenav-l2 li.active > a {
|
||
|
padding-left: 38px;
|
||
|
}
|
||
|
|
||
|
.sidenav-l3 {
|
||
|
font-weight: normal;
|
||
|
padding-left: 0px;
|
||
|
}
|
||
|
.sidenav-l3 li > a {
|
||
|
padding-left: 50px;
|
||
|
}
|
||
|
.sidenav-l3 li > a:hover, .sidenav-l3 li.active > a {
|
||
|
padding-left: 48px;
|
||
|
}
|
||
|
|
||
|
.sidenav-l4 {
|
||
|
font-weight: normal;
|
||
|
padding-left: 0px;
|
||
|
}
|
||
|
.sidenav-l4 li > a {
|
||
|
padding-left: 60px;
|
||
|
}
|
||
|
.sidenav-l4 li > a:hover, .sidenav-l4 li.active > a {
|
||
|
padding-left: 58px;
|
||
|
}
|
||
|
|
||
|
.arrow-down {
|
||
|
width: 0;
|
||
|
height: 0;
|
||
|
border-left: 4px solid transparent;
|
||
|
border-right: 4px solid transparent;
|
||
|
border-top: 4px solid #333;
|
||
|
margin-right: 4px;
|
||
|
display: inline-block;
|
||
|
}
|
||
|
|
||
|
.arrow-none {
|
||
|
width: 0;
|
||
|
height: 0;
|
||
|
margin-right: 12px;
|
||
|
display: inline-block;
|
||
|
}
|
||
|
|
||
|
.arrow-right {
|
||
|
width: 0;
|
||
|
height: 0;
|
||
|
border-top: 4px solid transparent;
|
||
|
border-bottom: 4px solid transparent;
|
||
|
border-left: 4px solid #333;
|
||
|
margin-right: 8px;
|
||
|
display: inline-block;
|
||
|
}
|
||
|
|
||
|
.container {
|
||
|
margin-right: auto;
|
||
|
margin-left: auto;
|
||
|
padding-left: 15px;
|
||
|
padding-right: 15px;
|
||
|
padding-top: 25px;
|
||
|
}
|
||
|
|
||
|
/*@media (min-width: 768px) {
|
||
|
.container {
|
||
|
width: 750px;
|
||
|
}
|
||
|
}
|
||
|
@media (min-width: 992px) {
|
||
|
.container {
|
||
|
width: 970px;
|
||
|
}
|
||
|
}
|
||
|
@media (min-width: 1200px) {
|
||
|
.container {
|
||
|
width: 1170px;
|
||
|
}
|
||
|
}
|
||
|
@media (min-width: 1200px + 300px) {
|
||
|
.container {
|
||
|
width: 1170px + 300px;
|
||
|
}
|
||
|
}*/
|
||
|
body {
|
||
|
font-family: "Source Sans Pro", sans-serif;
|
||
|
font-size: 15px;
|
||
|
}
|
||
|
|
||
|
h1, h2, h3, h4 {
|
||
|
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||
|
}
|
||
|
|
||
|
span.file-location {
|
||
|
color: #BDBDBD;
|
||
|
}
|
||
|
|
||
|
.sidebar {
|
||
|
display: block;
|
||
|
font-size: 80%;
|
||
|
line-height: 50%;
|
||
|
}
|
||
|
|
||
|
.memberdef {
|
||
|
position: relative;
|
||
|
border-width: 2px;
|
||
|
border-style: solid;
|
||
|
border-width: 2px;
|
||
|
border-color: black;
|
||
|
box-shadow: 0px 2px 5px #CCC;
|
||
|
-webkit-border-radius: 5;
|
||
|
-moz-border-radius: 5;
|
||
|
border-radius: 5;
|
||
|
margin: 5px;
|
||
|
padding: 5px;
|
||
|
}
|
||
|
.memberdef h3 {
|
||
|
margin-top: 0px;
|
||
|
padding-top: 3px;
|
||
|
font-size: 20px;
|
||
|
line-height: normal;
|
||
|
}
|
||
|
|
||
|
table.compound-view tr {
|
||
|
margin: 4px;
|
||
|
}
|
||
|
table.compound-view tr td {
|
||
|
font-size: 11px;
|
||
|
}
|
||
|
table.compound-view tr a {
|
||
|
transition: background-color 0.1s;
|
||
|
-webkit-transition: background-color 0.1s;
|
||
|
display: block;
|
||
|
border-radius: 5px;
|
||
|
border-style: solid;
|
||
|
border-width: 1px;
|
||
|
border-color: #FFF;
|
||
|
height: 60px;
|
||
|
background-color: #EEE;
|
||
|
text-align: center;
|
||
|
padding: 5px;
|
||
|
color: #222;
|
||
|
}
|
||
|
table.compound-view tr a b {
|
||
|
color: #0D5484;
|
||
|
}
|
||
|
table.compound-view tr a:hover {
|
||
|
text-decoration: none;
|
||
|
background-color: #DDD;
|
||
|
}
|
||
|
|
||
|
video, .youtube-video {
|
||
|
border-radius: 3px;
|
||
|
margin: 5px;
|
||
|
margin-left: auto;
|
||
|
margin-right: auto;
|
||
|
max-width: 100%;
|
||
|
max-height: 800px;
|
||
|
display: block;
|
||
|
border: 1px solid #444;
|
||
|
}
|
||
|
|
||
|
img {
|
||
|
border-radius: 3px;
|
||
|
margin: 5px;
|
||
|
margin-left: auto;
|
||
|
margin-right: auto;
|
||
|
max-width: 100%;
|
||
|
max-height: 800px;
|
||
|
display: block;
|
||
|
border: 1px solid #444;
|
||
|
}
|
||
|
|
||
|
.borderless img {
|
||
|
border: none;
|
||
|
}
|
||
|
|
||
|
code {
|
||
|
display: block;
|
||
|
white-space: pre;
|
||
|
overflow: auto;
|
||
|
margin-top: 5px;
|
||
|
}
|
||
|
|
||
|
/** Needs a bit of resetting since it can turn out basically anywhere in the DOM */
|
||
|
.tooltip {
|
||
|
margin: 0px;
|
||
|
font-size: 11px;
|
||
|
font-weight: normal;
|
||
|
font-style: normal;
|
||
|
text-decoration: none;
|
||
|
line-height: normal;
|
||
|
white-space: normal;
|
||
|
font-family: Hevetica, Arial, Sans-serif;
|
||
|
text-shadow: none;
|
||
|
}
|
||
|
.tooltip p {
|
||
|
display: inline;
|
||
|
margin: 0px;
|
||
|
}
|
||
|
|
||
|
.label {
|
||
|
margin-right: 2px;
|
||
|
margin-left: 2px;
|
||
|
}
|
||
|
|
||
|
.empty-section {
|
||
|
font-size: 0.9em;
|
||
|
color: #BBB;
|
||
|
}
|
||
|
|
||
|
.compound-kind {
|
||
|
color: #888;
|
||
|
}
|
||
|
|
||
|
.simplesect {
|
||
|
border-style: solid;
|
||
|
border-width: 0px 0px 0px 4px;
|
||
|
padding-left: 5px;
|
||
|
padding-top: 4px;
|
||
|
padding-bottom: 5px;
|
||
|
margin-bottom: 5px;
|
||
|
}
|
||
|
.simplesect .simplesect-title {
|
||
|
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||
|
font-weight: bold;
|
||
|
font-size: 16px;
|
||
|
line-height: normal;
|
||
|
margin-top: 2px;
|
||
|
margin-bottom: 3px;
|
||
|
}
|
||
|
.simplesect > p {
|
||
|
margin-top: 0px;
|
||
|
margin-bottom: 0px;
|
||
|
margin-left: 14px;
|
||
|
}
|
||
|
|
||
|
.simplesect-return {
|
||
|
border-color: #505050;
|
||
|
background-color: #5050501F;
|
||
|
}
|
||
|
|
||
|
.simplesect-author, .simplesect-authors {
|
||
|
border-color: #0BAA0B;
|
||
|
background-color: #0BAA0B1F;
|
||
|
}
|
||
|
|
||
|
.simplesect-version {
|
||
|
border-color: #0BAA0B;
|
||
|
background-color: #0BAA0B1F;
|
||
|
}
|
||
|
|
||
|
.simplesect-since {
|
||
|
border-color: #D48B0D;
|
||
|
background-color: #D48B0D1F;
|
||
|
}
|
||
|
|
||
|
.simplesect-date {
|
||
|
border-color: #505050;
|
||
|
background-color: #5050501F;
|
||
|
}
|
||
|
|
||
|
.simplesect-note {
|
||
|
border-color: #15458C;
|
||
|
background-color: #15458C1F;
|
||
|
}
|
||
|
|
||
|
.simplesect-warning {
|
||
|
border-color: #D40D0D;
|
||
|
background-color: #D40D0D1F;
|
||
|
}
|
||
|
|
||
|
.simplesect-pre {
|
||
|
border-color: #505050;
|
||
|
background-color: #5050501F;
|
||
|
}
|
||
|
|
||
|
.simplesect-post {
|
||
|
border-color: #505050;
|
||
|
background-color: #5050501F;
|
||
|
}
|
||
|
|
||
|
.simplesect-copyright {
|
||
|
border-color: #505050;
|
||
|
background-color: #5050501F;
|
||
|
}
|
||
|
|
||
|
.simplesect-invariant {
|
||
|
border-color: #505050;
|
||
|
background-color: #5050501F;
|
||
|
}
|
||
|
|
||
|
.simplesect-remark {
|
||
|
border-color: #15458C;
|
||
|
background-color: #15458C1F;
|
||
|
}
|
||
|
|
||
|
.simplesect-attention {
|
||
|
border-color: #D48B0D;
|
||
|
background-color: #D48B0D1F;
|
||
|
}
|
||
|
|
||
|
.simplesect-par {
|
||
|
border-color: #505050;
|
||
|
background-color: #5050501F;
|
||
|
}
|
||
|
|
||
|
.simplesect-rcs {
|
||
|
border-color: #505050;
|
||
|
background-color: #5050501F;
|
||
|
}
|
||
|
|
||
|
.simplesect-see {
|
||
|
border-color: #0BAA0B;
|
||
|
background-color: #0BAA0B1F;
|
||
|
}
|
||
|
|
||
|
.simplesect-deprecated {
|
||
|
border-color: #303030;
|
||
|
background-color: #3030301F;
|
||
|
}
|
||
|
|
||
|
.member-list .member-brief {
|
||
|
font-family: monospace;
|
||
|
}
|
||
|
.member-list .member-brief .member-name {
|
||
|
color: #337ab7;
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
.member-list .member-brief .member-paramlist {
|
||
|
color: #5b5b5b;
|
||
|
}
|
||
|
.member-list .member-desc p {
|
||
|
text-overflow: ellipsis;
|
||
|
white-space: nowrap;
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
|
||
|
.member-prot {
|
||
|
white-space: nowrap;
|
||
|
}
|
||
|
|
||
|
.member-list-item-header {
|
||
|
padding-top: 5px;
|
||
|
padding-bottom: 1px;
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
.member-list-item-header p {
|
||
|
margin-top: 0px;
|
||
|
margin-bottom: 0px;
|
||
|
}
|
||
|
|
||
|
.member-list-item-header:focus, .member-list-item-header:hover {
|
||
|
background-color: rgba(0, 0, 0, 0.05);
|
||
|
}
|
||
|
|
||
|
table.member-list-section td {
|
||
|
padding-top: 0.1em;
|
||
|
padding-bottom: 0.1em;
|
||
|
}
|
||
|
table.member-list-section .member-desc {
|
||
|
width: 100%;
|
||
|
}
|
||
|
table.member-list-section .member-desc, table.member-list-section .member-name, table.member-list-section .member-type {
|
||
|
font-size: 0.9em;
|
||
|
margin-bottom: 0px;
|
||
|
padding-bottom: 0px;
|
||
|
}
|
||
|
table.member-list-section a, table.member-list-section p, table.member-list-section span {
|
||
|
-webkit-margin-after: 0px;
|
||
|
line-height: 1.5em;
|
||
|
vertical-align: center;
|
||
|
}
|
||
|
|
||
|
.member-detailed {
|
||
|
background: #EEE;
|
||
|
border-bottom: 1px #AAA solid;
|
||
|
}
|
||
|
.member-detailed .member-name {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
@media print {
|
||
|
.member-detailed {
|
||
|
display: block;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.member-params-detail {
|
||
|
margin-left: 30px;
|
||
|
margin-top: 5px;
|
||
|
}
|
||
|
.member-params-detail td, .member-params-detail th {
|
||
|
padding-left: 8px;
|
||
|
padding-right: 8px;
|
||
|
padding-top: 2px;
|
||
|
padding-bottom: 2px;
|
||
|
vertical-align: top;
|
||
|
}
|
||
|
.member-params-detail td p, .member-params-detail th p {
|
||
|
margin: 0 0 5px;
|
||
|
}
|
||
|
.member-params-detail .param-name {
|
||
|
color: #000;
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
|
||
|
.protection {
|
||
|
display: inline;
|
||
|
padding: 0.4em 0.6em 0em 0.6em;
|
||
|
margin-right: 0.2em;
|
||
|
font-size: 75%;
|
||
|
font-weight: bold;
|
||
|
line-height: 1;
|
||
|
color: #ffffff;
|
||
|
text-align: center;
|
||
|
white-space: nowrap;
|
||
|
vertical-align: baseline;
|
||
|
border-radius: 0.3em;
|
||
|
background-color: #fc20e6;
|
||
|
}
|
||
|
|
||
|
.member-side-prot {
|
||
|
margin: 5px 5px 5px 0px;
|
||
|
}
|
||
|
|
||
|
@media (min-width: 908px) {
|
||
|
.member-side-prot {
|
||
|
margin: 0px;
|
||
|
position: absolute;
|
||
|
left: -75px;
|
||
|
width: 70px;
|
||
|
text-align: right;
|
||
|
}
|
||
|
.member-side-prot span {
|
||
|
margin-bottom: 3px;
|
||
|
}
|
||
|
}
|
||
|
.member-top-prot {
|
||
|
position: absolute;
|
||
|
left: 0px;
|
||
|
top: 0px;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
background: #EEE;
|
||
|
display: none;
|
||
|
padding: 5px 5px 5px 15px;
|
||
|
line-height: 50%;
|
||
|
border-top: 1px #AAA solid;
|
||
|
}
|
||
|
.member-top-prot .protection {
|
||
|
display: inline-block;
|
||
|
padding: 0.4em 0.6em 0.4em 0.6em;
|
||
|
}
|
||
|
|
||
|
.member-side-prot {
|
||
|
line-height: 50%;
|
||
|
}
|
||
|
.member-side-prot .protection {
|
||
|
display: inline-block;
|
||
|
padding: 0.4em 0.6em 0.4em 0.6em;
|
||
|
}
|
||
|
|
||
|
.deprecated {
|
||
|
text-decoration: line-through;
|
||
|
text-decoration-color: #555;
|
||
|
}
|
||
|
|
||
|
.protection-public {
|
||
|
background-color: #5cb85c;
|
||
|
}
|
||
|
|
||
|
.protection-private {
|
||
|
background-color: #666666;
|
||
|
}
|
||
|
|
||
|
.protection-protected {
|
||
|
background-color: #c1c1c1;
|
||
|
}
|
||
|
|
||
|
.protection-package {
|
||
|
background-color: #7f3b2c;
|
||
|
}
|
||
|
|
||
|
.protection-abstract {
|
||
|
background-color: #865add;
|
||
|
}
|
||
|
|
||
|
.protection-readonly {
|
||
|
background-color: #f0ad4e;
|
||
|
}
|
||
|
|
||
|
.protection-static {
|
||
|
background-color: #5bc0de;
|
||
|
}
|
||
|
|
||
|
a:focus {
|
||
|
outline: none;
|
||
|
}
|
||
|
|
||
|
.member-list {
|
||
|
list-style-type: none;
|
||
|
padding-left: 0px;
|
||
|
}
|
||
|
.member-list ul {
|
||
|
list-style-type: none;
|
||
|
padding-left: 0px;
|
||
|
}
|
||
|
|
||
|
.member-depth-1 {
|
||
|
padding-left: 32px;
|
||
|
}
|
||
|
|
||
|
.member-depth-2 {
|
||
|
padding-left: 52px;
|
||
|
}
|
||
|
|
||
|
.member-depth-3 {
|
||
|
padding-left: 72px;
|
||
|
}
|
||
|
|
||
|
.member-depth-4 {
|
||
|
padding-left: 92px;
|
||
|
}
|
||
|
|
||
|
.member-depth-5 {
|
||
|
padding-left: 112px;
|
||
|
}
|
||
|
|
||
|
.member-depth-6, .member-depth-7, .member-depth-8 {
|
||
|
padding-left: 132px;
|
||
|
}
|
||
|
|
||
|
.header-version {
|
||
|
position: absolute;
|
||
|
right: 20px;
|
||
|
top: 0;
|
||
|
vertical-align: center;
|
||
|
line-height: 50px;
|
||
|
color: #777;
|
||
|
}
|
||
|
|
||
|
.inner-dropdown-menu {
|
||
|
list-style: none;
|
||
|
font-size: 14px;
|
||
|
text-align: left;
|
||
|
padding-left: 0px;
|
||
|
}
|
||
|
.inner-dropdown-menu > li > a {
|
||
|
display: block;
|
||
|
padding: 3px 20px 3px 40px;
|
||
|
clear: both;
|
||
|
font-weight: normal;
|
||
|
line-height: 1.42857143;
|
||
|
color: #333333;
|
||
|
white-space: nowrap;
|
||
|
}
|
||
|
.inner-dropdown-menu > li > a:hover,
|
||
|
.inner-dropdown-menu > li > a:focus {
|
||
|
text-decoration: none;
|
||
|
color: #262626;
|
||
|
background-color: #f5f5f5;
|
||
|
}
|
||
|
.inner-dropdown-menu > .active > a,
|
||
|
.inner-dropdown-menu > .active > a:hover,
|
||
|
.inner-dropdown-menu > .active > a:focus {
|
||
|
color: #ffffff;
|
||
|
text-decoration: none;
|
||
|
outline: 0;
|
||
|
background-color: #337ab7;
|
||
|
}
|
||
|
|
||
|
.dropdown-menu a {
|
||
|
height: 26px;
|
||
|
}
|
||
|
.dropdown-menu a .glyphicon {
|
||
|
margin-right: 8px;
|
||
|
padding-top: 1px;
|
||
|
}
|
||
|
.dropdown-menu a small {
|
||
|
float: right;
|
||
|
margin-left: 10px;
|
||
|
line-height: 182%;
|
||
|
}
|
||
|
|
||
|
.search-dropdown-align {
|
||
|
margin-left: 0px;
|
||
|
min-width: 208px;
|
||
|
}
|
||
|
|
||
|
@keyframes shadowPulse {
|
||
|
0% {
|
||
|
box-shadow: 0px 0px 0px rgba(71, 91, 118, 0.7);
|
||
|
}
|
||
|
10% {
|
||
|
box-shadow: 0px 0px 0px rgba(71, 91, 118, 0.7);
|
||
|
}
|
||
|
50% {
|
||
|
box-shadow: 0px 0px 10px rgba(71, 91, 118, 0.7);
|
||
|
}
|
||
|
100% {
|
||
|
box-shadow: 0px 0px 0px rgba(71, 91, 118, 0.7);
|
||
|
}
|
||
|
}
|
||
|
.shadowPulse {
|
||
|
animation-name: shadowPulse;
|
||
|
animation-duration: 1s;
|
||
|
animation-iteration-count: 2;
|
||
|
animation-timing-function: ease;
|
||
|
}
|
||
|
|
||
|
#banner {
|
||
|
width: 100%;
|
||
|
display: block;
|
||
|
text-align: center;
|
||
|
background: #f0af0b;
|
||
|
padding-top: 7px;
|
||
|
color: #000;
|
||
|
overflow: hidden;
|
||
|
padding-bottom: 6px;
|
||
|
}
|
||
|
#banner a {
|
||
|
color: #000;
|
||
|
text-decoration: underline;
|
||
|
}
|
||
|
|
||
|
h1 {
|
||
|
margin-top: 0px;
|
||
|
}
|
||
|
|
||
|
table.table-filled {
|
||
|
border: 1px solid #e1e1e8;
|
||
|
border-radius: 3px;
|
||
|
border-collapse: separate;
|
||
|
background-color: #f7f7f9;
|
||
|
}
|
||
|
|
||
|
table.horizontalAlternative2D3D th {
|
||
|
text-align: center;
|
||
|
}
|
||
|
table.horizontalAlternative2D3D th.Alt2D {
|
||
|
background: #6599e7;
|
||
|
}
|
||
|
table.horizontalAlternative2D3D th.Alt3D {
|
||
|
background: #ed8585;
|
||
|
}
|
||
|
table.horizontalAlternative2D3D td {
|
||
|
padding: 10px;
|
||
|
width: 50%;
|
||
|
vertical-align: top;
|
||
|
}
|
||
|
table.horizontalAlternative2D3D td.Alt2D {
|
||
|
background: #6599e755;
|
||
|
}
|
||
|
table.horizontalAlternative2D3D td.Alt3D {
|
||
|
background: #ed858555;
|
||
|
}
|
||
|
|
||
|
.inspector-field {
|
||
|
margin-left: 20px;
|
||
|
}
|
||
|
|
||
|
.prettyprint {
|
||
|
margin-bottom: 10px;
|
||
|
}
|
||
|
|
||
|
/*# sourceMappingURL=style.css.map */
|
||
|
</style>
|
||
|
<style>@font-face {
|
||
|
font-family: 'Bitter';
|
||
|
font-style: normal;
|
||
|
font-weight: 400;
|
||
|
src: local('Bitter Regular'), local('Bitter-Regular'), url(https://fonts.gstatic.com/s/bitter/v13/rax8HiqOu8IVPmn7f4xs.ttf) format('truetype');
|
||
|
}
|
||
|
</style>
|
||
|
<script type="text/javascript">
|
||
|
var pathToRoot = "";
|
||
|
var packageVersion = "5.1.1";
|
||
|
var packageBranch = "master_Pro";
|
||
|
var documentation_collection_base_url = "https://arongranberg.com/astar/documentation";
|
||
|
var packageIsBeta = false;
|
||
|
</script>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div class="container">
|
||
|
<div class="wrapper">
|
||
|
<nav class="sidebar hidden-print hidden-sm hidden-xs">
|
||
|
<ul class="sidenav-l0">
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/changelog.html'><span class='arrow-none'></span>Changelog</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/beginner.html'><span class='arrow-down'></span>Get Started</a>
|
||
|
<ul class='sidenav-l1'>
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/installation.html'><span class='arrow-none'></span>Installation Guide</a>
|
||
|
</li>
|
||
|
|
||
|
<li class='active'>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/getstarted.html'><span class='arrow-down'></span>Get Started Guide</a>
|
||
|
<ul class='sidenav-l2'>
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/custom_movement_script.html'><span class='arrow-none'></span>Writing a movement script</a>
|
||
|
</li>
|
||
|
|
||
|
</ul>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/getstarted2.html'><span class='arrow-right'></span>Using navmeshes</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/inspector.html'><span class='arrow-none'></span>The A* Inspector</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/graphtypes.html'><span class='arrow-none'></span>Graph Types</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/architecture.html'><span class='arrow-none'></span>Architecture overview</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/migratingfromunity.html'><span class='arrow-none'></span>Migrating from Unity Navigation</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/errormessages.html'><span class='arrow-none'></span>Error messages</a>
|
||
|
</li>
|
||
|
|
||
|
</ul>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/examplescenes.html'><span class='arrow-right'></span>Example Scenes</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/agentmovement.html'><span class='arrow-right'></span>Agent Movement</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/graphgeneration.html'><span class='arrow-right'></span>Graph Generation</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/deploying.html'><span class='arrow-right'></span>Deploying</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/misc.html'><span class='arrow-right'></span>Misc</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/deprecated.html'><span class='arrow-none'></span>Deprecated List</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/groups.html'><span class='arrow-none'></span>Groups</a>
|
||
|
</li>
|
||
|
|
||
|
<li class=''>
|
||
|
<a href='https://arongranberg.com/astar/documentation/stable/classes.html'><span class='arrow-none'></span>Classes</a>
|
||
|
</li>
|
||
|
|
||
|
</ul>
|
||
|
|
||
|
|
||
|
</nav> <div style="flex-grow: 1; min-width: 0;">
|
||
|
<nav class="navbar navbar-default">
|
||
|
<div class="container-fluid">
|
||
|
<div class="navbar-header" id="navbar-header">
|
||
|
<a class="navbar-brand" href="index.html">A* Pathfinding Project</a>
|
||
|
<div class="dropdown package-version">
|
||
|
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||
|
5.1.1
|
||
|
<span class="caret"></span>
|
||
|
</button>
|
||
|
<div class="dropdown-menu" id="package-version-alternatives">
|
||
|
<a href="https://arongranberg.com/astar/documentation/stable/#">5.1.1</a>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="collapse navbar-collapse">
|
||
|
<ul class="nav navbar-nav">
|
||
|
</ul>
|
||
|
<ul class="nav navbar-nav navbar-right">
|
||
|
<li>
|
||
|
<form id="searchform" style="display: none;" class="navbar-form">
|
||
|
<div class="form-group">
|
||
|
<input type="text" autocomplete="off" id="searchfield" class="form-control" placeholder="Search">
|
||
|
</div>
|
||
|
</form>
|
||
|
<ul id="search-dropdown" class="dropdown-menu search-dropdown-align">
|
||
|
<li><a href="https://arongranberg.com/astar/documentation/stable/#">Action</a></li>
|
||
|
<li><a href="https://arongranberg.com/astar/documentation/stable/#">Another action</a></li>
|
||
|
<li><a href="https://arongranberg.com/astar/documentation/stable/#">Something else here</a></li>
|
||
|
<li role="separator" class="divider"></li>
|
||
|
<li><a href="https://arongranberg.com/astar/documentation/stable/#">Separated link</a></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
</div>
|
||
|
</nav> <div class="row">
|
||
|
<main class="col-md-12">
|
||
|
|
||
|
<h1>Get Started Guide</h1><div class='alert alert-danger' role='alert'>This is an excerpt from the full documentation. You can view the full documentation <a href='https://arongranberg.com/astar/documentation/stable'>here</a>. Most links on this page will just take you to the full documentation.</div>
|
||
|
|
||
|
<p>Get Started with the A* Pathfinding Project. </p>
|
||
|
<p>Pathfinding is all about finding the best path between point A and B. This is what the A* Pathfinding Project does, in this tutorial you will learn how to set up the project in a new scene and get a simple AI moving while avoiding obstacles.</p><p>This AI you will write will not be very advanced, it is just the minimal amount of code needed to get moving and following a path. If you want a more advanced AI, you can either extend the script you will write in this tutorial or use (or extend) the AIPath or <a href='https://arongranberg.com/astar/documentation/stable/richai.html'>RichAI </a> scripts included in the package (see part 2 for basic usage of the RichAI component).</p><h2 id='getstarted-installing' >Installation</h2><p>The first thing you need to do, if you haven't done so already, is to download the A* Pathfinding Project.</p><p>Please read the installation guide here: <a href='https://arongranberg.com/astar/documentation/stable/installation.html'>Installation Guide</a>.</p><p>The project can be downloaded from <a href='https://www.arongranberg.com/astar/download' >here</a>. You can either download the free version with some limited features (but still very powerful) or buy the pro version which has more cool stuff included.</p><p>If you want, you can explore the different example scenes in the project before you start with the next section. Depending on how you installed the package, you may need to import these separately in the Unity Package Manager.</p><p></p><div class='simplesect simplesect-see' ><span class='simplesect-title' >See</span><p><a href='https://arongranberg.com/astar/documentation/stable/examplescenes.html'>Example Scenes</a></p></div><p>
|
||
|
</p><h2 id='overview' >Overview</h2><p>There are several different parts of the package. Broadly, they can be grouped into:<ul><li><p>Movement scripts, which tell the agent how to move and where it should move (see <a href='https://arongranberg.com/astar/documentation/stable/movementscripts.html'>Movement scripts</a>).</p>
|
||
|
</li><li><p>Graphs, which describe where an agent can move (see <a href='https://arongranberg.com/astar/documentation/stable/graphtypes.html'>Graph Types</a>).</p>
|
||
|
</li><li><p>Temporary obstacles, which cut holes in the navmesh or update it in other ways (see <a href='https://arongranberg.com/astar/documentation/stable/tilemaps.html#graph-updates'>Graph Updates</a>).</p>
|
||
|
</li><li><p>Off-mesh links, which allow an agent to move or jump between otherwise disconnected parts of the navmesh (see <a href='https://arongranberg.com/astar/documentation/stable/nodelink2.html'>NodeLink2</a>).</p>
|
||
|
</li><li><p>Path modifiers, which post-process paths to for example smooth them (see <a href='https://arongranberg.com/astar/documentation/stable/modifiers2.html'>Using Modifiers</a>).</p>
|
||
|
</li></ul>
|
||
|
</p><p>What you will primarily interact with is the movement script and the <a href='https://arongranberg.com/astar/documentation/stable/seeker.html'>Seeker</a> component. Both need to be attached to an agent that needs to move. The movement script controls how the agent should move, its velocity, rotation, and so on, as well as what the current destination of the agent is and when it should recalculate its path. The <a href='https://arongranberg.com/astar/documentation/stable/seeker.html'>Seeker</a> component is controlled by the movement script. The movement script tells it to calculate a path, and the Seeker will chug along and later (possibly in a later frame) return the result to the movement script.</p><p>The <a href='https://arongranberg.com/astar/documentation/stable/astarpath.html'>AstarPath</a> component holds all the graph data in a scene. It follows the <a href='https://en.wikipedia.org/wiki/Singleton_pattern' >singleton pattern</a>, so there should only be one such component in a scene. It may contain one or many graphs, of the same or different types. Each graph, in turn, contains and manages all its nodes (of which there may be many, sometimes up to millions).</p><p>There are a number of included movement scripts in the package (e.g <a href='https://arongranberg.com/astar/documentation/stable/aipath.html'>AIPath</a>, <a href='https://arongranberg.com/astar/documentation/stable/richai.html'>RichAI</a>, <a href='https://arongranberg.com/astar/documentation/stable/ailerp.html'>AILerp</a>, <a href='https://arongranberg.com/astar/documentation/stable/followerentity.html'>FollowerEntity</a>). You may use one of the included ones, or you can write your own (see <a href='https://arongranberg.com/astar/documentation/stable/custom_movement_script.html'>Writing a movement script</a>). You can find a comparison of the built-in movement scripts here: <a href='https://arongranberg.com/astar/documentation/stable/movementscripts.html'>Movement scripts</a>.</p><h2 id='video' >Video Tutorial</h2><p>If you prefer a video tutorial instead of a text tutorial. Here is a video for you. The video tutorial takes a more high-level approach, and you will learn how to use the built-in movement scripts instead of writing a custom one. Since the video and text tutorials cover slightly different ground, it is not a bad idea to take a look at both.</p><p> <iframe class="youtube-video" width="690" height="400" src="https://www.youtube.com/embed/5QT5Czfe0YE" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p><p>You can also take a look at the excellent tutorial by Gabriel Williams (Unity Cookie) in part 8 of the series on making a Tower Defence game: <a href='https://www.youtube.com/watch?feature=player_embedded&v=PUJSvd53v4k' >https://www.youtube.com/watch?feature=player_embedded&v=PUJSvd53v4k</a> The video covers most things which will be discussed in the text tutorial.</p><h2 id='newscene' >New Scene</h2><p>Create a new scene, name it "PathfindingTest". Now let's create something which an AI could walk on and something for it to avoid: add a plane to the scene, place it in the scene origin (0,0,0) and scale it to 10,10,10.</p><p>Create a new layer (Edit → Project Settings → Tags) named "Ground" and place the plane in that layer. Now create some cubes of different scales and place them on the plane, these will be obstacles which the AI should avoid. Place them in a new layer named "Obstacles".</p><p>Your scene should now look something like this: <img class="tinyshadow" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxsAAAGPCAIAAAC71FriAAAWa2lDQ1BJQ0MgUHJvZmlsZQAAeAHVWFdUFE23re6JMGSGnHPOOeecc5Sc40gQAZUgogQFEREBQUDJiqIEURAQREVJIiigEkREQRFFQEBuo8vv/x7u/3Zfbq3VPXtO1Zyu6XOqap8NAHOhN4kUBtMAEB4RE2VrpMvt7OLKjZsCaEAGyAEMeL19o0k61tbm4L+2H+MA2u98LrHv678O+987aP38o30BgKyRbh+/aN9wBN9G8KovKSoGAPgKgofjYkgIRiEXIEYhE0TwqX0c+AeX7GOfP/jG7zH2tnrImF4A8BTe3lGBABCGETv3Id9AxAdhFQAsXYRfcAQAdGgEa/oGefsBwKyPjBEPD4/cxyQEC/v8y0/gv7C3t88/Pr29A//Bf/4L8kvkwfrB0aQw7/jfX/4vb+Fhscj7+t3okDtFRJjlfmzwyPXBz1vf7C8mhf2O2W+7f4SD3V97hI+l1V8cEGVo+xeT
|
||
|
After you have added the grid graph, click its label to bring up the graph settings.</p><p>At the bottom of the inspector, you will find a button called "Scan". This is used to calculate the graph based on its settings and the world. After you change any settings, you will have to scan the graph to see the changes. There is a handy <a href='https://arongranberg.com/astar/documentation/stable/shortcuts.html'>shortcut</a> for this: Cmd+Alt+S (mac) or Ctrl+Alt+S (windows).</p><p>All graphs are scanned by default when the game starts (unless the startup is cached, more about that in <a href='https://arongranberg.com/astar/documentation/stable/saveloadgraphs.html'>another part</a>).</p><p> <img class="tinyshadow" src="data:image/png;base64,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
|
||
|
</td><td thead='no' ><p> <img class="tinyshadow" src="data:image/png;base64,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
|
||
|
</td></tr></table>
|
||
|
</p><h2 id='addingai' >Adding the AI</h2><p>What is a pathfinding test without some moving stuff? Not fun at all, so let's add an AI to play around with.</p><p>Create a capsule and add the Character Controller component to it, also place it somewhere visible on the plane.</p><p>Add the Seeker component to the AI, this script is a helper script for calling requesting paths from other scripts, it can also handle path modifiers which can e.g. smooth the path or simplify it using raycasts.</p><p>There are two alternatives now. You can either write your own movement script or you can use one of the built-in movement scripts. The included scripts are much more advanced than what you write in the tutorial linked below, so for most cases I recommend using them. However, I still recommend following the tutorial for writing a custom movement script even if you end up using one of the built-in ones in your game because it makes it easier to understand how the system works under the hood.</p><p>Check out this subpage for the tutorial: <a href='https://arongranberg.com/astar/documentation/stable/custom_movement_script.html'>Writing a movement script</a></p><p>The included scripts are called <a href='https://arongranberg.com/astar/documentation/stable/aipath.html'>AIPath</a>, <a href='https://arongranberg.com/astar/documentation/stable/richai.html'>RichAI</a> and <a href='https://arongranberg.com/astar/documentation/stable/ailerp.html'>AILerp</a>. The AIPath and AILerp scripts can be used on any graph, while RichAI is primarily for navmesh based graphs. While the AIPath and RichAI scripts follow the path loosely, the AILerp script uses interpolation to move along the path very precisely, but perhaps not in the most realistic way. Which one you use depends on your game.</p><p></p><div class='simplesect simplesect-see' ><span class='simplesect-title' >See</span><p>For more information about the included movement scripts, take a look at <a href='https://arongranberg.com/astar/documentation/stable/movementscripts.html'>Movement scripts</a>. You can also see how they are used in the included example scenes.</p></div><p>
|
||
|
For this tutorial, you can attach the <a href='https://arongranberg.com/astar/documentation/stable/aipath.html'>AIPath</a> component to the AI. Also create a new GameObject named "Target" and position it where you want the AI to move. Then attach the <a href='https://arongranberg.com/astar/documentation/stable/aidestinationsetter.html'>AIDestinationSetter</a> component to the AI. This component is just a very simple helper script which will tell the AIPath script to move to a particular location. You will likely replace this script with your own game-specific script in the future. The AIDestinationSetter component has a single field called "target", assign the "Target" GameObject that you created earlier to this field.</p><p>If you press play now, the AI should move to the target. How the movement scripts work and how to configure them is explained in more detail in the video tutorial linked above. Take a look at that if something doesn't seem to work.</p><h2 id='smoothing' >Smoothing</h2><p>Now you have learned how to set up a simple grid graph and how to calculate paths Pathfinding, but surely there must be a way to get those paths to look a bit smoother?<br>
|
||
|
Sure it is. Path smoothing and simplification scripts are called Path Modifiers and are scripts which can be added to the same GameObject as the Seeker.</p><p>The most straight forward one is the Simple Smooth modifier, which can be found at Menu bar → Components → Pathfinding → Modifiers → Simple Smooth. Add that to our AI.</p><p>What this modifier is going to do, is to subdivide the path a number of times until each segment becomes smaller than the Max Segment Length variable. Then it will smooth the path by moving the points closer to each other. The modifier has a number of settings, I won't go through all of them here. See the <a href='https://arongranberg.com/astar/documentation/stable/simplesmoothmodifier.html'>SimpleSmoothModifier</a> documentation for more info about each variable. For this tutorial you can set Max Segment Length to, say 1. Iterations to 5 and Strength to 0.25. Experiment with it to get good values.</p><p>Now press play again, the path should look much smoother, just as we wanted.</p><p></p><div class='simplesect simplesect-warning' ><span class='simplesect-title' >Warning</span><p>Smoothers don't usually take world geometry or the graph into account, so be careful with applying too much smoothing since that could cause paths to pass through unwalkable areas.</p></div><p>
|
||
|
<img class="tinyshadow" src="data:image/png;base64,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
|
||
|
|
||
|
</main>
|
||
|
</div>
|
||
|
<div class="row">
|
||
|
<div class="col-md-12" style="height: 30px">
|
||
|
</div>
|
||
|
</div> </div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<script>/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
|
||
|
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof
|
||
|
</script>
|
||
|
<script>/*!
|
||
|
* Bootstrap v3.3.5 (http://getbootstrap.com)
|
||
|
* Copyright 2011-2015 Twitter, Inc.
|
||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
|
* Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=ca1d29b8c16a782c676c)
|
||
|
* Config saved to config.json and https://gist.github.com/ca1d29b8c16a782c676c
|
||
|
*/
|
||
|
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new o(this)),"string"==typeof e&&n[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.5",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t(s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof e&&e;n||o.data("bs.button",n=new i(this,s)),"toggle"==e?n.toggle():e&&n.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.5",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,n=o.is("input")?"val":"html",s=o.data();e+="Text",null==s.resetText&&o.data("resetText",o[n]()),setTimeout(t.proxy(function(){o[n](null==s[e]?this.options[e]:s[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target);o.hasClass("btn")||(o=o.closest(".btn")),e.call(o,"toggle"),t(i.target).is('input[type="radio"]')||t(i.target).is('input[type="checkbox"]')||i.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new i(this,s)),"number"==typeof e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.5",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.
|
||
|
}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION):n.call(this)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var n=t(o);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var n=t(this);n.attr("data-target")||o.preventDefault();var s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),+function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.5",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(void 0===n[t+1]||e<n[t+1])&&this.activate(s[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',o=t(i).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var o=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=o,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);i.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition
|
||
|
<script>var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
|
||
|
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
|
||
|
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
|
||
|
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
|
||
|
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
|
||
|
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
|
||
|
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
|
||
|
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
|
||
|
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
|
||
|
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
|
||
|
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
|
||
|
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
|
||
|
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
|
||
|
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
|
||
|
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
|
||
|
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
|
||
|
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
|
||
|
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
|
||
|
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
|
||
|
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
|
||
|
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
|
||
|
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
|
||
|
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
|
||
|
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
|
||
|
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
|
||
|
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
|
||
|
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
|
||
|
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();</script>
|
||
|
<script>events.js:377
|
||
|
throw er; // Unhandled 'error' event
|
||
|
^
|
||
|
|
||
|
Error: ENOENT: no such file or directory, open '/home/arong/Unity/PackageBuild/docs/html_standalone/https:/cdn.jsdelivr.net/fuse/2.5.0/fuse.min.js'
|
||
|
Emitted 'error' event on ReadStream instance at:
|
||
|
at internal/fs/streams.js:126:14
|
||
|
at FSReqCallback.oncomplete (fs.js:179:23) {
|
||
|
errno: -2,
|
||
|
code: 'ENOENT',
|
||
|
syscall: 'open',
|
||
|
path: '/home/arong/Unity/PackageBuild/docs/html_standalone/https:/cdn.jsdelivr.net/fuse/2.5.0/fuse.min.js'
|
||
|
}
|