Пример #1
0
 public static Vector3 AntiPenetrate(Vehicle3D me, Vehicle3D[] neighbors, int nNeighbors, float radius)
 {
     var v = Vector3.zero;
     if (neighbors.FindInRadius(me.position, radius, nNeighbors).Count() > 0) {
         v = Random.insideUnitCircle * me.maxSpeed;
     }
     return v;
 }
Пример #2
0
 public static Vector3 Cohere(Vehicle3D me, Vehicle3D[] neighbors, int nNeighbors, float radius, float minRadius)
 {
     var v = Vector3.zero;
     var count = 0;
     var sqrMinRadius = minRadius * minRadius;
     foreach (var f in neighbors.FindInRadius(me.position, radius, nNeighbors)) {
         var distvec = f.position - me.position;
         if (distvec.sqrMagnitude < sqrMinRadius)
             continue;
         v += f.position;
         count++;
     }
     if (count > 0) {
         v = v / count - me.position;
     }
     return v;
 }
Пример #3
0
 public static Vector3 Separate(Vehicle3D me, Vehicle3D[] neighbors, int nNeighbors, float radius)
 {
     var v = Vector3.zero;
     foreach (var f in neighbors.FindInRadius(me.position, radius, nNeighbors)) {
         var distvec = f.position - me.position;
         v -= distvec;
     }
     return v;
 }