как я могу проверить на предмет отладки?почему мое здоровье игрока не работает? - PullRequest
0 голосов
/ 01 марта 2019

Как я могу отладить метод setHealth, чтобы узнать, вызывается ли он?скрипт здоровья игрока не работает?скрипт здоровья игрока должен вести обратный отсчет состояния здоровья, а индикатор здоровья должен уменьшиться.Я хотел бы знать, где следует отлаживать и как отлаживать в коде, чтобы увидеть, что вызывается?В тот момент, когда я играю в игру, нет синтаксической ошибки, но индикатор здоровья не уменьшается, и игровой объект игрока мгновенно умирает.

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

public class PlayerHealth : MonoBehaviour
{
    [SerializeField] GameObject deathFX;
    [SerializeField] Transform parent;
    public Image Bar;
    public Text Text;
    public float max_health = 100f;
    public float cur_health = 0f;


    //Use this for initialization
    void Start()
    {
        // Initialize the health that is given
        cur_health = max_health;
        InvokeRepeating("decreaseHealth", 0f, 2f);
    }

    void Update()
    {
        if (cur_health <= 0)
        {
            Destroy(gameObject);   //if the player has no health point left, destroy the player.
        }
    }

    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.GetComponent<Projectiles>())
        {
            max_health -= cur_health;
            //if the collision object has a homing script, minus player health by   damageToPlayer
        }
    }

    void decreaseHealth()
    {
        //Subtract the health at the following rate
        //Check if the health is 0 before we do any damage
        if (cur_health < 0)
        {
            cur_health = 0;
        }
        //make a new variable and divide the current health my the maximum health
        //this is because the fill value goes from 0 to 1
        float calc_health = cur_health / max_health; // 70 / 100 = 0.7
        SetHealth(calc_health);

        //Change the color of the health bar
        // on the scale of 1000, if health <= 625 and is greater    than 345, do the following
        if (cur_health != 0 && cur_health <= max_health / 1.6 && cur_health >    max_health / 2.9) 
        {
            Bar.color = new Color32(171, 162, 53, 255);
        }
        else if (cur_health != 0 && cur_health <= max_health / 2.9) // on the    scale of 1000, if health <= 625, do the following
        {
            Bar.color = new Color32(158, 25, 25, 255);
        }
    }

    void SetHealth(float myHealth)
    {
        //defill the bar based on the current health
        Bar.fillAmount = myHealth;

        //change the text to display the amount of health
        Text.text = cur_health.ToString("f0") + "/100";
    }
}

1 Ответ

0 голосов
/ 01 марта 2019

Ваша ошибка возникает из-за того, что вы уменьшаете MaxHealth вместо curHealth (в OnCollisionEnter).Вот несколько советов в следующий раз.

Сделайте отступ в коде

Легче читать, когда вы пишете вопрос и в своих сценариях.

Использовать константы

Переменные, которые не должны изменяться со временем, должны быть объявлены const:

public const float max_health = 100f;

Таким образом, ваш компилятор сообщит вам об ошибке.

Если в течение жизни вашей программы возможно, что максимальный запас здоровья изменится в зависимости от того, как вы инстанцируете свой класс, вы также можете использовать ключевое слово readonly:

public readonly float max_health;

Значениеможет быть установлен только в конструкторе класса, тогда вы больше не сможете его изменить.

Использовать отладчик

Эту ошибку можно было легко найти с помощью отладкиинструмент.Проверьте документацию относительно вашей среды разработки.

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