You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity俯视角射击游戏子弹无限向鼠标方向移动问题求助

解决Unity俯视角子弹朝鼠标方向无限运动的问题

你的问题出在Vector2.MoveTowards方法上——它的作用是让物体朝着指定目标点移动,一旦到达目标就会停止,这就是子弹到鼠标位置就不动的原因。要实现朝鼠标方向无限运动,只需要改成按固定方向向量持续推进即可,修改步骤如下:

  1. 归一化方向向量:原来的方向向量是子弹到鼠标位置的距离向量,直接使用会导致子弹速度随鼠标距离变化(离得越远速度越快),归一化后方向向量长度固定为1,能保证速度稳定。
  2. 替换移动逻辑:把MoveTowards改成按方向向量持续累加位置。

修改后的完整代码:

public class Shoot : MonoBehaviour
{
    public int speed;
    Vector2 moveDirection; // 存储归一化后的移动方向

    void Awake()
    {
        // 获取鼠标的世界坐标,修正Z轴避免2D视角偏差
        Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        mouseWorldPos.z = 0;

        // 计算并归一化移动方向
        moveDirection = (mouseWorldPos - transform.position).normalized;

        // 保留原有旋转逻辑,让子弹朝向鼠标方向
        float angle = Vector2.SignedAngle(Vector2.up, moveDirection);
        transform.eulerAngles = new Vector3(0, 0, angle);
    }

    void Update()
    {
        // 按固定方向持续移动
        transform.position += (Vector3)moveDirection * speed * Time.deltaTime;
    }
}

额外建议:为了避免子弹一直存在占用资源,可以在Awake里添加Destroy(gameObject, 5f);,让子弹5秒后自动销毁;或者给子弹加碰撞组件,检测到碰撞后销毁。

内容的提问来源于stack exchange,提问作者Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:08:12