Borrowing it
Nothing to install: this file belongs to hhhh124hhhh/godot-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/hhhh124hhhh/godot-mcp/main/.claude/skills/godot-skills/sub-skills/godot-camera-system/SKILL.mdgit clone --depth 1 https://github.com/hhhh124hhhh/godot-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/hhhh124hhhh/godot-mcp/godot-camera-system)<a href="https://agentmods.dev/skills/hhhh124hhhh/godot-mcp/godot-camera-system"><img src="https://agentmods.dev/badge/skills/hhhh124hhhh/godot-mcp/godot-camera-system/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/hhhh124hhhh/godot-mcp/godot-camera-system"><img src="https://agentmods.dev/badge/skills/hhhh124hhhh/godot-mcp/godot-camera-system.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00037 | $0.04098 |
| Opus 5 | $0.00018 | $0.02049 |
| Sonnet 5 | $0.00007 | $0.00820 |
| Haiku 4.5 | $0.00004 | $0.00410 |
Grade A, and why
godot-camera-system scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 465 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Godot 2D相机系统专家技能
重要提示: 本技能专门解决Godot 2D游戏中的相机配置和角色显示问题,基于 Godot 4.5 最佳实践。 特别适用于格斗游戏、平台游戏、多人游戏等需要复杂相机管理的场景。
技能概述
godot-camera-system 是专门用于Godot 2D游戏相机系统配置和优化的智能化技能,能够根据用户需求自动实现多角色相机管理、视野控制、平滑跟随、动态视角切换等完整的相机系统解决方案。
核心功能
📷 多角色相机管理
- 智能跟随: 自动计算多个角色的最佳视野
- 焦点切换: 动态切换相机焦点目标
- 边界适应: 智能调整相机边界以适应所有角色
- 群组管理: 支持角色群组的统一相机控制
🎬 平滑跟随系统
- 插值算法: 使用lerp实现平滑的相机移动
- 速度控制: 可配置的跟随速度和响应性
- 预测跟随: 基于角色速度的前瞻性相机调整
- 弹性效果: 自然的弹性跟随效果
🖼️ 视野控制
- 缩放管理: 动态调整相机缩放以适应场景
- 边界限制: 设置相机移动范围防止越界
- 视口适配: 自动适配不同屏幕分辨率
- 安全区域: 确保重要内容始终在视野内
🎯 动态视角系统
- 状态驱动: 基于游戏状态的相机行为切换
- 动画集成: 与角色动画系统深度集成
- 特效支持: 震动、缩放、旋转等相机特效
- 场景切换: 流畅的场景间相机过渡
使用方法
格斗游戏相机系统
用户: "我需要为格斗游戏配置双人相机系统"
系统: 自动实现:
- 双角色中点跟随算法
- 动态视野调整
- 攻击时的镜头特效
- 角色分离时的智能处理
平台游戏相机
用户: "为平台跳跃游戏创建跟随相机"
系统: 智能生成:
- 垂直跟随系统
- 平台边界限制
- 跳跃时的预测跟随
- 掉落检测和救援机制
多人游戏相机
用户: "为4人合作游戏配置相机系统"
系统: 全面开发:
- 4人位置的最优视野计算
- 动态缩放以包含所有玩家
- 玩家分散时的处理策略
- 领导者跟随模式
相机系统实现
🎮 格斗游戏相机管理器
# 格斗游戏专用相机系统
class_name FightingGameCameraSystem extends Node
@export var camera: Camera2D
@export var player1: Node2D
@export var player2: Node2D
# 相机参数
@export var follow_speed: float = 5.0
@export var base_zoom: float = 1.0
@export var max_distance: float = 400.0
@export var min_zoom: float = 0.8
@export var max_zoom: float = 1.5
# 动画特效参数
@export var shake_intensity: float = 5.0
@export var shake_duration: float = 0.3
func _ready():
_setup_camera()
_connect_player_signals()
func _setup_camera():
if not camera:
camera = Camera2D.new()
add_child(camera)
# 配置基础属性
camera.position_smoothing_enabled = true
camera.position_smoothing_speed = follow_speed
# 设置边界限制
camera.limit_left = -1024
camera.limit_right = 1024
camera.limit_top = -600
camera.limit_bottom = 600
func _process(delta):
if player1 and player2:
_update_camera_follow(delta)
func _update_camera_follow(delta: float) -> void:
# 计算两个角色的中点
var center_point = (player1.global_position + player2.global_position) * 0.5
var distance = player1.global_position.distance_to(player2.global_position)
# 动态调整缩放
var target_zoom = _calculate_dynamic_zoom(distance)
camera.zoom = camera.zoom.lerp(Vector2(target_zoom, target_zoom), follow_speed * delta * 0.5)
# 平滑跟随中点
var target_position = center_point + Vector2(0, -100) # 向上偏移
camera.global_position = camera.global_position.lerp(target_position, follow_speed * delta)
func _calculate_dynamic_zoom(distance: float) -> float:
# 根据角色距离动态调整缩放
var normalized_distance = clamp(distance / max_distance, 0.0, 1.0)
return lerp(min_zoom, max_zoom, normalized_distance)
# 特效系统
func play_hit_effect(hit_position: Vector2):
# 攻击命中时的相机震动
_start_camera_shake(shake_intensity, shake_duration)
func _start_camera_shake(intensity: float, duration: float):
var tween = create_tween()
var original_position = camera.offset
# 震动效果
for i in range(5):
var random_offset = Vector2(
randf_range(-intensity, intensity),
randf_range(-intensity, intensity)
)
tween.tween_property(camera, "offset", random_offset, duration * 0.1)
tween.tween_property(camera, "offset", original_position, duration * 0.1)
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 465 lines · 37 tokens per session scan A 7204aaca38ca
godot-camera-system is a skill published in the GitHub repository hhhh124hhhh/godot-mcp (42 stars, last pushed 9mo ago), licensed MIT. It adds 37 tokens to every session and 4,098 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
gameobject-component-destroy
Destroy one or more Components from a target GameObject. Missing (null) components are skipped — they cannot be destroyed. Use 'gameobject-find' and 'gameobject-component-get' to identify the components first.
unity-version-split
Split a C# file into Unity 6.5+ and pre-Unity 6.5 variants. Use when a file needs different implementations for different Unity versions due to API changes (e.g., EntityId vs int, GetEntityId vs GetInstanceID).
godot-signals-groups
Build event-driven, decoupled Godot 4.7 gameplay with signals and node groups: declare and emit custom signals, connect with Callables (incl. bind/one-shot), and broadcast to many nodes via groups and callgroup. Use when wiring node communication in a Godot project, replacing tight references with signals…
unity-addressables
Manage Addressables groups, entries, profiles and content builds (com.unity.addressables, reflection-based).
motion
How an agent turns a character mesh into a usable animated FBX — and how to judge whether the result is shippable.
playtest-report
Generates a structured playtest report template or analyzes existing playtest notes into a structured format. Use this to standardize playtest feedback collection and analysis.