我正在使用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;
答案 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