Я включил эту функцию в одну из моих игр, и мой вражеский скрипт выполнял проверку каждый раз, когда враг умирал. Функция выглядела так:
void Die()
{
Destroy(gameObject);
if (gameManager != null)
{
if (gameManager.GetEnemies - 1 == 0)
{
gameManager.Invoke("WinLevel", 1f);
}
}
}
Обычная практика - использовать Game Manager для управления вашей игрой, поэтому здесь, мой gameManager
скрипт отслеживает количество врагов в моей игре в функции GetEnemies
. Также имеет смысл только то, что он отвечает за смену сцен (в функции WinLevel
в моем случае). И этот скрипт прикрепляется к объекту Game Manager.
Затем вы можете:
- Сделать ссылку на Game Manager в скрипте врага или ...
- Создание статического c экземпляра скрипта
Редактировать: Скрипт GameManager имеет следующий код:
public class GameManager : MonoBehaviour
{
// The integer is the index for the current scene and the string is the name of the scene
public string nextLevel = "2";
public int levelToUnlock = 2;
public GameObject winMenu;
public GameObject gameplayUI;
public GameObject backgroundMusic;
GameObject player;
Rigidbody2D playerRigidbody2D;
public AudioClip winMusic;
public int GetEnemies { get { return GameObject.FindGameObjectsWithTag("Enemy").Length; } }
private void Start()
{
GoogleMobileAdsDemoScript._Adins.DestroyBanner();
}
public void WinLevel()
{
GoogleMobileAdsDemoScript._Adins.ShowBannerAd();
player = GameObject.FindGameObjectWithTag("Player");
playerRigidbody2D = player.GetComponent<Rigidbody2D>();
playerRigidbody2D.simulated = false;
PlayerPrefs.SetInt("levelReached", levelToUnlock);
winMenu.SetActive(true);
gameplayUI.SetActive(false);
backgroundMusic.GetComponent<AudioSource>().Stop();
backgroundMusic.GetComponent<AudioSource>().PlayOneShot(winMusic);
}
public void NextLevel()
{
GoogleMobileAdsDemoScript._Adins.DestroyBanner();
SceneManager.LoadScene(nextLevel);
}
public void RestartLevel()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}