Синхронизация строки состояния со сценарием кода состояния - PullRequest
0 голосов
/ 24 мая 2019

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

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


public class HealthBar : MonoBehaviour
{
    public static HealthBar singleton;
    public Image currentHealthbar;
    public Text ratioText;

    public float currentHealth;
    public float maxHealth = 100f;
    public bool isDead = false;
    public bool isGameOver = false;
    public GameObject gameOverText;


    private void Awake()
    {
        singleton = this;
    }

    // Start is called before the first frame update
    private void Start()
    {
        currentHealth = maxHealth;
        UpdateHealthbar();
    }

    // Update is called once per frame
    private void UpdateHealthbar()
    {
        float ratio = currentHealth/ maxHealth;
        currentHealthbar.rectTransform.localScale = new Vector3(ratio, 1, 1);
        ratioText.text = (ratio * 100).ToString("0") + '%' ;
    }

    void Update()
    {
        if(currentHealth < 0)
        {
            currentHealth = 0;
        }
    }

    public void DamagePlayer(float damage)
    {
        if(currentHealth > 0)
        {
            currentHealth -= damage;
        }
        else
        {
            Dead();

            if (isGameOver && Input.GetMouseButtonDown(0))
            {
                SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

            }
        }

        UpdateHealthbar();
    }

    void Dead()
    {
        currentHealth = 0;
        isDead = true;
        Debug.Log("Player is dead");

        gameOverText.SetActive(true);
        isGameOver = true;
    }
}

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

Я вижу две проблемы.

  1. Ваш метод UpdateHealthBar не вызывается, когда игрок получает урон. Одним из решений является вызов этого метода в конце вашего DamagePlayer метода. (Обратите внимание, что в то время как Update будет вызываться каждый кадр, как написано в настоящее время, UpdateHealthBar не будет.)

  2. Кроме того, похоже, что вы используете две переменные для отслеживания здоровья вашего игрока: hitpoint и currentHealth. В чем разница между этими двумя? Вам нужны оба? В настоящее время hitpoint используется в методе UpdateHealthbar, но currentHealth уменьшается в методе DamagePlayer. Вам необходимо использовать оба метода, чтобы использовать одну и ту же переменную для индикатора здоровья, чтобы точно отражать здоровье игрока.

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