你好,我有一个生命值和护甲脚本,wen,我射击,我有20点护甲和100点生命值,在2次射击后会造成10点伤害,所以你希望你的护甲是0,你的生命值是100,但是我这么做,我的护甲是0,我的生命值是90,我不知道如何避免它,当我的盔甲是0或更少的时候,我想修复它,这是脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Health_Armor : MonoBehaviour {
public float health;
public float armor;
// Use this for initialization
void Start () {
health = 100f;
armor = 20f;
}
// Update is called once per frame
void Update ()
{
Max_Min_Stats();
}
private void Max_Min_Stats()
{
if(health >= 100f)
{
health = 100f;
}
if (health <= 0f)
{
health = 0f;
}
if (armor >= 100f)
{
armor = 100f;
}
if (armor <= 0f)
{
armor = 0f;
}
}
public void TakeDamage(float amount)
{
armor -= amount;
if (armor <= 0f)
{
health -= amount;
if (health <= 0f)
{
Death();
}
}
}
private void Death()
{
Destroy(gameObject);
}
}发布于 2017-12-17 21:44:00
对于这个计算,有很多事情你需要跟踪。
发布于 2017-12-17 21:44:26
试着考虑一下代码的实际结果,而不是代码本身。
假设数量=10.
健康= 100,装甲= 20。
TakeDamage() ->减少护甲10 ->新值10 ->小于或等于0?不是的。好了。
健康= 100,装甲= 10
TakeDamage() ->减少装甲10 ->,新值为0,->小于或等于0 ->,是的。->使健康下降10倍。
怎么解决这个问题呢?如果你把if语句放在减去护甲之前,那么护甲在检查它是否是从健康中减去的0之后就变成0了。
tl;dr -在您评估了if之后,从装甲中减去数量。
编辑: Jdphenix发布了一个可以考虑实现的方法。在你目前的实现中,如果你有5点护甲和100点生命值,并且受到10点伤害,那么护甲就变成0,生命值保持在100点,所以你失去了5点深渊伤害。Jdphenix的方式阻止了这种情况的发生,相反,生命将变为95,装甲将变为0,其余的不会丢失。
https://stackoverflow.com/questions/47859605
复制相似问题