该名称在当前上下文中不存在 - Unity 3D



我得到错误名称"AK74"在当前上下文中不存在,名称"STG44"在两个调试中的当前上下文中都不存在。日志行

有什么解决方案吗?

private void Start()
{
weapon = GetComponent<Weapon>();
Weapon AK74 = new Weapon(2, 30, 200);
Weapon STG44 = new Weapon(1, 35, 200);
_currentAmmoInClip = clipSize;
STG44.Setmagsize(_currentAmmoInClip);
_ammoInReserve = reservedAmmoCapacity;
STG44.Setfullmag(_ammoInReserve);
_canShoot = true;

}
private void Update()
{
Debug.Log(AK74.Getmagsize());
Debug.Log(STG44.Getmagsize());
}

AK47和STG44变量是Start((的本地变量,不在Update的范围内。为了使它们可见,可以通过将它们的声明移出Start((来增加它们的作用域。例如:

Weapon AK74 = new Weapon(2, 30, 200);
Weapon STG44 = new Weapon(1, 35, 200);
private void Start() {
weapon = GetComponent<Weapon>();
_currentAmmoInClip = clipSize;
STG44.Setmagsize(_currentAmmoInClip);
_ammoInReserve = reservedAmmoCapacity;
STG44.Setfullmag(_ammoInReserve);
_canShoot = true;
}

这些变量是在Start方法的范围内定义的,一旦该函数完成,它们就会被删除。你想把它们存储在对象本身中,所以你必须在函数之外,在类本身中声明它们,就像这样:

Weapon AK74, STG44;
private void Start()
{
weapon = GetComponent<Weapon>();
AK74 = new Weapon(2, 30, 200);
STG44 = new Weapon(1, 35, 200);
_currentAmmoInClip = clipSize;
STG44.Setmagsize(_currentAmmoInClip);
_ammoInReserve = reservedAmmoCapacity;
STG44.Setfullmag(_ammoInReserve);
_canShoot = true;
}
private void Update()
{
Debug.Log(AK74.Getmagsize());
Debug.Log(STG44.Getmagsize());
}

了解变量作用域和字段的使用。

简单地说,您在Start中声明的AK47和STG44变量只存在于Start中,您必须将它们移到主类中,以便它们可以在其他方法中使用。不过,从长远来看,花时间学习一些关于基本C#编程原理的教程会为你节省很多时间。

最新更新