首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据当前持有的武器创建更改子弹类型的代码

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

Stack Overflow用户
提问于 2022-02-22 06:34:39
回答 1查看 49关注 0票数 0

我是新的,所以请容忍我,我正在创建一个游戏的班级,我有3种不同的武器,我正在为每种武器创造3种不同的子弹。武器是不同的形状,所以SphereGun,CubeGun和TriangleGun,所以每颗子弹都是不同的形状。我创建了一个武器切换系统,允许玩家使用滚动轮上下切换武器,如果它=索引号的话,基本上启用了gameObject。然而,我有子弹射击附加到我的PlayerMovement脚本,在那里它检查是否有消防键被按下,如果是的话,将发射武器。我想知道是否有一种方法,也许使用if else语句来检查gameObject =某个类型,如果是,那么实例化该子弹类型预置吗?基本上是问是否有方法改变子弹类型的基础上持有的武器。我会在下面附上我的代码。这是我的WeaponSwitching代码

代码语言:javascript
运行
复制
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类型或名称,就可以更改武器。

代码语言:javascript
运行
复制
void Update()
    {
        if (Input.GetKeyDown("space"))
        {
            shoot();
        }
    }
    void shoot()
    {
        GameObject g = Instantiate(bulletsph, shotSpawn.position, shotSpawn.rotation)
               as GameObject;
        Destroy(g, 1.5f);
    }

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

我还附加了我的项目层次结构布局的截图。细密布局

谢谢你提前帮忙。如果您有什么问题可以帮助我找到解决方案,请告诉我:)

EN

回答 1

Stack Overflow用户

发布于 2022-02-22 10:58:55

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

代码语言:javascript
运行
复制
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变量即可。如果有什么不清楚的话,请联系我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71216844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档