C# 如何同时向不同方向发射多发子弹?
我想知道我怎么能同时向不同的方向发射多发子弹 我有这个游戏对象,你可以在下面的图片中看到,它有4个繁殖点,可以喷射子弹 所以当这个游戏物体被一个特定的敌人击中时,它会同时向四个方向射击。我已经试过类似的方法了,但不起作用。我对Unity很陌生。此脚本已附加到此游戏对象C# 如何同时向不同方向发射多发子弹?,c#,unity3d,C#,Unity3d,我想知道我怎么能同时向不同的方向发射多发子弹 我有这个游戏对象,你可以在下面的图片中看到,它有4个繁殖点,可以喷射子弹 所以当这个游戏物体被一个特定的敌人击中时,它会同时向四个方向射击。我已经试过类似的方法了,但不起作用。我对Unity很陌生。此脚本已附加到此游戏对象 using System.Collections; using System.Collections.Generic; using UnityEngine; public class DanoCruz : MonoBehavi
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不,没有。我只有一个,它连接在射出子弹的物体上。你能移动子弹吗?他们是否使用应用恒定变换转换的脚本?还是用刚体?