static public Vector3 Separate(SBAgent agent, List <GameObject> agentToAvoid, float range) { Vector3 steer = Vector3.zero; for (int i = 0; i < agentToAvoid.Count; i++) { steer += Flee(agent, agentToAvoid[i].transform, range); } return(steer); }
static public Vector3 Seek(SBAgent agent, Transform target) { // cálculo del vector deseado Vector3 desired = (target.position - agent.transform.position).normalized * agent.maxSpeed; // cálculo de los demás vectores Vector3 steer = Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer); return(steer); }
static public Vector3 Separate(SBAgent agent, GameObject[] agentsToAvoid, float range) { Vector3 steer = Vector3.zero; for (int i = 0; i < agentsToAvoid.Length; i++) { steer += Flee(agent, agentsToAvoid[i].transform, range); } return(steer); }
public static Vector3 Arrive(SBAgent agent, Transform target, float range) { Vector3 desired; Vector3 difference = (target.position - agent.transform.position); float distance = difference.magnitude; desired = difference.normalized * agent.maxSpeed * ((distance > range)?1:(distance / range)); //Cálculo de vectores Vector3 steer = Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer); return(steer); }
static public Vector3 Rectangle(SBAgent agent, Transform target, Transform center, float sizeX, float sizeY) { Vector3 desired = Vector3.zero; Vector3 steer; if (agent.transform.position.x > center.position.x + sizeX || agent.transform.position.x < center.position.x - sizeX || agent.transform.position.y < center.position.x - sizeY || agent.transform.position.y > center.position.y + sizeY) { steer = Seek(agent, center); } else { steer = Seek(agent, target); } return(steer); }
static public Vector3 Rectangulo(SBAgent agente, Transform target, Transform center, float X, float Y) { Vector3 desired = Vector3.zero; Vector3 steer; if (agente.transform.position.x > center.position.x + X || agente.transform.position.x < center.position.x - X || agente.transform.position.y < center.position.y - Y || agente.transform.position.y > center.position.y + Y) { steer = Seek(agente, center); } else { steer = Seek(agente, target); } return(steer); }
static public Vector3 Arrive(SBAgent agent, Transform target, float range) { Vector3 desired; Vector3 difference = (target.position - agent.transform.position); float distance = difference.magnitude; desired = difference.normalized * agent.maxSpeed; if (distance < range) { desired *= distance / range; } Vector3 steer = Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer); return(steer); }
static public Vector3 InsideRectangle(SBAgent agent, Vector3 center, float w, float h) { Vector3 desired; if (agent.transform.position.y > center.y + h / 2) { desired = (center - agent.transform.position).normalized * agent.maxSpeed; } else { desired = Vector3.zero; } Vector3 steer = Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer); return(steer); }
public static Vector3 Flee(SBAgent agent, Transform target, float range = 99999) { Vector3 desired = Vector3.zero; Vector3 difference = -(target.position - agent.transform.position); float distance = difference.magnitude; desired = difference.normalized * agent.maxSpeed; if (distance < range) { return(Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer)); } else { return(Vector3.zero); } }
static public Vector3 InsideCircle(SBAgent agent, Transform target, Transform center, float range) { Vector3 desired = Vector3.zero; float distance = Vector3.Distance(agent.transform.position, center.position); Vector3 steer; if (distance > range) { steer = Seek(agent, center); } else { steer = Seek(agent, target); } return(steer); }
public static Vector3 InsideCircle(SBAgent agent, Vector3 center, float radius, Transform target) { Vector3 steer = Vector3.zero; float offset = (agent.transform.position - center).magnitude; if (offset > radius) { Vector3 desired = Vector3.zero; Vector3 difference = (center - agent.transform.position); float distance = difference.magnitude; desired = difference.normalized * agent.maxSpeed; steer = 2 * Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer); } return(steer); }
public static Vector3 InsideRectangle(SBAgent agent, Vector3 center, float limitX, float limitY, Transform target) { Vector3 steer = Vector3.zero; Vector2 limits_x = new Vector2(center.x - limitX / 2, center.x + limitX / 2); Vector2 limits_y = new Vector2(center.y + limitY / 2, center.y - limitY / 2); if (agent.transform.position.x < limits_x.x || agent.transform.position.x > limits_x.y || agent.transform.position.y > limits_y.x || agent.transform.position.y < limits_y.y) { Vector3 desired = Vector3.zero; Vector3 difference = (center - agent.transform.position); float distance = difference.magnitude; desired = difference.normalized * agent.maxSpeed; steer = 2 * Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer); } return(steer); }
static public Vector3 InsideRectangle(SBAgent agent, Transform target, Transform center, float vertX, float vertY) { Vector3 desired = Vector3.zero; Vector3 steer; if (agent.transform.position.x > center.position.x + vertX || agent.transform.position.x < center.position.x - vertX || agent.transform.position.y < center.position.y - vertY || agent.transform.position.y > center.position.y + vertY) { steer = Seek(agent, center); } else { steer = Seek(agent, target); } return(steer); }
public static Vector3 Seek(SBAgent agent, Transform target, float range = 99999) { //Cálculo del vector deseado Vector3 desired = Vector3.zero; Vector3 difference = (target.position - agent.transform.position); float distance = difference.magnitude; desired = difference.normalized * agent.maxSpeed; //if(distance < range) //{ return(Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer)); //} //else //{ // return Vector3.zero; //} }
static public Vector3 inside(SBAgent agent, Transform target, float range = 99999) { // cálculo del vector deseado Vector3 desired; Vector3 difference = -(target.position - agent.transform.position); float distance = difference.magnitude; desired = difference.normalized * agent.maxSpeed; if (distance < range) { desired *= distance / range; return(Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer)); } else { return(Vector3.zero); } }
static public Vector3 Seek(SBAgent agent, Transform target, float range = 9999) { // cálculo del vector deseado Vector3 desired = Vector3.zero; Vector3 difference = (target.position - agent.transform.position); float distance = difference.magnitude; desired = difference.normalized * agent.maxSpeed; Vector3 steer; if (distance < range) { steer = Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer); } else { steer = Vector3.zero; } return(steer); }
static public Vector3 InsideRectangle(SBAgent agent, Vector3 target, Vector3 centro, float width, float height) { Vector3 desired; Vector3 steer; Vector3 deseadoInsideRectangle; Vector3 deseadoSeek = (target - agent.transform.position).normalized * agent.maxSpeed; if (agent.transform.position.y >= centro.y + height / 4 || agent.transform.position.y <= centro.y - height / 4 || agent.transform.position.x >= centro.x + width / 4 || agent.transform.position.x <= centro.x - width / 4) { deseadoInsideRectangle = (centro - agent.transform.position).normalized * agent.maxSpeed; } else { deseadoInsideRectangle = Vector3.zero; } desired = deseadoSeek + deseadoInsideRectangle; steer = Vector3.ClampMagnitude(desired - agent.velocity, agent.maxSteer); return(steer); }