拿起武器并装备它们,如果达到武器限制,更换我们的武器
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);
}
}
我有一个非常简单的武器切换系统,我有一个武器列表,我可以使用滚轮循环切换它们
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);
}
}