Exemplo n.º 1
0
    private T GetClosest <T>(Collider2D[] buffer, LayerMask layerMask)
    {
        int count = Physics2D.OverlapBoxNonAlloc(InteractiveArea.transform.position, InteractiveArea.size, 360, buffer, layerMask);
        ClosestObject <T> closest = new ClosestObject <T> {
            angle = 360
        };

        for (int i = 0; i < count; ++i)
        {
            if (InteractablesBuffer[i] == null)
            {
                continue;
            }
            Transform found     = InteractablesBuffer[i].transform;
            Vector3   facingdir = movement.GetFacing();
            float     angle     = Vector2.Angle(facingdir, (found.position - transform.position).normalized);
            if (angle > 45f || angle > closest.angle)
            {
                continue;
            }
            closest.angle = angle;
            closest.obj   = found.GetComponent <T>();
        }
        return(closest.obj);
    }
Exemplo n.º 2
0
 private void Start()
 {
     instance = instance ?? this;
     if (fromGameobject == null)
     {
         fromGameobject = GameObject.FindGameObjectWithTag("Player");
     }
     instance = instance ?? this;
 }
    void CheckForVisiblePlayers()
    {
        Transform[]   targets = PlayersInSight(stats.fieldOfView, transform);
        ClosestObject closest = FindClosest(targets);

        if (closest.closest != null)
        {
            Transform closestPlayer = closest.closest.transform;

            if (closestPlayer != null)
            {
                pathFindState = PathFindState.Following;
                follow.target = closestPlayer;
            }
        }
    }