mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-06-26 11:24:46 +00:00
56 lines
1.7 KiB
C#
56 lines
1.7 KiB
C#
using UnityEngine;
|
|
|
|
namespace Pathfinding.RVO {
|
|
/// <summary>Square Obstacle for RVO Simulation.</summary>
|
|
[AddComponentMenu("Pathfinding/Local Avoidance/Square Obstacle")]
|
|
[HelpURL("https://arongranberg.com/astar/documentation/stable/class_pathfinding_1_1_r_v_o_1_1_r_v_o_square_obstacle.php")]
|
|
public class RVOSquareObstacle : RVOObstacle {
|
|
/// <summary>Height of the obstacle</summary>
|
|
public float height = 1;
|
|
|
|
/// <summary>Size of the square</summary>
|
|
public Vector2 size = Vector3.one;
|
|
|
|
/// <summary>Center of the square</summary>
|
|
public Vector2 center = Vector3.zero;
|
|
|
|
protected override bool StaticObstacle { get { return false; } }
|
|
protected override bool ExecuteInEditor { get { return true; } }
|
|
protected override bool LocalCoordinates { get { return true; } }
|
|
protected override float Height { get { return height; } }
|
|
|
|
//If UNITY_EDITOR to save a few bytes, these are only needed in the editor
|
|
#if UNITY_EDITOR
|
|
private Vector2 _size;
|
|
private Vector2 _center;
|
|
private float _height;
|
|
#endif
|
|
|
|
protected override bool AreGizmosDirty () {
|
|
#if UNITY_EDITOR
|
|
bool ret = _size != size || _height != height || _center != center;
|
|
_size = size;
|
|
_center = center;
|
|
_height = height;
|
|
return ret;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
protected override void CreateObstacles () {
|
|
size.x = Mathf.Abs(size.x);
|
|
size.y = Mathf.Abs(size.y);
|
|
height = Mathf.Abs(height);
|
|
|
|
var verts = new [] { new Vector3(1, 0, -1), new Vector3(1, 0, 1), new Vector3(-1, 0, 1), new Vector3(-1, 0, -1) };
|
|
for (int i = 0; i < verts.Length; i++) {
|
|
verts[i].Scale(new Vector3(size.x * 0.5f, 0, size.y * 0.5f));
|
|
verts[i] += new Vector3(center.x, 0, center.y);
|
|
}
|
|
|
|
AddObstacle(verts, height);
|
|
}
|
|
}
|
|
}
|