独立工作的健康酒吧
Health bars that work independently
以下脚本对我的敌人预制件造成伤害,但它上方的生命值条与其当前生命值不匹配。它不会更改其各自的健康栏,而只会更改层次结构 window 中预制件的第一个实例。但是,当对敌人施加正确数量的伤害时,敌人仍会被摧毁。需要注意的是,健康条图像是 canvas 的子项,而 canvas 是附加脚本的主预制件的子项。我该如何解决这个问题?
using UnityEngine;
using System.Collections;
public class EnemyHealth : MonoBehaviour {
private float curHealth = 100f;
private float GunDamage;
private GameObject hb;
private GameObject gd;
private GameObject canvas;
public float maxHealth;
public string gunType;
void Start () {
canvas = GameObject.Find ("HealthCanvas");
hb = GameObject.Find ("HealthBar");
gd = GameObject.Find (gunType);
GunDamage = gd.GetComponent<Shoot> ().bulletDamage;
}
public void SubtractHealth(float howMuch){
curHealth = curHealth - howMuch;
if (curHealth <= 0) {
Destroy (this.gameObject);
}
//Update health bar
hb.GetComponent<RectTransform>().sizeDelta = new Vector2 (hb.GetComponent<RectTransform>().sizeDelta.x - 0.95f / maxHealth * GunDamage , hb.GetComponent<RectTransform>().sizeDelta.y);
Debug.Log (curHealth);
}
}
canvas = this.transform.FindChild ("HealthCanvas").gameObject;
hb = canvas.transform.FindChild ("HealthBar").gameObject;
以下脚本对我的敌人预制件造成伤害,但它上方的生命值条与其当前生命值不匹配。它不会更改其各自的健康栏,而只会更改层次结构 window 中预制件的第一个实例。但是,当对敌人施加正确数量的伤害时,敌人仍会被摧毁。需要注意的是,健康条图像是 canvas 的子项,而 canvas 是附加脚本的主预制件的子项。我该如何解决这个问题?
using UnityEngine;
using System.Collections;
public class EnemyHealth : MonoBehaviour {
private float curHealth = 100f;
private float GunDamage;
private GameObject hb;
private GameObject gd;
private GameObject canvas;
public float maxHealth;
public string gunType;
void Start () {
canvas = GameObject.Find ("HealthCanvas");
hb = GameObject.Find ("HealthBar");
gd = GameObject.Find (gunType);
GunDamage = gd.GetComponent<Shoot> ().bulletDamage;
}
public void SubtractHealth(float howMuch){
curHealth = curHealth - howMuch;
if (curHealth <= 0) {
Destroy (this.gameObject);
}
//Update health bar
hb.GetComponent<RectTransform>().sizeDelta = new Vector2 (hb.GetComponent<RectTransform>().sizeDelta.x - 0.95f / maxHealth * GunDamage , hb.GetComponent<RectTransform>().sizeDelta.y);
Debug.Log (curHealth);
}
}
canvas = this.transform.FindChild ("HealthCanvas").gameObject;
hb = canvas.transform.FindChild ("HealthBar").gameObject;