您好我正在制作炮塔射击剧本。我的子弹射击boet不会进入敌人的方向。有些事情是错的或缺失的,我无法弄清楚是什么。我已经查找了很多解决方案,但无法找到最新的或好的解决方案。
编辑: 我的敌人被实例化,所以他们有多个。那会成为问题的一部分吗?如果不是,我需要提供更多细节?我是新来的网站所以请原谅我,如果我做错了。
public GameObject Enemy;
public GameObject Bullet;
public float bulletForce = 100f;
private Vector3 direction;
// Use this for initialization
void Start ()
{
ShootFunctionRepeat();
}
// Update is called once per frame
void Update ()
{
direction = Enemy.transform.position - this.transform.position;
}
void ShootFunctionRepeat()
{
InvokeRepeating("ShootFunction", 0.0f, 1.0f);
}
void ShootFunction(GameObject Bullet)
{
GameObject temp = Instantiate(Bullet, this.transform.position + direction.normalized, Quaternion.identity);
temp.GetComponent<Rigidbody>().AddForce(direction.normalized * bulletForce);
}
答案 0 :(得分:1)
您的代码无法正常运行。您需要从GameObject Bullet
中移除ShootFunction()
参数,因为参数隐藏this.Bullet
。 Unity3D还会打印警告信息尝试调用方法:无法调用Shoot.ShootFunction。:你cannot use InvokeRepeating
with method parameters。
现在可行:
我使用了分配给public GameObject Bullet
的子弹预制件。 public GameObject Enemy
还从检查员处分配了一个Cube GameObject。
但你仍然需要考虑如何回收并最终销毁子弹:在你的代码中,你只是Instantiate
子弹,但什么时候会被销毁?
答案 1 :(得分:1)
要知道您正在尝试做什么完全并不容易。 但这至少会解决大多数问题。
我不确定你的ShootFunction是不是 允许有参数。我不这么认为。访问您的会员 (子弹)直接。
我还在您的实例化位置删除了一个偏移量。您可能需要重新添加它。但我认为没有必要。
样品
public GameObject Enemy;
public GameObject Bullet;
public float bulletForce = 100f;
private Vector3 direction;
// Use this for initialization
void Start ()
{
ShootFunctionRepeat();
}
// Update is called once per frame
void Update ()
{
direction = (Enemy.transform.position - this.transform.position).normalized;
}
void ShootFunctionRepeat()
{
InvokeRepeating("ShootFunction", 0.0f, 1.0f);
}
void ShootFunction()
{
GameObject temp = Instantiate(Bullet, this.transform.position, Quaternion.identity);
temp.GetComponent<Rigidbody>().AddForce(direction.normalized * bulletForce);
}