健康滑块如果语句行渲染启用统一

问题描述 投票:0回答:1

我的敌人脚本激活时,光线投射和行渲染器中播放的范围。然而,使用下面我的健康滑块健康脚本继续我的敌人被破坏,或我移动玩家超出范围后,在价值下降。

新的团结,希望这是不是太简单了。我想它的原因还有什么后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() + "%";
    }  
}

谢谢!

c# if-statement unity3d uislider raycasting
1个回答
0
投票

是除非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() + "%";
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.