Unity3D Shooter - Как перейти на следующий уровень после уничтожения всех врагов? - PullRequest
2 голосов
/ 21 октября 2019

Я новичок в Unity и пытаюсь создать небольшую шутерную 2D-игру на C #. Теперь я застрял и признаюсь, что немного растерялся, не зная, каков наилучший подход, но проблема в том, что мой герой стреляет во врагов, и они умирают, но как мне перейти на следующий уровень после того, как все враги будут мертвы? Если я сделаю счетчик ошибок, какой сценарий я добавлю? Во вражеском сценарии? Или я делаю новый сценарий, но связываю его с чем? Мне также нужно, чтобы игра закончилась, если герой стреляет своими шестью пулями (уже есть жетон, который заставляет героя больше не стрелять после шести выстрелов), и все еще остаются враги ... Кто-нибудь дает мне несколько советов? Спасибо!

Вражеский сценарий:

  using System.Collections.Generic;
  using UnityEngine;

  public class BadguyScript : MonoBehaviour
  {
      public int maxHealth;
      public int curHealth;
      private Animator myAnimator;
      private bool isDead;
      [SerializeField]
      private float DespawnTime = 2.5f;
      [SerializeField]
      private string DeathAnimHash = "isDead"; 

      void Start()
      {
          myAnimator = GetComponent<Animator>();
          myAnimator.enabled =true;
          myAnimator.SetBool (DeathAnimHash ,isDead);


          maxHealth = 1;
          curHealth = maxHealth;

      }
      void Update()
      {
          if (curHealth < 1)
          {
              isDead = true;
              myAnimator.SetBool (DeathAnimHash ,isDead);
              Destroy(gameObject,DespawnTime);
          }
      }
      void OnTriggerEnter2D(Collider2D col)
      {
          if (isDead)
             return;
          if (col.tag == "bullet")
          {
              curHealth -= 1;
              Destroy(col.gameObject);
          }
      }
  }

Количество пуль Сценарий:

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

public class GameFlow : MonoBehaviour
{

    public static float remainingShots = 6;
    public Transform shot1;
    public Transform shot2;
    public Transform shot3;
    public Transform shot4;
    public Transform shot5;
    public Transform shot6;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
      if (remainingShots > 0)
      {
        shot1.GetComponent<Image> ().enabled = true;
      }
      else
      {
        shot1.GetComponent<Image> ().enabled = false;
      }

      if (remainingShots > 1)
      {
        shot2.GetComponent<Image> ().enabled = true;
      }
      else
      {
        shot2.GetComponent<Image> ().enabled = false;
      }

      if (remainingShots > 2)
      {
        shot3.GetComponent<Image> ().enabled = true;
      }
      else
      {
        shot3.GetComponent<Image> ().enabled = false;
      }

      if (remainingShots > 3)
      {
        shot4.GetComponent<Image> ().enabled = true;
      }
      else
      {
        shot4.GetComponent<Image> ().enabled = false;
      }

      if (remainingShots > 4)
      {
        shot5.GetComponent<Image> ().enabled = true;
      }
      else
      {
        shot5.GetComponent<Image> ().enabled = false;
      }

      if (remainingShots > 5)
      {
        shot6.GetComponent<Image> ().enabled = true;
      }
      else
      {
        shot6.GetComponent<Image> ().enabled = false;
      }


      if(Input.GetButtonDown("Fire1"))
      {
      remainingShots -= 1;
      }
    }
}

1 Ответ

3 голосов
/ 21 октября 2019

Чтобы переключиться на другую сцену после выполнения ваших условий, выполните следующие действия:
1. Добавьте другие сцены в вашу игру, выполнив следующие действия:

Файл -> Настройки сборки -> Добавить открытые сцены


2. Сделайте что-то подобное в своем коде:

Enemy Script.cs

using UnityEngine.SceneManagement; // Contains scene management functions

public GameObject[] enemies;

void Update()
{
    enemies = GameObject.FindGameObjectsWithTag("Enemy"); // Checks if enemies are available with tag "Enemy". Note that you should set this to your enemies in the inspector.
    if (enemies.length == 0)
    {
        SceneManager.LoadScene("OtherSceneName"); // Load the scene with name "OtherSceneName"
    }
}

Bullet Script.cs
using UnityEngine.SceneManagement;

void Update()
{
    if (remainingShots == -1)
    {
        SceneManager.LoadScene("OtherSceneName");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...