我正在使用 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”类型
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
)。
您当前的实现仅允许子弹进入一个方向。假设您的子弹速度始终为正。
如果您考虑与该基本方向成角度
alpha
的另一个方向,那么您需要创建一个旋转向量,可以这样做:
new Vector2(bulletSpeed * Mathf.Cos(alpha), bulletSpeed * Mathf.Sin(alpha));
还要考虑到
alpha
必须以弧度给出,如果您确实想使用度数,请先计算弧度:
alpha = (degrees / 180) * 90