我正在尝试使这段代码起作用,但我自己想不通,为什么不行。 HUD上有六个子弹图标,每次拍摄时每个图标变为假(停用),这就是这个主意。顺便说一句,它的团结。
void Bullets(Image[] bullets, int index)
{
for (int i = 0; i < weapons[index].ammoAmount; i++)
{
bullets[i].gameObject.SetActive(true);
}
}
ammoAmount的值为6,代表我的HUD上的每个项目符号图标,每次拍摄时,我都使用类似这样的东西:
void Shooting()
{
if (Input.GetButton(DualShock4.Input(InputCode.L2)))
{
if (Input.GetButtonDown(DualShock4.Input(InputCode.R2)))
{
if (weapons[1].ammoAmount > 0) weapons[1].ammoAmount -= 1;
else if (weapons[2].ammoAmount > 0) weapons[2].ammoAmount -= 1;
}
}
}
我知道Bullets()方法只能使我的图标保持激活状态,我不知道如何停用它,因为无法进行“ for循环”。有什么想法吗?
答案 0 :(得分:2)
我希望它是因为您不会停用子弹。有两个名为“ ammoAmount”和“ shotBullets”的变量。我还没有尝试下面的代码。但是,想法是这样的。
oid Shooting()
{
if (Input.GetButton(DualShock4.Input(InputCode.L2)))
{
if (Input.GetButtonDown(DualShock4.Input(InputCode.R2)))
{
if (weapons[1].ammoAmount > weapons[1].shotBullets) weapons[1].shotBullets += 1;
else if (weapons[2].ammoAmount > weapons[2].shotBullets) weapons[2].shotBullets += 1;
}
}
}
void Bullets(Image[] bullets, int index)
{
int liveAmmo = weapons[index].ammoAmount - shotBullets;
for (int i = 0; i < weapons[index].ammoAmount; i++)
{
bullets[i].gameObject.SetActive((i<liveAmmo));
}
}
答案 1 :(得分:2)
void Bullets(Image[] bullets, int index)
{
for (int i = 0; i < weapons[index].maxAmmoAmount; i++)
{
bullets[i].gameObject.SetActive(i < weapons[index].ammoAmount);
}
}
这样,您的循环就超出了总弹药容量,然后根据i
(项目符号图像编号)是否小于剩余数量,将对象设置为活动/不活动弹药(记住i = 0
与bullets I have left = 1
是同一件事)。
当然,如果您的所有武器都具有相同的弹药容量,则可以进行for (int i = 0; i < 6; i++)
,但是以后重构的可能性较小。
SetActive(i < weapons[index].ammoAmount)
只是其中的一种简短方法:
if(i < weapons[index].ammoAmount)
SetActive(true)
else
SetActive(false)
由于(i < weapons[index].ammoAmount)
已经是一个布尔值,而不是执行if-check,我们可以直接将该布尔值发送到 SetActive()
方法。