正在创建代码以根据当前持有的武器更改子弹类型



我是新手,所以请耐心等待,我正在为类创建一个游戏,我有3种不同的武器,我为每种武器创建3种不同子弹。武器是不同的形状,所以球体枪、立方体枪和三角形枪,所以每颗子弹都是不同的造型。我能够创建一个武器切换系统,允许玩家使用滚动轮上下更改武器,基本上是启用gameObject(如果它=索引号(。然而,我的PlayerMovement脚本附带了子弹射击功能,它会检查是否按下了点火键,如果按下了,就会射击武器。我想知道是否有一种方法,也许可以使用if-else语句来检查gameObject是否为某个类型,如果是,则实例化该项目符号类型预制?基本上是询问是否有办法根据持有的武器改变子弹类型。我将在下面附上我的代码。这是我的武器交换码

using UnityEngine;
public class WeaponSwitching : MonoBehaviour
{
public int selectedWeapon = 0;
// Start is called before the first frame update
void Start()
{
SelectWeapon();
}
// Update is called once per frame
void Update()
{
int previousthing = selectedWeapon;
if (Input.GetAxis("Mouse ScrollWheel") > 0f)
{
if (selectedWeapon >= transform.childCount - 1)
selectedWeapon = 0;
else
selectedWeapon++;
}
if (Input.GetAxis("Mouse ScrollWheel") < 0f)
{
if (selectedWeapon <= 0)
selectedWeapon = transform.childCount - 1;
else
selectedWeapon--;
}
if (previousthing != selectedWeapon)
{
SelectWeapon();
}
}
void SelectWeapon()
{
int i = 0;
foreach (Transform weapon in transform)
{
if (i == selectedWeapon)
weapon.gameObject.SetActive(true);
else
weapon.gameObject.SetActive(false);
i++;
}
}
}

这是我的PlayerMovement脚本的子弹射击方面我想我可以在这里的射击方法中添加if-else语句来更改武器,如果它=游戏对象类型或枪支名称。

void Update()
{
if (Input.GetKeyDown("space"))
{
shoot();
}
}
void shoot()
{
GameObject g = Instantiate(bulletsph, shotSpawn.position, shotSpawn.rotation)
as GameObject;
Destroy(g, 1.5f);
}

我认为理论上可行的另一个解决方案是为每种武器类型创建一个不同的射击脚本,因此有三个不同的脚本可以发射各自类型的子弹,尽管我认为这是一个很长的路要走,我希望有一种方法可以把它放在一个脚本中。

我还附上了我的项目层次结构布局的屏幕截图。分层布局

感谢您提前提供的帮助。如果你有任何问题可以帮助我找到解决方案,请告诉我:(

如果我做对了,你只需要一个状态机概念。举个例子,枪是一个三角形,然后射一个三角形。如果是这样的话,那就很容易了。

public class test
{

public enum bulletTypes
{
Sqaure,
Triangle,
Cirlce,
}
public GameObject[] Bullets;
public bulletTypes BulletType
void shoot()
{
GameObject bullet = null;

switch(BulletType){
case BulletTypes.Sqaure:
bullet = Bullets[0];
break;
case bulletTypes.Cirlce:
bullet = Bullets[1];
break;
case BulletTypes.Triangle:
bullet = Bullets[2];
break;
}

GameObject g = Instantiate(bullet, shotSpawn.position, shotSpawn.rotation)
as GameObject;
Destroy(g, 1.5f);
}
}

当你想发射不同的子弹时,只需更改子弹类型变量。如果有什么不清楚的地方,请联系我。