From 8722a9920c1f6119bf6e769cba270e63097f8e25 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Thu, 23 May 2024 10:08:29 +0800 Subject: + astar project --- .../Scenes/LocalAvoidance/RVOAgentPlacer.cs | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/LocalAvoidance/RVOAgentPlacer.cs (limited to 'Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/LocalAvoidance/RVOAgentPlacer.cs') diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/LocalAvoidance/RVOAgentPlacer.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/LocalAvoidance/RVOAgentPlacer.cs new file mode 100644 index 0000000..03dbedd --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/LocalAvoidance/RVOAgentPlacer.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using System.Collections; + +namespace Pathfinding.Examples { + /// + /// Places ROV agents in circles. + /// Used in a example scene + /// + [HelpURL("https://arongranberg.com/astar/documentation/stable/rvoagentplacer.html")] + public class RVOAgentPlacer : MonoBehaviour { + public int agents = 100; + + public float ringSize = 100; + public LayerMask mask; + + public GameObject prefab; + + public Vector3 goalOffset; + + public float repathRate = 1; + + // Use this for initialization + IEnumerator Start () { + yield return null; + + for (int i = 0; i < agents; i++) { + float angle = ((float)i / agents)*(float)System.Math.PI*2; + + Vector3 pos = new Vector3((float)System.Math.Cos(angle), 0, (float)System.Math.Sin(angle))*ringSize; + Vector3 antipodal = -pos + goalOffset; + + GameObject go = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.Euler(0, angle+180, 0)) as GameObject; + RVOExampleAgent ag = go.GetComponent(); + + if (ag == null) { + Debug.LogError("Prefab does not have an RVOExampleAgent component attached"); + yield break; + } + + //ag.radius = radius; + go.transform.parent = transform; + go.transform.position = pos; + + ag.repathRate = repathRate; + ag.SetTarget(antipodal); + + ag.SetColor(GetColor(angle)); + } + } + + const float rad2Deg = 360.0f/ ((float)System.Math.PI*2); + + public Color GetColor (float angle) { + return AstarMath.HSVToRGB(angle * rad2Deg, 0.8f, 0.6f); + } + } +} -- cgit v1.1-26-g67d0