拿起武器并装备它们,如果达到武器限制,更换我们的武器

Pick up weapons and equipping them, if weapon limit reached, replace our weapon

我有一个非常简单的武器切换系统,我有一个武器列表,我可以使用滚轮循环切换它们

    int previousSelectedWeapon = selectedWeapon;

    if(Input.GetAxis("Mouse ScrollWheel") > 0f)
    {
        if(selectedWeapon - 1 >= 0)
        {
            selectedWeapon--;
        }
        else
        {
            selectedWeapon = maxWeapons;
        }
    }

    if(Input.GetAxis("Mouse ScrollWheel") < 0f)
    {
        if(selectedWeapon + 1 <= maxWeapons)
        {
            selectedWeapon++;
        }
        else
        {
            selectedWeapon = 0;
        }
    }

    if(previousSelectedWeapon != selectedWeapon)
    {
        SelectWeapon();
    }
}

public void SelectWeapon()
{
    int i = 0;

    foreach (Transform weapon in transform)
    {
        if (i ==  selectedWeapon)
        {
            weapon.gameObject.SetActive(true);
        }
        else
        {
            weapon.gameObject.SetActive(false);
        }
        i++;
    }
}

然而这并不是我想要的,我希望能够拥有最多 x 个当前装备的武器并且我只能循环使用它们。

假设我有 1 件武器,我可以拿起另一件武器,但如果我装备了最大数量的武器,我希望我当前选择的武器被我正在拿起的武器所取代

如果是列表,则将 maxWeapon 更改为 weapon.Count,如果是数组,则更改为 weapon.Length; 将新武器添加到列表中,并将选中的设置为列表的最后一个元素?

为了解决这个问题,我完全修复了这段代码。只把代码里面的内容放在class中。底部系统的工作原理类似于 GTA 中的切换武器。如果你想锁定列表轮换,请再次评论。

public class WeaponSelect : MonoBehaviour
{
    [SerializeField]
    private int selectedWeapon = 0;
    private void Update()
    {
        var deltaY = Input.GetAxisRaw("Mouse ScrollWheel");

        if (deltaY == 0) return;

        if (deltaY > 0) selectedWeapon = ++selectedWeapon % transform.childCount;

        if (deltaY < 0) selectedWeapon = selectedWeapon == 0 ? transform.childCount-1 : --selectedWeapon;

        SelectWeapon(selectedWeapon);
    }

    public void SelectWeapon(int index)
    {
        foreach (Transform weapon in transform) weapon.gameObject.SetActive(false);

        transform.GetChild(index).gameObject.SetActive(true);
    }
}