炮塔射击

时间:2017-03-27 12:00:18

标签: c# unity3d

您好我正在制作炮塔射击剧本。我的子弹射击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);
}

2 个答案:

答案 0 :(得分:1)

您的代码无法正常运行。您需要从GameObject Bullet中移除ShootFunction()参数,因为参数隐藏this.Bullet。 Unity3D还会打印警告信息尝试调用方法:无法调用Shoot.ShootFunction。:你cannot use InvokeRepeating with method parameters

现在可行:

example

我使用了分配给public GameObject Bullet的子弹预制件。 public GameObject Enemy还从检查员处分配了一个Cube GameObject。

Full project

但你仍然需要考虑如何回收并最终销毁子弹:在你的代码中,你只是Instantiate子弹,但什么时候会被销毁?

答案 1 :(得分:1)

要知道您正在尝试做什么完全并不容易。 但这至少会解决大多数问题。

  1. 您必须始终将矢量标准化,然后才能将其用作 方向。方向是一个幅度为1的向量。如果你 简单地从另一个地方减去一个你没有得到的地点 归一化矢量。
  2. 我不确定你的ShootFunction是不是 允许有参数。我不这么认为。访问您的会员 (子弹)直接。

  3. 我还在您的实例化位置删除了一个偏移量。您可能需要重新添加它。但我认为没有必要。

  4. 样品

    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);
    }