это должен быть очень простой ответ. Я следую учебнику по 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;
}
}
}
}