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

如何在Godot中让FPS枪械始终指向屏幕中心?

在Godot中实现枪械始终指向屏幕中心的方法

核心思路是将屏幕中心坐标转换为世界空间中的目标点,再让枪械节点朝向该目标点,确保子弹从枪械射出时对准屏幕中心。

步骤1:获取屏幕中心对应的世界坐标

利用相机的project_position方法,把屏幕中心的2D坐标转换为3D世界坐标。屏幕中心的坐标可通过视口尺寸计算得到。

示例代码(挂载在枪械节点上):

var camera = get_tree().get_root().get_camera()
if not camera:
    return

var viewport_size = get_viewport().get_size()
var screen_center = viewport_size / 2
# 传入足够大的深度值,保证目标点处于场景有效范围内
var world_target = camera.project_position(screen_center, 1000.0)

步骤2:让枪械朝向目标点

使用节点的look_at方法,让枪械朝向计算出的世界目标点,同时指定向上轴避免翻转。

完整的物理帧更新函数示例:

func _physics_process(delta):
    var camera = get_tree().get_root().get_camera()
    if not camera:
        return
    
    var viewport_size = get_viewport().get_size()
    var screen_center = viewport_size / 2
    var world_target = camera.project_position(screen_center, 1000.0)
    
    # 保持枪械向上轴与世界空间Y轴一致,防止异常旋转
    look_at(world_target, Vector3.UP)

额外注意事项

  • 若枪械由多个子节点组成(如枪身、枪管),需将旋转逻辑应用在父节点上,避免部件错位。
  • 若相机是玩家节点的子节点,直接引用玩家节点下的相机变量会比全局获取更高效。
  • 可在视口GUI层绘制一个准星,方便直观验证枪械是否对准屏幕中心。
  • 子弹发射时,直接使用枪械的global_transform.basis.z作为发射方向(或根据枪管局部方向微调),确保子弹沿枪械指向路径射出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:48:19