Текст должен отображаться, когда childCount равен 0, но не - PullRequest
0 голосов
/ 28 марта 2020

это должен быть очень простой ответ. Я следую учебнику по Unity с C# для создания простой игры Space Invaders, и в какой-то момент показано, что когда у нашего врага не осталось дочерних объектов (когда все враги уничтожены) прикрепленный текст под функцией winText должно отображаться.

Таким образом, у нас есть

if (enemyHolder.childCount == 0)
   {
     winText.enabled = true;
   }

Когда я запускаю код, текст не отображается после уничтожения врагов и отсутствия дочерних объектов. Это похоже на то, что код перестает считываться в этот момент, хотя символ все еще подвижен, и вы можете генерировать новые кадры.

Если я создаю два дочерних объекта «Враг» и говорю ему отображать winText, а когда childCount достигает 1, он работает.

Так почему же он не работает, когда функция вызывает == 0?

РЕДАКТИРОВАТЬ: Полный код класса:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class EnemyController : MonoBehaviour
{
    private Transform enemyHolder;
    public float speed;
    public GameObject shot;
    public Text winText;
    public float fireRate = 0.997f;
    // Start is called before the first frame update
    void Start()
    {
        winText.enabled = false;
        InvokeRepeating("MoveEnemy", 0.1f, 0.3f);
        enemyHolder = GetComponent<Transform>();
    }

    void MoveEnemy()
    {
        enemyHolder.position += Vector3.right * speed;
        foreach (Transform enemy in enemyHolder)
        {
            if (enemy.position.x < -10.5 || enemy.position.x > 10.5)
            {
                speed = -speed;
                enemyHolder.position += Vector3.down * 0.5f;
                return;
            }


            if (enemy.position.y <= -4)
            {
                GameOver.isPlayerDead = true;
                Time.timeScale = 0;
            }

            if (enemyHolder.childCount == 1)
            {
                CancelInvoke();
                InvokeRepeating("MoveEnemy", 0.1f, 0.25f);
            }
            if (enemyHolder.childCount == 0)
            {
                winText.enabled = true;
            }
        }
    }
}

1 Ответ

0 голосов
/ 28 марта 2020

Ваш код находится внутри функции void MoveEnemy().

Я предполагаю, что ваш скрипт привязан к врагам в игре. Ваш код не запускается, потому что функция MoveEnemy больше не работает, если нет врагов.

Итак, вам нужно обрабатывать движение врага и обработку сцены в разных скриптах.

Код, который проверяет количество детей вражеского владельца, должен быть помещен в функцию void Update(). Эта Update() функция должна быть помещена в объект, который никогда не удаляется. Его преимущество в том, что он запускает каждый кадр.

Как правило, разработчики обычно используют отдельные пустые объекты или даже камеру для прикрепления сценариев, которые содержат функции обновления, которые обрабатывают сцену. Удачи!

Подробнее о Обновление

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...