public virtual void Init () { m_Steering = new AiSteering(); m_Character = this.gameObject; m_Agent = gameObject.GetComponent<AiAgent>(); if (m_Agent == null) Debug.LogError("No AiAgent component found"); }
// Update is called once per frame public override void Update () { //m_Character = m_Agent.gameObject; m_TargetRadius = Mathf.Clamp(m_TargetRadius, 0.1f, Mathf.Infinity); m_SlowRadius = Mathf.Clamp(m_SlowRadius, 0.1f, Mathf.Infinity); m_TimeToTarget = Mathf.Clamp(m_TimeToTarget, 0.0f, Mathf.Infinity); m_MaxSpeed = m_Agent.m_MaxSpeed; if (m_Agent != null && m_Character != null && m_Target != null) { AiSteering steering = new AiSteering(); Vector3 direction = m_Target.transform.position - m_Character.transform.position; float distance = direction.sqrMagnitude; // Changed this validation in order to fulfill goal if (distance >= m_TargetRadius * m_TargetRadius) { float targetSpeed = 0.0f; if (distance >= m_SlowRadius * m_SlowRadius) { targetSpeed = m_MaxSpeed; } else { targetSpeed = m_MaxSpeed * distance / (m_SlowRadius * m_SlowRadius); } Vector3 targetVelocity = direction.normalized * targetSpeed; steering.Linear = targetVelocity - m_Agent.Velocity; steering.Linear = steering.Linear / m_TimeToTarget; if (steering.Linear.sqrMagnitude > m_MaxAccel * m_MaxAccel) steering.Linear = steering.Linear.normalized * m_MaxAccel; } m_Agent.SetSteering(steering); if (m_DrawLines) { DrawCircle(m_Target.transform.position, m_TargetRadiusColor, m_TargetRadius); DrawCircle(m_Target.transform.position, m_SlowRadiusColor, m_SlowRadius); } } }
/// <summary> /// Starts this instance. Initialization. /// </summary> void Start () { //Debug.Log("Start AiAgent"); m_Velocity = Vector3.zero; m_Orientation = 0.0f; m_Rotation = 0.0f; m_Steering = new AiSteering(); gameObject.transform.Rotate(Vector3.up, m_Orientation, Space.Self); }
/// <summary> /// Starts this instance. Initialization. /// </summary> void Start() { //Debug.Log("Start AiAgent"); m_Velocity = Vector3.zero; m_Orientation = 0.0f; m_Rotation = 0.0f; m_Steering = new AiSteering(); gameObject.transform.Rotate(Vector3.up, m_Orientation, Space.Self); }
public virtual void Init() { m_Steering = new AiSteering(); m_Character = this.gameObject; m_Agent = gameObject.GetComponent <AiAgent>(); if (m_Agent == null) { Debug.LogError("No AiAgent component found"); } }
/// <summary> /// Update this instance. /// </summary> public virtual void Update () { //Debug.Log("Update AiAgent"); m_Steering = new AiSteering(); Vector3 translation = m_Velocity * Time.deltaTime; m_Orientation += m_Rotation * Time.deltaTime; m_Orientation = m_Orientation < 0.0f ? 360.0f + m_Orientation : m_Orientation; m_Orientation = m_Orientation > 360.0f ? m_Orientation - 360.0f : m_Orientation; transform.rotation = new Quaternion(); transform.Rotate(Vector3.up, m_Orientation, Space.Self); transform.Translate(translation, Space.World); }
public override AiSteering GetSteering () { m_Steering = new AiSteering(); if (m_Agent != null) { m_Steering.Linear = m_Agent.m_MaxSpeed * GetOriAsVec(m_Agent.Orientation); m_Steering.Angular = m_MaxRotation * Random.Range(-1.0f, 1.0f); m_Agent.Orientation = GetNewOrientation(m_Agent.Orientation, m_Steering.Linear); if (m_DrawLines) { Debug.DrawRay(transform.position, GetOriAsVec(m_Agent.Orientation) * 1.5f, m_ColorVelocity); } } return m_Steering; }
public override AiSteering GetSteering () { if (m_Agent != null && m_Target != null) { AiSteering steering = new AiSteering(); steering.Linear = m_Character.transform.position - m_Target.transform.position; steering.Linear = steering.Linear.normalized * m_MaxAccel; m_Agent.SetSteering(steering); if (m_DrawLines) { Debug.DrawRay(m_Character.transform.position, m_Agent.Velocity, m_LineColor); } } return base.GetSteering (); }
/// <summary> /// Update this instance. /// </summary> public virtual void Update() { //Debug.Log("Update AiAgent"); m_Steering = new AiSteering(); Vector3 translation = m_Velocity * Time.deltaTime; m_Orientation += m_Rotation * Time.deltaTime; m_Orientation = m_Orientation < 0.0f ? 360.0f + m_Orientation : m_Orientation; m_Orientation = m_Orientation > 360.0f ? m_Orientation - 360.0f : m_Orientation; transform.rotation = new Quaternion(); transform.Rotate(Vector3.up, m_Orientation, Space.Self); transform.Translate(translation, Space.World); }
/// <summary> /// Updates the steering. /// </summary> /// <param name="steering">Steering.</param> /// <param name="isAdditive">If set to <c>true</c> is additive.</param> public void SetSteering(AiSteering steering, float weight = 1.0f) { //Debug.Log("SetSteering AiAgent"); if (!m_Blend && !m_Blended) { m_Steering = steering; m_Blended = true; } else { m_Steering.Linear += (weight * steering.Linear); m_Steering.Angular += (weight * steering.Angular); } }
public override AiSteering GetSteering() { if (m_Agent != null && m_Target != null) { AiSteering steering = new AiSteering(); steering.Linear = m_Character.transform.position - m_Target.transform.position; steering.Linear = steering.Linear.normalized * m_MaxAccel; m_Agent.SetSteering(steering); if (m_DrawLines) { Debug.DrawRay(m_Character.transform.position, m_Agent.Velocity, m_LineColor); } } return(base.GetSteering()); }
public override AiSteering GetSteering() { m_Steering = new AiSteering(); if (m_Agent != null) { m_Steering.Linear = m_Agent.m_MaxSpeed * GetOriAsVec(m_Agent.Orientation); m_Steering.Angular = m_MaxRotation * Random.Range(-1.0f, 1.0f); m_Agent.Orientation = GetNewOrientation(m_Agent.Orientation, m_Steering.Linear); if (m_DrawLines) { Debug.DrawRay(transform.position, GetOriAsVec(m_Agent.Orientation) * 1.5f, m_ColorVelocity); } } return(m_Steering); }
public override AiSteering GetSteering () { m_Steering = new AiSteering(); if (m_Agent != null) { Vector3 position = gameObject.transform.position; Vector3 rayVector = m_Agent.Velocity.normalized * m_LookAhead; rayVector += position; Vector3 direction = rayVector - position; RaycastHit hit; if (m_DrawLines) { Debug.DrawRay(gameObject.transform.position, direction, Color.red); } if (Physics.Raycast(position, direction, out hit, m_LookAhead)) { position = hit.point + hit.normal * m_AvoidDistance; m_Target.transform.position = position; m_Steering = base.GetSteering(); } } return m_Steering; }
public override AiSteering GetSteering () { m_Steering = new AiSteering(); if (m_Agent != null && m_Targets.Length > 0) { for (int i = 0; i < m_Targets.Length; i++) { if (m_Targets[i] == this.gameObject) { continue; } Vector3 direction = gameObject.transform.position - m_Targets[i].transform.position; float distance = direction.sqrMagnitude; float strenght = 0.0f; if (distance < (m_Threshold * m_Threshold)) { strenght = Mathf.Min(m_DecayCoefficient / distance, m_MaxAccel); m_Steering.Linear += strenght * direction.normalized; } } } return m_Steering; }
/// <summary> /// Update this instance. /// </summary> public override void Update () { m_Steering = new AiSteering(); // Movement m_Velocity.x = Input.GetAxis("Horizontal"); m_Velocity.z = Input.GetAxis("Vertical"); m_Velocity = Quaternion.AngleAxis(45, Vector3.up) * m_Velocity; m_Velocity *= m_MaxSpeed; // Crosshair if (m_Crosshair != null) { m_Crosshair.transform.position = GetScreenToWorldPos(Input.mousePosition); gameObject.transform.LookAt(m_Crosshair.transform.position); } else { gameObject.transform.LookAt(m_Velocity + transform.position); } Vector3 translation = m_Velocity * Time.deltaTime; transform.Translate(translation, Space.World); m_Orientation = transform.rotation.eulerAngles.y; }
// Update is called once per frame public override void Update() { //m_Character = m_Agent.gameObject; m_TargetRadius = Mathf.Clamp(m_TargetRadius, 0.1f, Mathf.Infinity); m_SlowRadius = Mathf.Clamp(m_SlowRadius, 0.1f, Mathf.Infinity); m_TimeToTarget = Mathf.Clamp(m_TimeToTarget, 0.0f, Mathf.Infinity); m_MaxSpeed = m_Agent.m_MaxSpeed; if (m_Agent != null && m_Character != null && m_Target != null) { AiSteering steering = new AiSteering(); Vector3 direction = m_Target.transform.position - m_Character.transform.position; float distance = direction.sqrMagnitude; // Changed this validation in order to fulfill goal if (distance >= m_TargetRadius * m_TargetRadius) { float targetSpeed = 0.0f; if (distance >= m_SlowRadius * m_SlowRadius) { targetSpeed = m_MaxSpeed; } else { targetSpeed = m_MaxSpeed * distance / (m_SlowRadius * m_SlowRadius); } Vector3 targetVelocity = direction.normalized * targetSpeed; steering.Linear = targetVelocity - m_Agent.Velocity; steering.Linear = steering.Linear / m_TimeToTarget; if (steering.Linear.sqrMagnitude > m_MaxAccel * m_MaxAccel) { steering.Linear = steering.Linear.normalized * m_MaxAccel; } } m_Agent.SetSteering(steering); if (m_DrawLines) { DrawCircle(m_Target.transform.position, m_TargetRadiusColor, m_TargetRadius); DrawCircle(m_Target.transform.position, m_SlowRadiusColor, m_SlowRadius); } } }
public override AiSteering GetSteering() { m_Steering = new AiSteering(); if (m_Agent != null) { Vector3 position = gameObject.transform.position; Vector3 rayVector = m_Agent.Velocity.normalized * m_LookAhead; rayVector += position; Vector3 direction = rayVector - position; RaycastHit hit; if (m_DrawLines) { Debug.DrawRay(gameObject.transform.position, direction, Color.red); } if (Physics.Raycast(position, direction, out hit, m_LookAhead)) { position = hit.point + hit.normal * m_AvoidDistance; m_Target.transform.position = position; m_Steering = base.GetSteering(); } } return(m_Steering); }
public override AiSteering GetSteering() { m_Steering = new AiSteering(); if (m_Agent != null && m_Targets.Length > 0) { for (int i = 0; i < m_Targets.Length; i++) { if (m_Targets[i] == this.gameObject) { continue; } Vector3 direction = gameObject.transform.position - m_Targets[i].transform.position; float distance = direction.sqrMagnitude; float strenght = 0.0f; if (distance < (m_Threshold * m_Threshold)) { strenght = Mathf.Min(m_DecayCoefficient / distance, m_MaxAccel); m_Steering.Linear += strenght * direction.normalized; } } } return(m_Steering); }
/// <summary> /// Update this instance. /// </summary> public override void Update() { m_Steering = new AiSteering(); // Movement m_Velocity.x = Input.GetAxis("Horizontal"); m_Velocity.z = Input.GetAxis("Vertical"); m_Velocity = Quaternion.AngleAxis(45, Vector3.up) * m_Velocity; m_Velocity *= m_MaxSpeed; // Crosshair if (m_Crosshair != null) { m_Crosshair.transform.position = GetScreenToWorldPos(Input.mousePosition); gameObject.transform.LookAt(m_Crosshair.transform.position); } else { gameObject.transform.LookAt(m_Velocity + transform.position); } Vector3 translation = m_Velocity * Time.deltaTime; transform.Translate(translation, Space.World); m_Orientation = transform.rotation.eulerAngles.y; }
/// <summary> /// Updates the steering. /// </summary> /// <param name="steering">Steering.</param> /// <param name="isAdditive">If set to <c>true</c> is additive.</param> public void SetSteering (AiSteering steering, float weight = 1.0f) { //Debug.Log("SetSteering AiAgent"); if (!m_Blend && !m_Blended) { m_Steering = steering; m_Blended = true; } else { m_Steering.Linear += (weight * steering.Linear); m_Steering.Angular += (weight * steering.Angular); } }