Unity C # Shooter прекратить клонирование, когда игрок умирает - PullRequest
0 голосов
/ 03 декабря 2018

Так что я делаю игру с бабушкой, стреляющей в уток.У меня бабушка умирает после того, как ее жизни истекли, но я пытаюсь заставить уток перестать клонировать, когда она умрет, так что игра закончится, кто-нибудь?Я знал об этом, поэтому любая помощь будет благодарна.также может дать больше кода, если нужно

public class GrannyController : MonoBehaviour
{

    public float speed;
    public int health = 10;
    public Text healthDisplay;

    private Rigidbody2D rb;
    private Vector2 moveVelocity;
    public int score;
    public GameObject gameOverPanel;


    public bool IsAlive()
    {
        return this.health > 0;
    }

    public void Die()
    {
        //StartCoroutine(DieCoroutine);
        Destroy(this.gameObject);
    }


    // Use this for initialization
    void Start()
    {
        score = 0;
        rb = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        healthDisplay.text = "Lives :" + health;

        if (health <= 0)
        {
            //SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
            GameOver();
        }

        {
            Vector2 moveInput = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
            moveVelocity = moveInput.normalized * speed;
        }
    }
    void FixedUpdate()

    {
        rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
    }

    void GameOver()
    {
        CancelInvoke();
        gameOverPanel.SetActive(true);
    }
}

public class SpawnerController : MonoBehaviour
{

    public GrannyController player;
    public GameObject duck;
    public Transform[] spawnSpots;
    private float timeBtwSpawns;
    public float startTimeBtwSpawns;

    // Use this for initialization
    void Start()
    {
        timeBtwSpawns = startTimeBtwSpawns;
    }

    // Update is called once per frame
    void Update()
    {
        if (!player.IsAlive()) return; // Check if player is alive, stop if not

        timeBtwSpawns -= Time.deltaTime;

        if (timeBtwSpawns <= 0)
        {
            int randPos = Random.Range(0, spawnSpots.Length);
            Instantiate(duck, spawnSpots[randPos].position, Quaternion.identity);
            timeBtwSpawns = startTimeBtwSpawns;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Создать метод IsAlive() внутри скрипта GrannyController, который возвращает живой / мертвый (true / false).

public bool IsAlive()
{
    return this.health > 0;
}

А вот и обновленный Spawner.Не забудьте назначить объект игры с помощью скрипта GrannyController для объекта SpawnerController.

public class SpawnerController : MonoBehaviour
{

    public GrannyController player;
    public GameObject duck;
    public Transform[] spawnSpots;
    private float timeBtwSpawns;
    public float startTimeBtwSpawns;

    // Use this for initialization
    void Start()
    {
        timeBtwSpawns = startTimeBtwSpawns;
    }

    // Update is called once per frame
    void Update()
    {
        if(!player.IsAlive()) return; // Check if player is alive, stop if not

        timeBtwSpawns -= Time.deltaTime;

        if (timeBtwSpawns <= 0)
        {
            int randPos = Random.Range(0, spawnSpots.Length);
            Instantiate(duck, spawnSpots[randPos].position, Quaternion.identity);
            timeBtwSpawns = startTimeBtwSpawns;
        }
    }
}
0 голосов
/ 03 декабря 2018

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

Может быть что-то вроде этого в SpawnerController создать логическое значение, называемое, например, spawneable, это логическое значение может быть общедоступными вы можете изменить его от смерти игрока до ложного, и таким образом вы остановите клонирование:

void Update()
{

    if (timeBtwSpawns <= 0)
    {
        if(spawneable)
        {
           int randPos = Random.Range(0, spawnSpots.Length);
           Instantiate(duck, spawnSpots[randPos].position, Quaternion.identity);
           timeBtwSpawns = startTimeBtwSpawns;
        }
    }
    else
    {
        timeBtwSpawns -= Time.deltaTime;
    }

}

Это самый простой способ, который я могу себе представить, не самый лучший, но у вас это получилось за нескольколинии.

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