Заставить игрока потерять жизни - PullRequest
0 голосов
/ 28 апреля 2019

Я делаю счетчик здоровья со спрайт-изображениями для игры с разбиением блоков. Проблема в том, что когда мяч попадает в коллайдер, он автоматически отправляется на сцену Lose, не теряя ни одной жизни. Предполагается, что пользователь теряет жизнь каждый раз, когда мяч касается коллайдера, и когда у него кончается жизнь, пользователь выходит на сцену потери, но ни одна из них не работает.

Я не знаю, собираюсь ли я что-то изменить или добавить в один из моих сценариев. Может кто-то помочь мне, пожалуйста? Спасибо.

На картинке ниже вы можете увидеть инспектора бала Ball ins[pector

На картинке ниже вы можете увидеть инспектора Сердца 1,2,3 и 4 enter image description here

Живой скрипт:

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

public class Lives : MonoBehaviour
{
public int health;
public int NumberOfHearts;
public LoadScenes LoadLevel;
public LevelManager lvlManager;
public Image[] hearts; //Creating an arry.
public Sprite FullHeart;
public Sprite EmptyHeart;


void Update()
{
    if(health > NumberOfHearts) //This is to make sure that the ball doesn't go over 4 lives
    {
        health = NumberOfHearts;
    }

    for (int i = 0; i < hearts.Length; i++) //Variable i is less than the length of hearts 
    {
        if (i < health) //If i is smaller than the health
        {
            hearts[i].sprite = FullHeart; //The sprite of FullHeart is displayed
        }
        else
        {
            hearts[i].sprite = EmptyHeart; //The sprite of EmptyHeart is displayed
        }

        if (i < NumberOfHearts)//For loop to check if i is smaller than the NumberOfHearts
        {
            hearts[i].enabled = true; //If i IS smaller than the NumberOfHearts than hearts of the index i is visiable
        }
        else
        {
            hearts[i].enabled = false; //If it ISN'T smaller than the NumberOfHearts than hearts of the index i is invisiable
        }

        if (NumberOfHearts < 0)
        {
            lvlManager.LoadLevel("Lose");
        }

     }

  }

}

Скрипт LoadScene:

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

public class LoadScenes : MonoBehaviour {

public LevelManager lvlManager;

//If the ball hits one of the walls the colliders will be triggered
void OnTriggerEnter2D()
{
    print("The wall is triggered by the ball");
    lvlManager.LoadLevel("Lose");
    Bricks.brickCount = 0;


}



  void OnCollisionEnter2D()
   {
      Debug.Log("The ball has collided with the wall");
   }

}

Сценарий LevelManager:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelManager : MonoBehaviour {
  public void LoadLevel(string name)
  {
    print("Level loading requested for" + name);
    SceneManager.LoadScene(name);
   }
}

1 Ответ

0 голосов
/ 28 апреля 2019

Насколько я заметил в вашем скрипте LoadScene:

void OnTriggerEnter2D()
{
    print("The wall is triggered by the ball");
    lvlManager.LoadLevel("Lose");
    Bricks.brickCount = 0;
}

Вы в основном сказали ему немедленно запускать игровую сцену Lose, тогда как вы должны были вызвать функцию, чтобы уменьшить сердце, а затем обновить здоровье вкоторый проверит обновленное количество червей и затем решит, проиграна игра или нет

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