Ползунок работоспособности, если включен оператор рендера строки операторов - PullRequest
0 голосов
/ 05 февраля 2019

Мой сценарий Enemy активирует Raycast и Line Renderer, когда в пределах досягаемости игрока.Однако, используя скрипт «Здоровье» ниже, мой ползунок здоровья продолжает уменьшаться в стоимости после того, как мой враг уничтожен или я вывожу игрока за пределы диапазона.

Новичок в единстве, надеюсь, это не слишком просто.Я полагаю, что после CurrentHealth -= Time.deltaTime * 10; нет ничего, что могло бы остановить ухудшение здоровья, но как бы это исправить?

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

public class Health : MonoBehaviour
{
    public Text HealthText;
    public Slider HealthSlider;

    public float MaxHealth = 100;
    static public float CurrentHealth = 100;

    public LineRenderer lineRenderer;

    private void Update()
    {
        HealthUI();

        if (CurrentHealth > 0)
        {
            if (lineRenderer.enabled) 
            {
                CurrentHealth -= Time.deltaTime * 10;   
            }
        }
    }   

    public void HealthUI()
    {
        HealthSlider.value = CurrentHealth / MaxHealth;
        HealthText.text = "HEALTH " + ((int)(CurrentHealth / MaxHealth * 100)).ToString() + "%";
    }  
}

Спасибо!

1 Ответ

0 голосов
/ 05 февраля 2019

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

Обратите внимание, что ваш текущий подход требует, чтобы у вас был только один линейный рендер, который включался и выключался в зависимости от того, враг лив поле зрения.Это может стать грязным.Я думаю, что лучшим подходом было бы вызвать метод TakeDamage непосредственно в сценарии здоровья, когда игрок находится в поле зрения:

using UnityEngine;
using UnityEngine.UI;

public class Health : MonoBehaviour
{
    public Text HealthText;
    public Slider HealthSlider;

    public float MaxHealth = 100;
    public float CurrentHealth = 100;

    public void TakeDamage()
    {
        if (CurrentHealth > 0)
        {
            CurrentHealth -= Time.deltaTime * 10;
        }
    }

    private void Update()
    {
        HealthUI();
    }

    public void HealthUI()
    {
        HealthSlider.value = CurrentHealth / MaxHealth;
        HealthText.text = "HEALTH " + ((int)(CurrentHealth / MaxHealth * 100)).ToString() + "%";
    }
}
...