C# 如何同时向不同方向发射多发子弹?

C# 如何同时向不同方向发射多发子弹?,c#,unity3d,C#,Unity3d,我想知道我怎么能同时向不同的方向发射多发子弹 我有这个游戏对象,你可以在下面的图片中看到,它有4个繁殖点,可以喷射子弹 所以当这个游戏物体被一个特定的敌人击中时,它会同时向四个方向射击。我已经试过类似的方法了,但不起作用。我对Unity很陌生。此脚本已附加到此游戏对象 using System.Collections; using System.Collections.Generic; using UnityEngine; public class DanoCruz : MonoBehavi

我想知道我怎么能同时向不同的方向发射多发子弹

我有这个游戏对象,你可以在下面的图片中看到,它有4个繁殖点,可以喷射子弹

所以当这个游戏物体被一个特定的敌人击中时,它会同时向四个方向射击。我已经试过类似的方法了,但不起作用。我对Unity很陌生。此脚本已附加到此游戏对象

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DanoCruz : MonoBehaviour
{
    public float Damage = 1f;

    public GameObject Projetil;
    public GameObject SpawnProjetil1;
    public GameObject SpawnProjetil2;
    public GameObject SpawnProjetil3;
    public GameObject SpawnProjetil4;

    public float ProjetVelocity = 1f;


    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.transform.tag == "projetil")
        {
          GameObject tiro = Instantiate(Projetil,SpawnProjetil1.transform.position,SpawnProjetil1.transform.rotation);// it spawns on the left

            tiro = Instantiate(Projetil, SpawnProjetil2.transform.position, SpawnProjetil2.transform.rotation);// it spawns on the right
            tiro = Instantiate(Projetil, SpawnProjetil3.transform.position, SpawnProjetil3.transform.rotation);// it spawns behind
            tiro = Instantiate(Projetil, SpawnProjetil4.transform.position, SpawnProjetil4.transform.rotation);// it spawns in the front

            Destroy(other.gameObject);

        }
    }
}

子弹不动了。我该如何解决它呢?

我已经做了以下工作,并且知道一切正常:

if (other.transform.tag == "projetil")
        {


            if (SpawnProjetil1.tag == "Spaw1")//right
            {
                GameObject tiro = Instantiate(Projetil, SpawnProjetil1.transform.position, SpawnProjetil1.transform.rotation);
                Rigidbody rigiProj = tiro.GetComponent<Rigidbody>();
                rigiProj.velocity = SpawnProjetil1.transform.forward * ProjetVelocity * Time.deltaTime;
            }

            if (SpawnProjetil2.tag == "Spaw2")//left
            {
                GameObject tiro = Instantiate(Projetil, SpawnProjetil2.transform.position, SpawnProjetil2.transform.rotation);
                Rigidbody rigiProj = tiro.GetComponent<Rigidbody>();
                rigiProj.velocity = SpawnProjetil2.transform.forward * ProjetVelocity * Time.deltaTime;
            }


            if (SpawnProjetil3.tag == "Spaw3")//behind
            {
                GameObject tiro = Instantiate(Projetil, SpawnProjetil3.transform.position, SpawnProjetil3.transform.rotation);
                Rigidbody rigiProj = tiro.GetComponent<Rigidbody>();
                rigiProj.velocity = SpawnProjetil3.transform.forward * ProjetVelocity * Time.deltaTime;
            }



            if (SpawnProjetil4.tag == "Spaw4")//front
            {
                GameObject tiro = Instantiate(Projetil, SpawnProjetil4.transform.position, SpawnProjetil4.transform.rotation);
                Rigidbody rigiProj = tiro.GetComponent<Rigidbody>();
                rigiProj.velocity = SpawnProjetil4.transform.forward * ProjetVelocity * Time.deltaTime;
            }


            Destroy(other.gameObject);

        }
if(other.transform.tag==“projetil”)
{
如果(SpawnProjetil1.tag==“Spaw1”)//正确
{
GameObject tiro=实例化(Projetil,SpawnProjetil1.transform.position,SpawnProjetil1.transform.rotation);
Rigidbody rigiProj=tiro.GetComponent();
rigiProj.velocity=SpawnProjetil1.transform.forward*ProjetVelocity*Time.deltaTime;
}
if(SpawnProjetil2.tag==“Spaw2”)//左
{
GameObject tiro=实例化(Projetil,SpawnProjetil2.transform.position,SpawnProjetil2.transform.rotation);
Rigidbody rigiProj=tiro.GetComponent();
rigiProj.velocity=SpawnProjetil2.transform.forward*ProjetVelocity*Time.deltaTime;
}
如果(SpawnProjetil3.tag==“Spaw3”)//在后面
{
GameObject tiro=实例化(Projetil,SpawnProjetil3.transform.position,SpawnProjetil3.transform.rotation);
Rigidbody rigiProj=tiro.GetComponent();
rigiProj.velocity=SpawnProjetil3.transform.forward*ProjetVelocity*Time.deltaTime;
}
如果(SpawnProjetil4.tag==“Spaw4”)//前面
{
GameObject tiro=实例化(Projetil,SpawnProjetil4.transform.position,SpawnProjetil4.transform.rotation);
Rigidbody rigiProj=tiro.GetComponent();
rigiProj.velocity=SpawnProjetil4.transform.forward*ProjetVelocity*Time.deltaTime;
}
销毁(其他游戏对象);
}

你的答案似乎有很多重复的代码。我们可以用它来清理一下

if (other.transform.tag == "projetil")
{
    List<GameObject> tiros = new List<GameObject>
    {
        Instantiate(Projetil, SpawnProjetil1.transform.position, SpawnProjetil1.transform.rotation),
        Instantiate(Projetil, SpawnProjetil2.transform.position, SpawnProjetil2.transform.rotation),
        Instantiate(Projetil, SpawnProjetil3.transform.position, SpawnProjetil3.transform.rotation),
        Instantiate(Projetil, SpawnProjetil4.transform.position, SpawnProjetil4.transform.rotation),
    };

    foreach (GameObject tiro in tiros)
    {
        Rigidbody rigiProj = tiro.GetComponent<Rigidbody>();
        rigiProj.velocity = tiro.transform.forward * ProjetVelocity * Time.deltaTime;
    }
}
if(other.transform.tag==“projetil”)
{
List tiros=新列表
{
实例化(Projetil、SpawnProjetil1.transform.position、SpawnProjetil1.transform.rotation),
实例化(Projetil、SpawnProjetil2.transform.position、SpawnProjetil2.transform.rotation),
实例化(Projetil、SpawnProjetil3.transform.position、SpawnProjetil3.transform.rotation),
实例化(Projetil、SpawnProjetil4.transform.position、SpawnProjetil4.transform.rotation),
};
foreach(tiros中的游戏对象tiro)
{
Rigidbody rigiProj=tiro.GetComponent();
rigiProj.velocity=tiro.transform.forward*ProjetVelocity*Time.deltaTime;
}
}

这样,您就不必检查生成的投射物的标记,因为这些标记永远不会更改。

您的子弹是否有处理其移动的脚本?如果是的话,你能发布代码吗?@Kaynn不,没有。我只有一个,它连接在射出子弹的物体上。你能移动子弹吗?他们是否使用应用恒定变换转换的脚本?还是用刚体?