我改变了子弹的伤害,我不明白为什么我会得到这样的值 在控制台中。
当损坏增加时,项目崩溃并出现以下错误:
格式异常:输入字符串的格式不正确。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);
}
}
1条答案
按热度按时间rsaldnfx1#
如果日志显示
_currentDamage
是0
,则乘法的结果也是是
0
然后给出了一个空字符串,因为
#
占位符不打印前导或尾随零...最后,当然float.Parse(str)
也失败了,因为空字符串不能被解析为float
。问题是,为什么
_currentDamage
等于0
?这是因为_currentDamage
和_damage
都没有初始化为特定值,因此它们都保持默认值0
。因此,除非您在此脚本之外并且在执行 *
Start()
之前将_damage
初始化为与0
不同的东西(或者您删除注解并初始化public float _damage = 1
),否则即使您将字符串格式设置为