예제 #1
0
    void Update()
    {
        // 2 - Проверить, начался ли спавн врагов.
        if (hasSpawn == false)
        {
            if (ScrollingScript.IsVisibleFrom(GetComponent <Renderer>(), Camera.main))  //renderer.IsVisibleFrom(Camera.main)
            {
                Spawn();
            }
        }
        else
        {
            // автоматическая стрельба
            foreach (WeaponScript weapon in weapons)
            {
                if (weapon != null && weapon.enabled && weapon.CanAttack)
                {
                    weapon.Attack(true);
                    SoundEffectsHelper.Instance.MakeEnemyShotSound();
                }
            }

            // 4 – Выход за рамки камеры? Уничтожить игровой объект.
            if (!ScrollingScript.IsVisibleFrom(GetComponent <Renderer>(), Camera.main))
            {
                Destroy(gameObject);
            }
        }
    }
예제 #2
0
    void Update()
    {
        if (HS.hp > MaxHP * 3 / 4)
        {
            BodySprite.sprite = BossBodies[0];
        }
        else if (HS.hp > MaxHP / 2)
        {
            BodySprite.sprite = BossBodies[1];
        }
        else if (HS.hp > MaxHP / 4)
        {
            BodySprite.sprite = BossBodies[2];
        }
        else
        {
            BodySprite.sprite = BossBodies[3];
        }
        // Проверим появился ли враг
        if (hasSpawn == false)
        {
            // Для простоты проверим только первый рендерер
            // Но мы не знаем, если это тело, и глаз или рот ...
            if (ScrollingScript.IsVisibleFrom(renderers[0], Camera.main))
            {
                Spawn();
            }
        }
        else
        {
            // AI
            //------------------------------------
            // Перемещение или атака.
            aiCooldown -= Time.deltaTime;

            if (aiCooldown <= 0f)
            {
                isAttacking    = !isAttacking;
                aiCooldown     = Random.Range(minAttackCooldown, maxAttackCooldown);
                positionTarget = Vector2.zero;

                // Настроить или сбросить анимацию атаки
                animator.SetBool("Attack", isAttacking);
            }

            // Атака
            //----------
            if (isAttacking)
            {
                // Остановить все движения
                moveScript.direction = Vector2.zero;

                foreach (WeaponScript weapon in weapons)
                {
                    if (weapon != null && weapon.enabled && weapon.CanAttack)
                    {
                        weapon.Attack(true);
                        SoundEffectsHelper.Instance.MakeEnemyShotSound();
                    }
                }
            }
            // Перемещение
            //----------
            else
            {
                // Выбрать цель?
                if (positionTarget == Vector2.zero)
                {
                    // Получить точку на экране, преобразовать ее в цель в игровом мире
                    Vector2 randomPoint = new Vector2(Random.Range(0f, 1f), Random.Range(0f, 1f));

                    positionTarget = Camera.main.ViewportToWorldPoint(randomPoint);
                }

                // У нас есть цель? Если да, найти новую
                Collider2D col = GetComponent <Collider2D>();
                if (col.OverlapPoint(positionTarget))
                {
                    // Сбросить, выбрать в следующем кадре
                    positionTarget = Vector2.zero;
                }

                // Идти к точке
                Vector3 direction = ((Vector3)positionTarget - this.transform.position);

                // Помните об использовании скрипта движения
                moveScript.direction = Vector3.Normalize(direction);
            }
        }
    }