子弹只射击一个方向

时间:2014-07-08 22:01:44

标签: c# unity3d unityscript

我正在使用Unity制作2D平台游戏,但我遇到了一个小问题。我有敌人向玩家射击子弹。但是,无论敌人面向哪个方向,子弹只向一个方向射击。

在我的敌人脚本中,我有这个:

Instantiate(bullet, spawnPosition.position, Quaternion.identity);

在我的子弹脚本中我有这个

rigidbody2D.velocity = new Vector2(bulletSpeed,0);

如果可以,请帮忙。 我理解为什么会这样,但我无法找到解决方案。要更新我的问题,我希望能够检查敌人的方向,以便我可以将子弹速度更改为正/负以匹配方向。由于会有这种类型的多个敌人,我不知道该怎么做。

public class bulletScript : MonoBehaviour {

    // Use this for initialization
    private float bulletSpeed;
    GameObject parent;

    private Vector3 theScale;

    void Start () {

        rigidbody2D.velocity = new Vector2(bulletSpeed,0);
    }

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

    //  if(transform.localScale.x < 0) bulletSpeed = -100;
    //  if(transform.localScale.x > 0) bulletSpeed = 100;
    }
    public void SetEnemy(GameObject obj)
    {
        parent = obj;
    }

然后在HammerScript.cs

    public class HammerScript : MonoBehaviour {


    public bulletScript bullet;
    public Transform spawnPosition;


    void FixedUpdate () 
    {

        instantiate(bullet, spawnPosition.position, Quaternion.identity);
        ((bulletScript)bullet).SetEnemy(this);                  
    }




    }

2个新错误: 1-Assets / Scripts / Level 2 / HammerScript.cs(89,64):错误CS1502:bulletScript.SetEnemy(UnityEngine.GameObject)' has some invalid arguments 2-Assets/Scripts/Level 2/HammerScript.cs(89,64): error CS1503: Argument#1&#39;的最佳重载方法匹配无法转换HammerScript' expression to type UnityEngine.GameObject&#39;

2 个答案:

答案 0 :(得分:2)

the bullets are only shooting in one direction regardless of which direction the enemy is facing.

嗯,除非bulletSpeed取决于敌人的方向是正面还是负面,否则每个子弹都会有相同的速度和方向。在你的代码中,子弹的速度根本不依赖于敌人的指示。

你可以做的就是在子弹中保留它所来自的敌人的参考,然后根据敌人的信息设置速度。

您可以通过SetEnemy方法在Enemy课程中将[{1}}作为参数进行操作,然后您可以立即拨打Bullet ((bulletScript)bullet).SetEnemy(this);致电。

因此,您的Instantiate文件应如下所示:

HammerScript

然后,在public class HammerScript : MonoBehaviour { public bulletScript bullet; public Transform spawnPosition; void FixedUpdate () { instantiate(bullet, spawnPosition.position, Quaternion.identity); ((bulletScript)bullet).SetEnemy(this); } } 课程中,您可以拥有以下内容:

Bullet

然后在子弹脚本中,您将class bulletScript : MonoBehavior { GameObject parent; public void SetEnemy(GameObject obj) { parent = e; } // ... whatever else you have, including the method that sets the velocity } 设置为与敌人有关的事物(rigidbody2D.velocity)。

答案 1 :(得分:0)

您当前的实施仅允许子弹进入一个方向。让我们假设你的bulletSpeed总是积极的。

如果从该基本方向考虑角度alpha的另一个方向,则需要创建一个旋转的Vector,您可以这样做:

new Vector2(bulletSpeed * Mathf.Cos(alpha), bulletSpeed * Mathf.Sin(alpha));

还要考虑alpha必须以弧度给出,如果你真的想用度数先计算弧度:

alpha = (degrees / 180) * 90