如何使此HUD项目符号计数器起作用?

时间:2018-07-01 14:00:21

标签: c# unity3d

我正在尝试使这段代码起作用,但我自己想不通,为什么不行。 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循环”。有什么想法吗?

2 个答案:

答案 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 = 0bullets 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()方法。