예제 #1
0
        private IEnumerator Roam()
        {
            while (!target)
            {
                if (owner == null)
                {
                    yield return(null);
                }
                if (!IsOwnerTooFar())
                {
                    Unit nearestEnemy = AIUtils.GetNearestEnemy(_unit, agroRadius);
                    if (nearestEnemy == null)
                    {
                        nearestEnemy = AIUtils.GetNearestEnemy(owner, agroOwnerRadius);
                    }
                    if (nearestEnemy != null)
                    {
                        Attack(nearestEnemy);
                        yield break;
                    }
                }

                var newPosition = owner.iso.pos + _maintainOffset;
                _unit.GoTo(newPosition);
                yield return(new WaitForSeconds(Random.Range(0.1f, 0.5f)));
            }
        }
예제 #2
0
        private IEnumerator Roam()
        {
            while (!target)
            {
                Unit nearestEnemy = AIUtils.GetNearestEnemy(_unit, viewRadius);
                if (nearestEnemy != null)
                {
                    Attack(nearestEnemy);
                    yield break;
                }

                var newPosition = _unit.iso.pos + new Vector2(Random.Range(-8f, 8f), Random.Range(-8f, 8f));
                _unit.GoTo(newPosition);
                yield return(new WaitForSeconds(Random.Range(1f, 2f)));
            }
        }
예제 #3
0
        private IEnumerator Roam()
        {
            while (!target)
            {
                Character nearestEnemy = AIUtils.GetNearestEnemy(character, viewRadius);
                if (nearestEnemy != null)
                {
                    Attack(nearestEnemy);
                    yield break;
                }

                var newPosition = character.iso.pos + new Vector2(Random.Range(-8f, 8f), Random.Range(-8f, 8f));
                character.GoTo(newPosition);
                yield return(new WaitForSeconds(Random.Range(1f, 2f)));

                while (!isActiveAndEnabled)
                {
                    yield return(null);
                }
            }
        }