c# - 敌人在玩家位置射击
问题描述
我正在创建一个简单的 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);
}
}
我预计子弹会直接移动到玩家的最后一个已知位置,而不是敌人以错误的角度射击,并且每次玩家移动时,角度都会根据玩家的左右移动而改变。
解决方案
由于您正在制作 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));
推荐阅读
- regex - CLion 正则表达式用找到的字符串替换模式
- slack - 通过 Slack Outgoing Webhooks 发送的消息中的 URI 用角括号括起来
- jquery - 如果任何字段为空,如何禁用提交按钮?
- java - 当我的组织 vpn 连接时,IntelliJ 没有连接到互联网?
- php - proxy_fcgi:错误 AH01071:出现错误“无法打开主脚本:/var/www/html/laravel/public/index.php(权限被拒绝)”
- python - 身份验证问题 - request.user 和 request.user.is_authenticated 未设置
- microsoft-information-protection - Microsoft 信息保护 SDK 1.7.133 - LoadLibrary 失败
- excel - 使用 VBA for Excel 生成的数字数据验证列表,其中小数点分隔符为逗号
- bash - 使用 for 循环计算文本中来自 csv 的字符串的出现次数,并将其存储为 bash 中的新列
- angular - 角度造型