子弹仅向一个方向射出

问题描述 投票:0回答:2

我正在使用 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 个新错误:

Assets/Scripts/Level 2/HammerScript.cs(89,64):错误CS1502:“bulletScript.SetEnemy(UnityEngine.GameObject)”的最佳重载方法匹配有一些无效参数

Assets/Scripts/Level 2/HammerScript.cs(89,64):错误 CS1503:参数“#1”无法将“HammerScript”表达式转换为“UnityEngine.GameObject”类型

c# unity-game-engine
2个回答
2
投票

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

好吧,除非

bulletSpeed
根据敌人的方向而为正或负,否则每颗子弹都会具有相同的速度和方向。在您的代码中,子弹的速度根本不取决于敌人的方向。

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

您可以通过在

SetEnemy
类中使用一个
Enemy
方法将
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
设置为与敌人有关的内容(即
this.parent
)。


0
投票

您当前的实现仅允许子弹进入一个方向。假设您的子弹速度始终为正。

如果您考虑与该基本方向成角度

alpha
的另一个方向,那么您需要创建一个旋转向量,可以这样做:

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

还要考虑到

alpha
必须以弧度给出,如果您确实想使用度数,请先计算弧度:

alpha = (degrees / 180) * 90
© www.soinside.com 2019 - 2024. All rights reserved.