gameplay-mechanics by pluginagentmarketplace/custom-plugin-game-developer
npx skills add https://github.com/pluginagentmarketplace/custom-plugin-game-developer --skill gameplay-mechanics┌─────────────────────────────────────────────────────────────┐
│ 动作 → 效果循环 │
├─────────────────────────────────────────────────────────────┤
│ 输入 处理 输出 反馈 │
│ ┌─────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │按下 │──────→│验证 │─────→│更新 │───→│视觉 │ │
│ │按钮 │ │& 执行 │ │状态 │ │音频 │ │
│ └─────┘ └─────────┘ └─────────┘ │触觉 │ │
│ └─────────┘ │
│ │
│ 时序要求: │
│ • 输入 → 响应: < 100毫秒 (感觉响应迅速) │
│ • 动画开始: < 50毫秒 (感觉瞬时) │
│ • 音频反馈: < 20毫秒 (与动作同步) │
└─────────────────────────────────────────────────────────────┘
反馈时序层级:
┌─────────────────────────────────────────────────────────────┐
│ 即时 (0-100毫秒): │
│ ├─ 按钮按下音效 │
│ ├─ 动画开始 │
│ ├─ 屏幕震动 │
│ └─ 控制器振动 │
│ │
│ 短期 (100毫秒-1秒): │
│ ├─ 伤害数字出现 │
│ ├─ 生命条更新 │
│ ├─ 敌人反应动画 │
│ └─ 粒子效果 │
│ │
│ 长期 (1秒+): │
│ ├─ 经验值/分数增加 │
│ ├─ 升级通知 │
│ ├─ 成就解锁 │
│ └─ 故事进度推进 │
└─────────────────────────────────────────────────────────────┘
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
// ✅ 生产就绪: 战斗状态机
public class CombatStateMachine : MonoBehaviour
{
public enum CombatState { Idle, Attacking, Blocking, Recovering, Staggered }
[Header("Combat Parameters")]
[SerializeField] private float attackDamage = 10f;
[SerializeField] private float attackRange = 2f;
[SerializeField] private float attackCooldown = 0.5f;
[SerializeField] private float blockDamageReduction = 0.7f;
[SerializeField] private float staggerDuration = 0.3f;
private CombatState _currentState = CombatState.Idle;
private float _stateTimer;
public event Action<CombatState> OnStateChanged;
public event Action<float> OnDamageDealt;
public event Action<float> OnDamageTaken;
public bool TryAttack()
{
if (_currentState != CombatState.Idle) return false;
TransitionTo(CombatState.Attacking);
StartCoroutine(AttackSequence());
return true;
}
private IEnumerator AttackSequence()
{
// 准备阶段
yield return new WaitForSeconds(0.1f);
// 有效命中帧
var hits = Physics.OverlapSphere(transform.position + transform.forward, attackRange);
foreach (var hit in hits)
{
if (hit.TryGetComponent<IDamageable>(out var target))
{
target.TakeDamage(attackDamage);
OnDamageDealt?.Invoke(attackDamage);
}
}
// 恢复阶段
yield return new WaitForSeconds(attackCooldown);
TransitionTo(CombatState.Idle);
}
public float TakeDamage(float damage)
{
float finalDamage = _currentState == CombatState.Blocking
? damage * (1f - blockDamageReduction)
: damage;
OnDamageTaken?.Invoke(finalDamage);
if (finalDamage > 5f) // 硬直阈值
{
TransitionTo(CombatState.Staggered);
StartCoroutine(RecoverFromStagger());
}
return finalDamage;
}
private void TransitionTo(CombatState newState)
{
_currentState = newState;
_stateTimer = 0f;
OnStateChanged?.Invoke(newState);
}
}
经济平衡公式:
┌─────────────────────────────────────────────────────────────┐
│ 收入 vs 支出: │
│ │
│ 每小时收入 = (敌人/小时 × 金币/敌人) + 被动收入 │
│ 每小时支出 = (升级 + 消耗品 + 死亡) │
│ │
│ 平衡比率: │
│ • < 0.8: 过于稀缺 (令人沮丧) │
│ • 0.8-1.2: 平衡 (有意义的选择) │
│ • > 1.2: 过于充裕 (没有紧张感) │
│ │
│ 示例耐力系统: │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 最大值: 100 │ 恢复: 20/秒 │ 命中时: +10 │ │
│ ├───────────────────────────────────────────────────────┤ │
│ │ 轻攻击: -10 │ 重攻击: -25 │ │
│ │ 闪避: -15 │ 格挡: -5/命中 │ │
│ │ 冲刺: -5/秒 │ 跳跃: -8 │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
进度曲线:
┌─────────────────────────────────────────────────────────────┐
│ 强度 │
│ ↑ │
│ │ ╱───── 后期游戏 │
│ │ ╱────╱ (缓慢,目标) │
│ │ ╱────╱ │
│ │ ╱────╱ │
│ │ ╱────╱ 中期游戏 │
│ │ ╱────╱ (稳定进展) │
│ │ ╱───╱ │
│ │╱ 早期游戏 (快速,吸引玩家) │
│ └────────────────────────────────────────────────→ 时间 │
│ │
│ 经验值曲线公式: │
│ 所需经验值(等级) = 基础经验值 × (等级 ^ 增长率) │
│ • 增长率 1.5: 平缓曲线 (休闲) │
│ • 增长率 2.0: 标准曲线 (平衡) │
│ • 增长率 2.5: 陡峭曲线 (硬核) │
└─────────────────────────────────────────────────────────────┘
// ✅ 生产就绪: 进度管理器
public class ProgressionManager : MonoBehaviour
{
[Header("Progression Config")]
[SerializeField] private int baseXP = 100;
[SerializeField] private float growthRate = 2.0f;
[SerializeField] private int maxLevel = 50;
private int _currentLevel = 1;
private int _currentXP = 0;
public event Action<int> OnLevelUp;
public event Action<int, int> OnXPGained; // 当前,所需
public int XPForLevel(int level)
{
return Mathf.RoundToInt(baseXP * Mathf.Pow(level, growthRate));
}
public void AddXP(int amount)
{
_currentXP += amount;
int required = XPForLevel(_currentLevel);
OnXPGained?.Invoke(_currentXP, required);
while (_currentXP >= required && _currentLevel < maxLevel)
{
_currentXP -= required;
_currentLevel++;
OnLevelUp?.Invoke(_currentLevel);
required = XPForLevel(_currentLevel);
}
}
public float GetProgressToNextLevel()
{
return (float)_currentXP / XPForLevel(_currentLevel);
}
}
平台游戏手感参数:
┌─────────────────────────────────────────────────────────────┐
│ 移动: │
│ • 行走速度: 5-8 单位/秒 │
│ • 奔跑速度: 10-15 单位/秒 │
│ • 加速度: 20-50 单位/秒² │
│ • 减速度: 30-60 单位/秒² (更干脆 = 更高) │
│ │
│ 跳跃: │
│ • 跳跃高度: 2-4 单位 │
│ • 跳跃时长: 0.3-0.5 秒 │
│ • 重力: 20-40 单位/秒² │
│ • 下落倍率: 1.5-2.5倍 (下落更快 = 操控更紧) │
│ │
│ 手感增强器: │
│ • 土狼时间: 0.1-0.15 秒 (离开边缘后仍可跳跃) │
│ • 跳跃缓冲: 0.1-0.15 秒 (提前输入跳跃) │
│ • 可变跳跃: 松开 = 较短跳跃 │
│ • 空中控制: 地面控制的 50-80% │
└─────────────────────────────────────────────────────────────┘
事件系统模式:
┌─────────────────────────────────────────────────────────────┐
│ 动作执行 │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 事件分发器 │ │
│ │ 造成伤害(数值, 位置, 类型) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ├──→ 视觉特效系统: 生成伤害数字 │
│ ├──→ 音频系统: 播放命中音效 │
│ ├──→ 用户界面系统: 更新生命条 │
│ ├──→ 摄像机系统: 屏幕震动 │
│ ├──→ 人工智能系统: 警戒附近敌人 │
│ └──→ 分析系统: 记录战斗事件 │
│ │
│ 优势: │
│ • 系统间无需直接引用 │
│ • 易于添加/移除观察者 │
│ • 同一事件触发多种效果 │
│ • 易于网络同步 (复制事件) │
└─────────────────────────────────────────────────────────────┘
快速平衡工作流:
┌─────────────────────────────────────────────────────────────┐
│ 1. 试玩测试 (15-30 分钟) │
│ → 观察玩家,记录卡点 │
│ │
│ 2. 分析 (5-15 分钟) │
│ → 感觉哪里不对?太简单/太难? │
│ → 检查遥测数据 │
│ │
│ 3. 调整 (5-10 分钟) │
│ → 一次只更改一个变量 │
│ → 记录更改 │
│ │
│ 4. 测试 (5 分钟) │
│ → 验证更改达到预期效果 │
│ │
│ 5. 重复 │
│ → 目标: 每小时 4-6 次迭代 │
└─────────────────────────────────────────────────────────────┘
平衡电子表格格式:
┌──────────┬────────┬─────────┬─────────┬──────────┐
│ 武器 │ 伤害 │ 速度 │ 范围 │ 每秒伤害 │
├──────────┼────────┼─────────┼─────────┼──────────┤
│ 剑 │ 10 │ 1.0/秒 │ 2米 │ 10.0 │
│ 斧 │ 20 │ 0.5/秒 │ 1.5米 │ 10.0 │
│ 匕首 │ 5 │ 2.0/秒 │ 1米 │ 10.0 │
│ 矛 │ 12 │ 0.8/秒 │ 3米 │ 9.6 │
└──────────┴────────┴─────────┴─────────┴──────────┘
┌─────────────────────────────────────────────────────────────┐
│ 问题: 操控感觉不响应 │
├─────────────────────────────────────────────────────────────┤
│ 解决方案: │
│ → 在输入时添加即时音频/视觉反馈 │
│ → 减少输入到动作的延迟 (< 100毫秒) │
│ → 为连招动作添加输入缓冲 │
│ → 检查帧率问题 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 问题: 一种策略主导所有其他策略 │
├─────────────────────────────────────────────────────────────┤
│ 解决方案: │
│ → 削弱主导选项 或 增强替代选项 │
│ → 添加情境性克制 │
│ → 创建石头剪刀布关系 │
│ → 为强力选项添加资源消耗 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 问题: 玩家不理解机制 │
├─────────────────────────────────────────────────────────────┤
│ 解决方案: │
│ → 添加更清晰的视觉/音频反馈 │
│ → 创建安全的教程空间 │
│ → 使用一致的视觉语言 │
│ → 添加用户界面提示或工具提示 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 问题: 进度感觉像在"肝" │
├─────────────────────────────────────────────────────────────┤
│ 解决方案: │
│ → 降低经验值要求 │
│ → 添加更多经验值来源 │
│ → 更频繁地给予有意义的奖励 │
│ → 为后期内容添加追赶机制 │
└─────────────────────────────────────────────────────────────┘
| 机制 | 技能下限 | 技能上限 | 反馈速度 |
|---|---|---|---|
| 狂按按钮 | 低 | 低 | 即时 |
| 基于时机 | 中等 | 高 | 即时 |
| 资源管理 | 中等 | 高 | 延迟 |
| 连招系统 | 高 | 非常高 | 即时 |
| 策略性 | 中等 | 非常高 | 延迟 |
使用此技能 : 当实现核心机制、平衡系统或设计玩家反馈时。
每周安装量
115
仓库
GitHub 星标
17
首次出现
2026年1月24日
安全审计
安装于
opencode104
codex103
gemini-cli101
github-copilot92
cursor88
claude-code84
┌─────────────────────────────────────────────────────────────┐
│ ACTION → EFFECT LOOP │
├─────────────────────────────────────────────────────────────┤
│ INPUT PROCESS OUTPUT FEEDBACK │
│ ┌─────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │Press│──────→│Validate │─────→│Update │───→│Visual │ │
│ │Button│ │& Execute│ │State │ │Audio │ │
│ └─────┘ └─────────┘ └─────────┘ │Haptic │ │
│ └─────────┘ │
│ │
│ TIMING REQUIREMENTS: │
│ • Input → Response: < 100ms (feels responsive) │
│ • Animation start: < 50ms (feels instant) │
│ • Audio feedback: < 20ms (in sync with action) │
└─────────────────────────────────────────────────────────────┘
FEEDBACK TIMING LAYERS:
┌─────────────────────────────────────────────────────────────┐
│ IMMEDIATE (0-100ms): │
│ ├─ Button press sound │
│ ├─ Animation start │
│ ├─ Screen shake │
│ └─ Controller vibration │
│ │
│ SHORT-TERM (100ms-1s): │
│ ├─ Damage numbers appear │
│ ├─ Health bar updates │
│ ├─ Enemy reaction animation │
│ └─ Particle effects │
│ │
│ LONG-TERM (1s+): │
│ ├─ XP/Score increase │
│ ├─ Level up notification │
│ ├─ Achievement unlock │
│ └─ Story progression │
└─────────────────────────────────────────────────────────────┘
// ✅ Production-Ready: Combat State Machine
public class CombatStateMachine : MonoBehaviour
{
public enum CombatState { Idle, Attacking, Blocking, Recovering, Staggered }
[Header("Combat Parameters")]
[SerializeField] private float attackDamage = 10f;
[SerializeField] private float attackRange = 2f;
[SerializeField] private float attackCooldown = 0.5f;
[SerializeField] private float blockDamageReduction = 0.7f;
[SerializeField] private float staggerDuration = 0.3f;
private CombatState _currentState = CombatState.Idle;
private float _stateTimer;
public event Action<CombatState> OnStateChanged;
public event Action<float> OnDamageDealt;
public event Action<float> OnDamageTaken;
public bool TryAttack()
{
if (_currentState != CombatState.Idle) return false;
TransitionTo(CombatState.Attacking);
StartCoroutine(AttackSequence());
return true;
}
private IEnumerator AttackSequence()
{
// Wind-up phase
yield return new WaitForSeconds(0.1f);
// Active hit frame
var hits = Physics.OverlapSphere(transform.position + transform.forward, attackRange);
foreach (var hit in hits)
{
if (hit.TryGetComponent<IDamageable>(out var target))
{
target.TakeDamage(attackDamage);
OnDamageDealt?.Invoke(attackDamage);
}
}
// Recovery phase
yield return new WaitForSeconds(attackCooldown);
TransitionTo(CombatState.Idle);
}
public float TakeDamage(float damage)
{
float finalDamage = _currentState == CombatState.Blocking
? damage * (1f - blockDamageReduction)
: damage;
OnDamageTaken?.Invoke(finalDamage);
if (finalDamage > 5f) // Stagger threshold
{
TransitionTo(CombatState.Staggered);
StartCoroutine(RecoverFromStagger());
}
return finalDamage;
}
private void TransitionTo(CombatState newState)
{
_currentState = newState;
_stateTimer = 0f;
OnStateChanged?.Invoke(newState);
}
}
ECONOMY BALANCE FORMULA:
┌─────────────────────────────────────────────────────────────┐
│ INCOME vs EXPENDITURE: │
│ │
│ Hourly Income = (Enemies/hr × Gold/Enemy) + PassiveIncome │
│ Hourly Spend = (Upgrades + Consumables + Deaths) │
│ │
│ BALANCE RATIO: │
│ • < 0.8: Too scarce (frustrating) │
│ • 0.8-1.2: Balanced (meaningful choices) │
│ • > 1.2: Too abundant (no tension) │
│ │
│ EXAMPLE STAMINA SYSTEM: │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Max: 100 │ Regen: 20/sec │ On Hit: +10 │ │
│ ├───────────────────────────────────────────────────────┤ │
│ │ Light Attack: -10 │ Heavy Attack: -25 │ │
│ │ Dodge: -15 │ Block: -5/hit │ │
│ │ Sprint: -5/sec │ Jump: -8 │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
PROGRESSION CURVE:
┌─────────────────────────────────────────────────────────────┐
│ Power │
│ ↑ │
│ │ ╱───── Late Game │
│ │ ╱────╱ (slow, goals) │
│ │ ╱────╱ │
│ │ ╱────╱ │
│ │ ╱────╱ Mid Game │
│ │ ╱────╱ (steady progress) │
│ │ ╱───╱ │
│ │╱ Early Game (fast, hook player) │
│ └────────────────────────────────────────────────→ Time │
│ │
│ XP CURVE FORMULA: │
│ XP_needed(level) = base_xp × (level ^ growth_rate) │
│ • growth_rate 1.5: Gentle curve (casual) │
│ • growth_rate 2.0: Standard curve (balanced) │
│ • growth_rate 2.5: Steep curve (hardcore) │
└─────────────────────────────────────────────────────────────┘
// ✅ Production-Ready: Progression Manager
public class ProgressionManager : MonoBehaviour
{
[Header("Progression Config")]
[SerializeField] private int baseXP = 100;
[SerializeField] private float growthRate = 2.0f;
[SerializeField] private int maxLevel = 50;
private int _currentLevel = 1;
private int _currentXP = 0;
public event Action<int> OnLevelUp;
public event Action<int, int> OnXPGained; // current, required
public int XPForLevel(int level)
{
return Mathf.RoundToInt(baseXP * Mathf.Pow(level, growthRate));
}
public void AddXP(int amount)
{
_currentXP += amount;
int required = XPForLevel(_currentLevel);
OnXPGained?.Invoke(_currentXP, required);
while (_currentXP >= required && _currentLevel < maxLevel)
{
_currentXP -= required;
_currentLevel++;
OnLevelUp?.Invoke(_currentLevel);
required = XPForLevel(_currentLevel);
}
}
public float GetProgressToNextLevel()
{
return (float)_currentXP / XPForLevel(_currentLevel);
}
}
PLATFORMER FEEL PARAMETERS:
┌─────────────────────────────────────────────────────────────┐
│ MOVEMENT: │
│ • Walk Speed: 5-8 units/sec │
│ • Run Speed: 10-15 units/sec │
│ • Acceleration: 20-50 units/sec² │
│ • Deceleration: 30-60 units/sec² (snappier = higher) │
│ │
│ JUMP: │
│ • Jump Height: 2-4 units │
│ • Jump Duration: 0.3-0.5 sec │
│ • Gravity: 20-40 units/sec² │
│ • Fall Multiplier: 1.5-2.5x (faster fall = tighter) │
│ │
│ FEEL ENHANCERS: │
│ • Coyote Time: 0.1-0.15 sec (jump after leaving edge) │
│ • Jump Buffer: 0.1-0.15 sec (early jump input) │
│ • Variable Jump: Release = shorter jump │
│ • Air Control: 50-80% of ground control │
└─────────────────────────────────────────────────────────────┘
EVENT SYSTEM PATTERN:
┌─────────────────────────────────────────────────────────────┐
│ ACTION EXECUTED │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ EVENT DISPATCHER │ │
│ │ DamageDealt(amount, position, type) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ├──→ VFX System: Spawn damage numbers │
│ ├──→ Audio System: Play hit sound │
│ ├──→ UI System: Update health bar │
│ ├──→ Camera System: Screen shake │
│ ├──→ AI System: Alert nearby enemies │
│ └──→ Analytics: Log combat event │
│ │
│ BENEFITS: │
│ • Systems don't need direct references │
│ • Easy to add/remove observers │
│ • Same event triggers multiple effects │
│ • Easy networking (replicate events) │
└─────────────────────────────────────────────────────────────┘
RAPID BALANCE WORKFLOW:
┌─────────────────────────────────────────────────────────────┐
│ 1. PLAYTEST (15-30 min) │
│ → Watch players, note friction points │
│ │
│ 2. ANALYZE (5-15 min) │
│ → What felt wrong? Too easy/hard? │
│ → Check telemetry data │
│ │
│ 3. ADJUST (5-10 min) │
│ → Change ONE variable at a time │
│ → Document the change │
│ │
│ 4. TEST (5 min) │
│ → Verify change has intended effect │
│ │
│ 5. REPEAT │
│ → Target: 4-6 iterations per hour │
└─────────────────────────────────────────────────────────────┘
BALANCE SPREADSHEET FORMAT:
┌──────────┬────────┬─────────┬─────────┬──────────┐
│ Weapon │ Damage │ Speed │ Range │ DPS │
├──────────┼────────┼─────────┼─────────┼──────────┤
│ Sword │ 10 │ 1.0/sec │ 2m │ 10.0 │
│ Axe │ 20 │ 0.5/sec │ 1.5m │ 10.0 │
│ Dagger │ 5 │ 2.0/sec │ 1m │ 10.0 │
│ Spear │ 12 │ 0.8/sec │ 3m │ 9.6 │
└──────────┴────────┴─────────┴─────────┴──────────┘
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Controls feel unresponsive │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Add immediate audio/visual feedback on input │
│ → Reduce input-to-action delay (< 100ms) │
│ → Add input buffering for combo actions │
│ → Check for frame rate issues │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: One strategy dominates all others │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Nerf dominant option OR buff alternatives │
│ → Add situational counters │
│ → Create rock-paper-scissors relationships │
│ → Add resource costs to powerful options │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Players don't understand mechanic │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Add clearer visual/audio feedback │
│ → Create safe tutorial space │
│ → Use consistent visual language │
│ → Add UI hints or tooltips │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Progression feels grindy │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Reduce XP requirements │
│ → Add more XP sources │
│ → Give meaningful rewards more frequently │
│ → Add catch-up mechanics for late content │
└─────────────────────────────────────────────────────────────┘
| Mechanic | Skill Floor | Skill Ceiling | Feedback Speed |
|---|---|---|---|
| Button Mash | Low | Low | Instant |
| Timing-Based | Medium | High | Instant |
| Resource Management | Medium | High | Delayed |
| Combo System | High | Very High | Instant |
| Strategic | Medium | Very High | Delayed |
Use this skill : When implementing core mechanics, balancing systems, or designing player feedback.
Weekly Installs
115
Repository
GitHub Stars
17
First Seen
Jan 24, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode104
codex103
gemini-cli101
github-copilot92
cursor88
claude-code84
Three.js 3D Web开发教程 - WebGL/WebGPU图形编程、动画与性能优化指南
540 周安装