コード例 #1
0
    public override BaseEntity SetTarget()
    {
        if (_attackedTarget != null && _attackedTarget.CanBeTarget())
        {
            return(_attackedTarget);
        }
        else if (ActorProxy != null && ActorProxy.isTaunted)
        {
            ActorProxy.DisableBuffEffect(BuffType.Taunted);
        }

        if (ActorProxy == null)
        {
            return(null);
        }

        if (ActorProxy.isInAllyCamp)
        {
            var position = transform.position;

            var target = ActorProxy.GetEnemies().Where(e => e.ActorProxy.isInEnemyCamp)
                         .OrderBy(e => (e.transform.position - position).sqrMagnitude).FirstOrDefault();

            if (target != null)
            {
                return(target);
            }
        }

        var cols = Physics.OverlapSphere(transform.position, searchRange, targetLayer);

        Minion closestTarget = null;
        var    distance      = float.MaxValue;

        foreach (var col in cols)
        {
            var bs = col.GetComponentInParent <Minion>();
            if (bs == null || !bs.CanBeTarget())
            {
                continue;
            }

            var sqr = Vector3.SqrMagnitude(transform.position - col.transform.position);

            if (sqr < distance)
            {
                distance      = sqr;
                closestTarget = bs;
            }
        }

        if (closestTarget != null)
        {
            return(closestTarget);
        }

        return(null);
    }