void FindPositionToShoot() { bool canGo = false; canShoot = false; Vector3 newPosition = new Vector3(transform.position.x + UnityEngine.Random.Range(-20, 20), transform.position.y + UnityEngine.Random.Range(-20, 20)); while (!canGo) { if (boxColliderTrigger.GetComponent <Collider2D>().bounds.Contains(newPosition) && Vector3.Distance(player.transform.position, newPosition) > 10f) { //canGo = CheckShot(newPosition); canGo = true; } else { newPosition = new Vector3(transform.position.x + UnityEngine.Random.Range(-20, 20), transform.position.y + UnityEngine.Random.Range(-20, 20)); } } GetComponent <PolyNavAgent>().SetDestination(newPosition); anim.SetBool("Walking", true); }
void ChangePositionUntilItCanRun() { Queue <Vector3> queue = new Queue <Vector3>(); HashSet <Vector3> path = new HashSet <Vector3>(); Vector3 positionToWalkTo = new Vector3(0, 0, 0); Vector3 checkDirection = new Vector3(0, 0, 0); int layerMask = 1 << 8; layerMask = ~layerMask; queue.Enqueue(transform.position); while (queue.Count > 0) { Vector3 positionDequeued = queue.Dequeue(); checkDirection = player.transform.position - positionDequeued; RaycastHit2D hit = Physics2D.Raycast(positionDequeued, checkDirection, Mathf.Infinity, layerMask); if (hit.collider.tag.Equals("Player")) { positionToWalkTo = positionDequeued; GetComponent <PolyNavAgent>().SetDestination(positionToWalkTo); Debug.DrawLine(transform.position, positionToWalkTo, Color.red, 20); Debug.DrawLine(positionDequeued, hit.collider.transform.position, Color.red, 20); break; } else { if (boxColliderTrigger.GetComponent <Collider2D>().bounds.Contains(positionDequeued + new Vector3(0.1f, 0)) && !path.Contains(positionDequeued + new Vector3(0.1f, 0))) { queue.Enqueue(positionDequeued + new Vector3(0.1f, 0)); path.Add(positionDequeued + new Vector3(0.1f, 0)); } if (boxColliderTrigger.GetComponent <Collider2D>().bounds.Contains(positionDequeued + new Vector3(0, 0.1f)) && !path.Contains(positionDequeued + new Vector3(0, 0.1f))) { queue.Enqueue(positionDequeued + new Vector3(0, 0.1f)); path.Add(positionDequeued + new Vector3(0, 0.1f)); } if (boxColliderTrigger.GetComponent <Collider2D>().bounds.Contains(positionDequeued + new Vector3(-0.1f, 0)) && !path.Contains(positionDequeued + new Vector3(-0.1f, 0))) { queue.Enqueue(positionDequeued + new Vector3(-0.1f, 0)); path.Add(positionDequeued + new Vector3(-0.1f, 0)); } if (boxColliderTrigger.GetComponent <Collider2D>().bounds.Contains(positionDequeued + new Vector3(0, -0.1f)) && !path.Contains(positionDequeued + new Vector3(0, -0.1f))) { queue.Enqueue(positionDequeued + new Vector3(0, -0.1f)); path.Add(positionDequeued + new Vector3(0, -0.1f)); } } } if (!boxColliderTrigger.GetComponent <Collider2D>().bounds.Contains(positionToWalkTo + new Vector3(1f, 0))) { positionToWalkTo += new Vector3(-1f, 0); } if (!boxColliderTrigger.GetComponent <Collider2D>().bounds.Contains(positionToWalkTo + new Vector3(-1f, 0))) { positionToWalkTo += new Vector3(1f, 0); } if (!boxColliderTrigger.GetComponent <Collider2D>().bounds.Contains(positionToWalkTo + new Vector3(0, 1f))) { positionToWalkTo += new Vector3(0, -1f); } if (!boxColliderTrigger.GetComponent <Collider2D>().bounds.Contains(positionToWalkTo + new Vector3(0, -1f))) { positionToWalkTo += new Vector3(0, 1f); } GetComponent <PolyNavAgent>().SetDestination(positionToWalkTo); }