Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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);
    }