首页 > 解决方案 > 敌人在玩家位置射击

问题描述

我正在创建一个简单的 Bullet Hell 游戏,并且正在测试一些东西。我希望敌人的子弹在玩家开火后立即射向玩家。

我尝试了一堆四元数方法,包括 LookTowards、FromToRotation、AngleAxis 等,但似乎都没有。

void Start () {
    ...
    StartCoroutine("Shooting");
}

IEnumerator Shooting()
{
    while(dead != true)
    {

        Vector3 position = new Vector3(rb.position.x, rb.position.y - 5f, 0);
        Instantiate(Ebullet, position, Quaternion.Euler(0, 0, player.transform.position.x));
        yield return new WaitForSeconds(t);
    }
}

我预计子弹会直接移动到玩家的最后一个已知位置,而不是敌人以错误的角度射击,并且每次玩家移动时,角度都会根据玩家的左右移动而改变。

标签: c#unity3d

解决方案


由于您正在制作 2D 游戏,而不是:

Instantiate(Ebullet, position, Quaternion.Euler(0, 0, player.transform.position.x);

尝试:

Vector3 direction = player.transform.position-transform.position;
direction .Normalize();
float rotation = Mathf.Atan2(direction .y, direction .x) * Mathf.Rad2Deg;
Instantiate(Ebullet, position, Quaternion.Euler(0f, 0f, rotation - 90));

推荐阅读