一键导入
godot-sync-camera-positions
用于 Godot 中背景图层或元素在运行时跟随摄像机,但在编辑器中显示错误位置的情况。 检测摄像机跟随模式,并将编辑器位置同步为典型的运行时状态。 使编辑器预览准确显示玩家在游戏中看到的画面。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
用于 Godot 中背景图层或元素在运行时跟随摄像机,但在编辑器中显示错误位置的情况。 检测摄像机跟随模式,并将编辑器位置同步为典型的运行时状态。 使编辑器预览准确显示玩家在游戏中看到的画面。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
当 Godot 代码中存在通过 get_node()、get_parent() 或直接引用产生的紧耦合依赖时使用。 检测耦合模式并将其转换为基于 Signal 的通信方式。组件变得独立、可测试且可复用。 在改进架构的同时精确保留原有行为。
当 Godot 代码中存在相互冲突的操作导致未定义行为时使用。检测同一属性在多处设置 (_ready、_process、代码+编辑器)、同一 Signal 多次连接、冲突的物理模式、 竞争的动画等问题。自动通过明确的所有权归属解决冲突。
用于创建带有自定义面板、停靠栏和工具的 Godot 编辑器插件。生成 plugin.cfg 配置、 EditorPlugin 脚本模板、自定义编辑器 UI 组件,并集成 ProjectSettings。按照 Godot 4.x 最佳实践创建完整的插件结构。
当 Godot 代码中存在硬编码的游戏数据(如 const 数组、字典或内嵌值)时使用。检测内联数据 如敌人属性、物品定义、关卡配置等。自动提取为 .tres Resource 文件,使数据在编辑器中 可见、易于修改,并支持数据驱动的设计。
当构建 Godot 功能时,代码使用 .new() 创建节点而非使用场景时触发。 检测 Timer.new()、Area2D.new()、Sprite2D.new() 等代码创建的对象。 自动生成 .tscn 场景文件,更新父脚本使用 @onready 引用,并创建可复用的组件库。
当 Godot 项目在编辑器(.tscn)和代码(.gd)之间存在位置冲突、相机跟随背景、 或运行时位置与编辑器预览不匹配时使用。编排所有 3 个位置同步子技能: sync-static-positions、sync-camera-positions 和 sync-parallax。 每个操作针对特定的位置冲突类型。
| name | godot-sync-camera-positions |
| version | 3.0.0 |
| displayName | 同步摄像机跟随位置 |
| description | 用于 Godot 中背景图层或元素在运行时跟随摄像机,但在编辑器中显示错误位置的情况。 检测摄像机跟随模式,并将编辑器位置同步为典型的运行时状态。 使编辑器预览准确显示玩家在游戏中看到的画面。 |
| author | Asreonn |
| license | MIT |
| category | game-development |
| type | tool |
| difficulty | intermediate |
| audience | ["developers"] |
| keywords | ["godot","camera-follow","editor-preview","background-layers","runtime-position","camera2d","level-design","wysiwyg"] |
| platforms | ["macos","linux","windows"] |
| repository | https://github.com/asreonn/godot-superpowers |
| homepage | https://github.com/asreonn/godot-superpowers#readme |
| permissions | {"filesystem":{"read":[".gd",".tscn"],"write":[".tscn"]},"git":true} |
| behavior | {"auto_rollback":true,"validation":true,"git_commits":true} |
| outputs | 同步后的摄像机感知位置、更新的 .tscn 文件、运行时注释、git 提交 |
| requirements | Git 仓库、Godot 4.x |
| execution | 自动检测并计算编辑器位置 |
| integration | 属于 godot-fix-positions 编排器的一部分,可与 godot-sync-parallax 配合使用 |
编辑器预览应展示真实的游戏画面。 跟随摄像机的元素需要特殊处理。
找到类似这样的模式:
# background.gd
extends Sprite2D
func _process(delta):
position = camera.position # 运行时跟随摄像机
# background.tscn
[node name="Background" type="Sprite2D"]
position = Vector2(0, 0) # 编辑器中显示在原点
# 结果:编辑器中背景在 (0,0)
# 但在游戏中,背景在摄像机位置(例如 500, 300)
# 关卡设计师看到的是错误的画面!
解决为:
# background.gd(未修改 - 运行时行为相同)
func _process(delta):
position = camera.position
# background.tscn(更新为显示典型的摄像机位置)
[node name="Background" type="Sprite2D"]
position = Vector2(500, 300) # 摄像机起始位置
# 结果:编辑器预览现在显示真实的游戏画面
识别摄像机跟随代码:
func _process(delta):
position = camera.position # 摄像机跟随
position = camera.global_position
position = get_viewport().get_camera_2d().position
func _process(delta):
position = player.position # 玩家跟随摄像机
# 背景跟随玩家 → 实际上跟随摄像机
func _process(delta):
position = camera.position + offset # 带偏移的摄像机跟随
position = player.position + Vector2(0, -100)
func _process(delta):
position = position.lerp(camera.position, 0.1) # 平滑摄像机跟随
跟随摄像机以实现无限滚动效果的背景。
停留在摄像机位置的世界空间 UI。
想要看到游戏过程中区域的实际外观。
任何相对于摄像机定位的元素。
将编辑器位置设为摄像机的起始位置。
最适用于: 大多数摄像机跟随元素。
# background.gd
func _process(delta):
position = camera.position
# 确定摄像机起始位置(从关卡场景或项目设置)
# 将 background.tscn 的 position 更新为 camera_start_position
将编辑器位置设为玩家出生点 + 偏移。
最适用于: 带偏移跟随玩家的元素。
# cloud.gd
func _process(delta):
position = player.position + Vector2(0, -200) # 在玩家上方
# 找到玩家出生点
# 将 cloud.tscn 的 position 更新为 player_spawn + Vector2(0, -200)
在场景中添加元数据说明运行时行为。
最适用于: 复杂的摄像机跟随逻辑。
# .tscn 中的元数据
[node name="Background"]
metadata/_editor_note = "Runtime: follows camera at camera.position"
识别摄像机跟随模式:
# 摄像机跟随(会同步这些)
position = camera.position
position = $"/root/Main/Camera".position
position = player.position # 如果玩家有摄像机
position.x = camera.position.x # 水平跟随
跳过非摄像机模式:
# 非摄像机跟随(跳过这些)
position = target_position # 通用目标
position = waypoints[index] # 路径点跟随
position = mouse_position # 鼠标跟随
之前:
# background.gd
extends Sprite2D
@onready var camera = $"/root/Main/Camera2D"
func _process(delta):
position = camera.position
# background.tscn
[node name="Background" type="Sprite2D"]
position = Vector2(0, 0)
texture = preload("res://assets/sky.png")
编辑器视图: 背景在原点 (0, 0) - 错误! 游戏视图: 背景在摄像机位置 (640, 360) - 正确!
同步后:
# background.gd(未修改)
extends Sprite2D
@onready var camera = $"/root/Main/Camera2D"
func _process(delta):
# 运行时:跟随摄像机位置
position = camera.position
# background.tscn(已更新)
[node name="Background" type="Sprite2D"]
position = Vector2(640, 360) # 摄像机起始位置
texture = preload("res://assets/sky.png")
编辑器视图: 背景在 (640, 360) - 与游戏画面一致! 游戏视图: 背景在摄像机位置 - 与之前相同!
之前:
# cloud.gd
extends Sprite2D
func _process(delta):
position = player.position + Vector2(0, -200)
# cloud.tscn
[node name="Cloud" type="Sprite2D"]
position = Vector2(0, 0)
同步后:
# cloud.gd(未修改)
func _process(delta):
# 运行时:在玩家上方 200 像素
position = player.position + Vector2(0, -200)
# cloud.tscn(更新为显示在玩家出生点上方)
[node name="Cloud" type="Sprite2D"]
position = Vector2(320, -20) # 玩家出生在 (320, 180)
# 搜索 Camera2D 节点
grep -r "type=\"Camera2D\"" scenes/
# 在摄像机的父场景中查找位置值
# 检查视口大小(摄像机通常从中心开始)
# 默认:1280x720 → 摄像机在 (640, 360)
如果检测不确定,询问: "你的摄像机从哪里开始?(例如,视口中心、玩家位置)"
可搭配使用:
以下情况不要同步:
func _process(delta):
position.x = camera.position.x
# 垂直位置固定,水平跟随摄像机
同步:将编辑器 x 设为摄像机起始 x,保持 y 不变。
func _process(delta):
position = position.lerp(camera.position, smoothness)
同步:将编辑器位置设为摄像机起始位置(最终位置)。
func _process(delta):
position = camera.position.clamp(min_bounds, max_bounds)
同步:将编辑器位置设为限制后的摄像机起始位置。
同步后验证:
# 运行时行为:
# - 在 _process 中跟随 camera.position
# - 编辑器位置设为摄像机起始位置:(640, 360)
# - 游戏过程中,位置将完全匹配摄像机
清晰的文档可以避免代码和编辑器位置有意不同时的困惑。
智能检测最大限度地减少所需的用户输入。