unity3d Unity -无法理解为什么变量具有这样的值

iqxoj9l9  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(143)

我改变了子弹的伤害,我不明白为什么我会得到这样的值 在控制台中。
当损坏增加时,项目崩溃并出现以下错误:
格式异常:输入字符串的格式不正确。System.Number.ThrowOverflowOrFormatException(System.Boolean溢出,System.String overflowResourceKey)(位于:0)System.Number.ParseSingle(System.ReadOnlySpan`1[T]值,System.Globalization.NumberStyles样式,System.Globalization.NumberFormatInfo信息)(位于:0)

using UnityEngine;

public class Bullet : MonoBehaviour
{
public float _damage;//_damage = 1

private float _currentDamage;

private void Start()
{
    _currentDamage = _damage;
}

private void OnTriggerEnter(Collider other)
{
    if (other.gameObject.TryGetComponent(out Enemy enemy))
    {
        enemy.GetDamage(_currentDamage);// works right and attacks by value of _damage
        Destroy(gameObject);
    }
}

public void IncreaseDamage(float damageMultiplier)
{
    float damageLong = _currentDamage * damageMultiplier;

    Debug.Log(_currentDamage + " " + damageMultiplier);//shows: 0 1.2

    string str = damageLong.ToString("#.##");

    Debug.Log(str);//shows: "nothing"

    _currentDamage = float.Parse(str);
}
}
rsaldnfx

rsaldnfx1#

如果日志显示_currentDamage0,则乘法的结果也是

float damageLong = _currentDamage * damageMultiplier;

0然后

string str = damageLong.ToString("#.##")

给出了一个空字符串,因为#占位符不打印前导或尾随零...最后,当然float.Parse(str)也失败了,因为空字符串不能被解析为float
问题是,为什么_currentDamage等于0?这是因为_currentDamage_damage都没有初始化为特定值,因此它们都保持默认值0
因此,除非您在此脚本之外并且在执行 * Start()之前将_damage初始化为与0不同的东西(或者您删除注解并初始化public float _damage = 1),否则即使您将字符串格式设置为

string str = damageLong.ToString("F2"); //this will give you a float formated to two decimal places

相关问题