بخش اول

زمان در بازی چگونه اندازه‌گیری می‌شود؟

بیشتر طراحان تازه‌کار زمان را برحسب ثانیه در نظر می‌گیرند. اما موتورهای بازی — مخصوصاً در Combat — زمان را به شکل دیگری می‌بینند. واحد اصلی Frame است.

نرخ تصویرمدت هر فریمتأثیر بر گیم‌پلی
30 FPS33.3 msریتم کندتر، مناسب بازی‌های کنسول قدیمی
60 FPS16.6 msاستاندارد بیشتر بازی‌های Fighting و Action
120 FPS8.3 msدقت بالاتر، نیاز به بازطراحی Frame Data

به همین دلیل تقریباً تمام دیتابیس‌های Frame Data دنیا بر اساس Frame نوشته می‌شوند — نه بر حسب ثانیه. مثال: Startup: 7F / Active: 3F / Recovery: 19F

⚠

اگر منطق کامبت مستقیماً به تعداد فریم‌های رندر وابسته باشد، رفتار بازی در 30، 60، 120 و 240 FPS متفاوت خواهد شد. راه‌حل استاندارد: اجرای منطق Gameplay در نرخ ثابت با Fixed Tick و استفاده از Time.fixedDeltaTime.


بخش دوم

ساختار کلاسیک یک Attack

تقریباً تمام بازی‌های اکشن از ساختار زیر استفاده می‌کنند. هر مرحله نقش مجزایی در تجربه بازیکن دارد و طراحی هر کدام پیامدهای مستقیم بر Skill Ceiling و Fair بودن بازی می‌گذارد.

ATTACK LIFECYCLE DIAGRAM نمودار چرخه عمر یک حمله · 60 FPS
READY
STARTUP 7F
ACTIVE 3F
RECOVERY 19F
NEUTRAL
Startup — آماده‌سازی
Active — Hitbox فعال
Recovery — بازگشت
Neutral — آزاد
READY
آمادگی

بازیکن آزاد است. Input جدید می‌تواند ثبت شود و هیچ محدودیتی وجود ندارد.

STARTUP
آماده‌سازی حمله

هنوز Hitbox فعال نیست. بازیکن متعهد به حمله شده. این مرحله تعیین می‌کند آیا ضربه قابل React است و آیا می‌توان آن را Punish کرد.

ACTIVE
فعال بودن Hitbox

برخورد امکان‌پذیر است. معمولاً کوتاه‌ترین مرحله — دقت در زمان‌بندی این لحظه اساس Skill بازیکن را تشکیل می‌دهد.

RECOVERY
بازگشت

ضربه تمام شده اما بازیکن هنوز قفل است. اگر ضربه Miss شود، این مرحله به فرصت Punish برای حریف تبدیل می‌شود (Whiff Punish).

NEUTRAL
حالت خنثی

تمام محدودیت‌ها برداشته می‌شوند. بازیکن مجدداً آزاد است و می‌تواند Input جدید ثبت کند.


بخش سوم

چرا Startup مهم‌ترین بخش Combat است؟

Startup مشخص می‌کند آیا ضربه قابل React است، آیا Punishable است، آیا Combo می‌شود و آیا Whiff خطرناک است. جدول زیر Frame Data نمونه برای سه نوع حمله در یک بازی Fighting را نشان می‌دهد.

نوع حملهStartupActiveRecoveryمجموعزمان (60FPS)
Light4~6F2~3F12~16F18~25F~83ms
Medium7~10F3~5F18~22F28~37F~150ms
Heavy12~18F5~8F24~32F41~58F~250ms
◉

میانگین ری‌اکشن انسان حدود 200~250ms است. یعنی Light Punch با Startup ۵ فریم (~83ms) عملاً غیرقابل React است. بازیکن باید پیش‌بینی کند، نه واکنش نشان دهد. همین موضوع Skill Ceiling را ایجاد می‌کند.


بخش چهارم

Human Reaction Time

مطالعات شناختی نشان می‌دهند که مغز انسان برای پردازش یک محرک بصری و صدور فرمان حرکتی به زمان نیاز دارد. مقایسه این اعداد با Frame Data بازی، اساس طراحی سیستم‌های Competitive است.

180 ms Simple Reaction
300 ms Choice Reaction
300 ms Visual Recognition
12 frame آستانه ری‌اکشن در 60FPS

مقایسه بصری — Frame Data در برابر ری‌اکشن انسان

Light Punch (6F)
~100ms
Medium (9F)
~150ms
Heavy (15F)
~250ms
آستانه ری‌اکشن انسان
⚡ Human Reaction
200–250ms
ℹ

هر ضربه‌ای که Startup کمتر از ~12 فریم در 60FPS داشته باشد، در اغلب شرایط با اتکا به مشاهده قابل ری‌اکشن نیست و بیشتر بر پیش‌بینی، Spacing و خواندن رفتار حریف تکیه دارد.


بخش پنجم

Frame Advantage

یکی از مهم‌ترین مفاهیم Competitive. تعیین می‌کند پس از یک ضربه، چه کسی زودتر آزاد می‌شود. این عدد کل سیستم Pressure و Punish را تعریف می‌کند.

فرمول: Frame Advantage = Hitstun/Blockstun Defender − Recovery Attacker

ON HIT — مثبت
Hitstun Defender22F
Recovery Attacker18F
نتیجه +4 on Hit
ON BLOCK — منفی
Blockstun Defender17F
Recovery Attacker22F
نتیجه -5 on Block

عدد -5 on Block یعنی ضربه Punishable است. هر بازیکنی با 5 فریم یا سریع‌تر می‌تواند Counter بزند. Active Frame و Pushback هم در کنار Frame Advantage تعیین می‌کنند آیا ادامه فشار واقعاً ممکن است یا خیر.


بخش ششم

Hitstop، Hitstun و Blockstun

Hitstop

یعنی کل بازی برای چند فریم متوقف می‌شود — نه فقط دشمن. هدف: افزایش حس برخورد، تأکید بصری و فرصت پردازش ذهنی. بازی‌هایی مانند Street Fighter و Guilty Gear از Hitstop به‌عنوان بخشی از زبان بصری کامبت استفاده می‌کنند.

شکل ۱ — شبیه‌سازی Hitstop · 8 فریم توقف هنگام برخورد
F1
F2
F3
●
●
●
●
●
●
●
●
▶
▶
▶
Normal
Freeze (8F Hitstop)
Resume
مفهومچه کسی قفل می‌شودکاربرد اصلی
Hitstopکل بازیحس وزن و برخورد
Hitstunفقط Defenderپایه شکل‌گیری Combo
Blockstunفقط Defender (دفاع)کنترل Pressure
Pushbackجابجایی فیزیکیجلوگیری از Loop بی‌پایان
⚠

اگر شدت Hitstop با قدرت ضربه همخوانی نداشته باشد یا Frame Advantage در حملات مشابه ناسازگار باشد، بازیکن حرفه‌ای احساس می‌کند بازی «غیرقابل اعتماد» است — حتی اگر نتواند دلیل فنی آن را توضیح دهد.


بخش هفتم

Input Buffer و Cancel Window

بازیکن دقیقاً در اولین فریم آزاد شدن دکمه را فشار نمی‌دهد. سیستم‌های مدرن معمولاً ورودی را برای چند فریم نگه می‌دارند تا تجربه روان‌تری ایجاد شود.

Cancel Window بازه‌ای است که در آن بازیکن می‌تواند انیمیشن فعلی را لغو کند. در همه مراحل اجازه Cancel وجود ندارد — طراحی این پنجره تعیین‌کننده عمق Combo است.


بخش هشتم

پیاده‌سازی در Unity (C#)

Input Buffer

InputBuffer.cs C# · Unity
public class InputBuffer
{
    private float bufferTime = 0.1f; // ~6 فریم در 60FPS
    private float timer;

    public void RegisterInput()
    {
        timer = bufferTime;
    }

    public bool Consume()
    {
        if (timer > 0)
        {
            timer = 0;
            return true;
        }
        return false;
    }

    public void Tick(float deltaTime)
    {
        if (timer > 0)
            timer -= deltaTime;
    }
}

Input Queue برای Combo

InputQueue.cs C# · Unity
using System.Collections.Generic;

public class InputQueue
{
    private readonly Queue<string> queue = new();

    public void Enqueue(string input)
        => queue.Enqueue(input);

    public bool TryDequeue(out string input)
        => queue.TryDequeue(out input);

    public void Clear() => queue.Clear();
}

Cancel Window و Fixed Tick

AttackState.cs + CombatSystem.cs C# · Unity
public class AttackState
{
    public int cancelStartFrame;
    public int cancelEndFrame;

    public bool CanCancel(int currentFrame)
    {
        return currentFrame >= cancelStartFrame
            && currentFrame <= cancelEndFrame;
    }
}

// منطق کامبت باید Frame-rate Independent باشد:
void FixedUpdate()
{
    combatSystem.Tick(Time.fixedDeltaTime);
}
ℹ

Hit Confirm — بازیکن حرفه‌ای پس از دیدن برخورد اولیه، در یک پنجره بسیار کوتاه تصمیم می‌گیرد Combo را ادامه دهد. طراحی صحیح Startup، Hitstop، Cancel Window و Input Buffer تعیین می‌کند سیستم «عمیق» احساس می‌شود یا صرفاً «سخت».


جمع‌بندی

تفاوت در چند فریم

طراحی کامبت صرفاً ساخت انیمیشن یا تعریف Damage نیست. یک سیستم مبارزه حرفه‌ای حاصل هماهنگی دقیق میان Frame Data، Input Buffer، Hitstop، Hitstun، Blockstun، Recovery، Frame Advantage، Cancel Window و زمان‌بندی مستقل از نرخ رندر است.

 

در پروژه‌های AAA، این مقادیر نه به‌صورت تجربی، بلکه با تحلیل داده، آزمون‌های تکرارشونده و اندازه‌گیری میلی‌ثانیه‌ای تنظیم می‌شوند. تفاوت میان یک سیستم مبارزه «قابل قبول» و یک سیستم «ماندگار» اغلب در جزئیاتی نهفته است که در حد چند فریم اختلاف دارند — اما همین چند فریم، تجربه بازیکن را به‌طور بنیادین تغییر می‌دهند.