Unity俯视角射击游戏子弹无限向鼠标方向移动问题求助
解决Unity俯视角子弹朝鼠标方向无限运动的问题
你的问题出在Vector2.MoveTowards方法上——它的作用是让物体朝着指定目标点移动,一旦到达目标就会停止,这就是子弹到鼠标位置就不动的原因。要实现朝鼠标方向无限运动,只需要改成按固定方向向量持续推进即可,修改步骤如下:
- 归一化方向向量:原来的方向向量是子弹到鼠标位置的距离向量,直接使用会导致子弹速度随鼠标距离变化(离得越远速度越快),归一化后方向向量长度固定为1,能保证速度稳定。
- 替换移动逻辑:把
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
相关产品推荐
相关产品推荐

