我有一个武器切换系统,非常简单,我有一个武器清单,我可以使用我的滚动轮循环它们。
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件武器,我可以拿起另一件武器,但如果我装备了最大数量的武器,我希望我目前选择的武器被我要捡到的武器替换
发布于 2022-05-16 03:40:11
为了解决这个问题,我完全修正了这个代码。只将内容放入类中的代码中。底层系统的工作方式类似于在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);
}
}
发布于 2022-05-15 16:06:57
如果是列表,则只将maxWeapon更改为weapon.Count
,如果是数组,则更改为weapon.Length
;向列表添加新的武器,并将其设置为list的最后一个元素?
https://stackoverflow.com/questions/72249908
复制相似问题