Итак, я слежу за 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;
}
}