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

如何让对象朝向鼠标位置旋转?Godot子弹旋转失效问题求助

解决子弹旋转失效问题

核心问题分析

  • 原子弹脚本中每帧调用look_at(get_global_mouse_position())会让子弹持续追踪实时鼠标位置,而非保持飞行方向固定旋转,逻辑错误且易导致旋转异常。
  • 未在子弹生成阶段直接锁定朝向,反而依赖帧更新,既浪费性能又不符合射击逻辑。

修正方案

1. 修改玩家脚本,生成子弹时直接设置旋转

在disparar函数中添加旋转设置,让子弹从发射瞬间就朝向目标方向:

@onready var markPos = $pistola.get_child(0)
var _bullet := preload("res://Scenes/balas.tscn")

func _unhandled_input(event):
    if Input.is_action_just_pressed("disparar"):
        disparar()

func disparar(): # Shoot -
    var ratonD = get_global_mouse_position()
    var new_b = _bullet.instantiate()
    new_b.global_position = markPos.global_position
    new_b.dirct = (ratonD - new_b.global_position).normalized()
    # 直接设置子弹全局旋转朝向目标方向
    new_b.global_rotation = new_b.dirct.angle()
    get_parent().add_child(new_b)

2. 简化子弹脚本,移除多余的帧更新旋转逻辑

删除子弹脚本中每帧执行的look_at调用,仅保留移动逻辑:

var velocidad_b = 750
var damage: float = 10.0
var dirct = Vector2.ZERO

func _process(delta):
    position += dirct * velocidad_b * delta

额外注意事项

  • 若子弹Sprite显示方向与预期不符(如默认朝上但需朝右),可在Sprite2D属性中调整Rotation Degrees偏移值,或在代码中给global_rotation加上PI/2(因Vector2.angle()以右为0度顺时针旋转,多数素材默认朝上)。
  • 检查子弹节点的**轴心点(Pivot)**是否设为Center,否则旋转会出现偏移,在Sprite2D的Inspector面板中可直接设置。
  • 若坚持使用look_at,只需在生成子弹时调用一次new_b.look_at(ratonD),而非每帧执行,避免子弹飞行中追踪鼠标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:58:10