为什么这会把我敌人的所有生命线连接在一起,即使他们的实际生命值正在以指定的速度下降?
public class FillHealth : MonoBehaviour
{
Image HealthBar;
private NormalMonster normalMonster;
// Start is called before the first frame update
void Start()
{
HealthBar = GetComponent<Image>();
normalMonster = GameObject.FindGameObjectWithTag("Normal Monster").GetComponent<NormalMonster>();
}
// Update is called once per frame
void Update()
{
UpdateHealthLeft();
}
public void UpdateHealthLeft()
{
if (normalMonster.healthLeft > 0)
{
HealthBar.fillAmount = normalMonster.healthLeft / normalMonster.setHealth;
}
}
}
这是FillHealth中正在引用的脚本。据我了解,由于变量不是静态的,因此不应共享值。应该会找到每个敌人的健康栏。
public class NormalMonster : MonoBehaviour
{
private float _normalSpeed = 2f;
private float _BaseHealth = 20f;
private float _HealthModifier;
public float setHealth;
public float healthLeft;
// Start is called before the first frame update
void Start()
{
UpdateHealth();
}
// Update is called once per frame
void Update()
{
NormMonMov();
}
public void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Arrows")
{
healthLeft -= Arrows.Damage;
Destroy(other.gameObject);
if (healthLeft <= 0f)
{
Destroy(this.gameObject);
EarnedGold.earnedGold += 7;
Spawn_Manager.enemyCount--;
}
}
}
public void UpdateHealth()
{
if (StageMode.StageLvl > 5)
{
_HealthModifier = (StageMode.StageLvl * 0.01f) * _BaseHealth;
setHealth = Mathf.Round(_BaseHealth + _HealthModifier);
}
else
{
setHealth = _BaseHealth;
}
healthLeft = setHealth;
}
public void NormMonMov()
{
transform.Translate(Vector3.left * _normalSpeed * Time.deltaTime);
transform.position = new Vector3(Mathf.Clamp(transform.position.x, -7.0f, 10), transform.position.y, 0);
}
}
对于这个在这个周末刚开始团结起来的家伙来说,任何帮助将不胜感激。
答案 0 :(得分:0)
像这样获得rect变换,而不是得到图像
public RectTransform healthBar;
并使用以下命令更改长度:
healthBar.sizeDelta = new Vector2(normalMonster.healthLeft,healthBar.sizeDelta.y);
答案 1 :(得分:0)
我认为问题出在normalMonster = GameObject.FindGameObjectWithTag("Normal Monster").GetComponent<NormalMonster>();
如果您有两个怪物 两者都有两个脚本,FillHealth和NormalMonster 这两个“ FillHealth”脚本都在场景中寻找 FIRST 游戏对象,该游戏对象的脚本标签为NormalMonster,因此两个怪物都指向完全相同的NormalMonster脚本(列表中的第一个)
将“ GameObject”的大写字母G更改为“ gameObject”的小写字母g
仍然不是编写此代码的最佳方法,但我认为这可能有用