Заполнение Unity Slider продолжает исчезать при старте - PullRequest
0 голосов
/ 16 апреля 2020

Итак, я слежу за Survival Shooter на Youtube, и у меня возникли некоторые раздражающие и волшебные проблемы даже после того, как я уже сделал работу над частью. В тот день, когда я сделал Slider, все работало нормально. Теперь заливка продолжает исчезать, даже если значение равно 100. Также код, который они использовали для инициализации Slider и Image, теперь не работает, поэтому я искал другой код и теперь он работает. Я использую версию 2019.3.0f6. Это мой код.

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

public class PlayerHealth : MonoBehaviour{
    int initHp = 100;
    public int currentHp;
    public Slider hpSlider;
    public Image dmgImg;
    AudioClip deathClip;
    float flashSpd = 5f;
    Color flashColor = new Color(1f, 0f, 0f, 0.1f);

    Animator animator;
    AudioSource playerAudio;
    PlayerMovement playerMovement;
    PlayerShooting playerShooting;
    bool isDead;
    bool isDamaged;

    void Awake() {
        animator = GetComponent<Animator>();
        playerAudio = GetComponent<AudioSource>();
        playerMovement = GetComponent<PlayerMovement>();
        playerShooting = GetComponentInChildren<PlayerShooting>();
        currentHp = initHp;
    }

    void Start(){
        if (GameObject.FindGameObjectWithTag ("hpSlider")) {
            hpSlider = (Slider) FindObjectOfType(typeof (Slider));
        }
        if (GameObject.FindGameObjectWithTag ("dmgImg")) {
            dmgImg = (Image) FindObjectOfType(typeof (Image));
        }
    }

    // Update is called once per frame
    void Update(){
        if(dmgImg != null){
            if(isDamaged){
                dmgImg.color = flashColor;
                Debug.Log("flash color");
            }else{
                dmgImg.color = Color.Lerp(dmgImg.color, Color.clear, flashSpd * Time.deltaTime);
            }
        }
        dmgImg.color = Color.Lerp(dmgImg.color, Color.clear, flashSpd * Time.deltaTime);
        isDamaged = false;
        Debug.Log("currentHp: "+currentHp+" sliderVal: "+hpSlider.value);
    }

    public void TakeDamage(int amt){
        isDamaged = true;
        currentHp -= amt;

        // hpSlider.value = currentHp;
        Debug.Log("currentHp: "+currentHp+" sliderVal: "+hpSlider.value);

        playerAudio.Play();

        if(currentHp <= 0 && !isDead){
            Death();    
        }
    }

    public void Death(){
        isDead = true;
        animator.SetTrigger("Die");

        // playerAudio.clip =   deathClip;
        // playerAudio.Play();

        playerMovement.enabled = false;
        playerShooting.enabled = false;
    }
}

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете использовать атрибут [Range()], он работает так:

[Range(0, 100)] public int currentHp

Извините, что не комментирую, так как вижу, что это не ответ, но мой представитель слишком низкий (:

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