我是新的,所以请容忍我,我正在创建一个游戏的班级,我有3种不同的武器,我正在为每种武器创造3种不同的子弹。武器是不同的形状,所以SphereGun,CubeGun和TriangleGun,所以每颗子弹都是不同的形状。我创建了一个武器切换系统,允许玩家使用滚动轮上下切换武器,如果它=索引号的话,基本上启用了gameObject。然而,我有子弹射击附加到我的PlayerMovement脚本,在那里它检查是否有消防键被按下,如果是的话,将发射武器。我想知道是否有一种方法,也许使用if else语句来检查gameObject =某个类型,如果是,那么实例化该子弹类型预置吗?基本上是问是否有方法改变子弹类型的基础上持有的武器。我会在下面附上我的代码。这是我的WeaponSwitching代码
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语句,如果它= Gun的gameObject类型或名称,就可以更改武器。
void Update()
{
if (Input.GetKeyDown("space"))
{
shoot();
}
}
void shoot()
{
GameObject g = Instantiate(bulletsph, shotSpawn.position, shotSpawn.rotation)
as GameObject;
Destroy(g, 1.5f);
}我认为理论上另一个可行的解决方案是为每种武器类型创建不同的射击脚本,因此有3种不同的脚本可以发射各自类型的子弹,尽管我认为这是获得解决方案的一条很长的路,我希望有一种方法可以把它放在一个脚本中。
我还附加了我的项目层次结构布局的截图。细密布局
谢谢你提前帮忙。如果您有什么问题可以帮助我找到解决方案,请告诉我:)
发布于 2022-02-22 10:58:55
如果我是正确的,你只想要一个状态机的概念。举个例子,枪是一个三角形,然后射一个三角形。如果是这样,那就很容易了。
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);
}
}当您想发射不同的子弹时,只需更改BulletType变量即可。如果有什么不清楚的话,请联系我。
https://stackoverflow.com/questions/71216844
复制相似问题