تصویر آموزشی زمان فریم بازی؛ مرتبط با موضوع نوشته

زمان فریم؛ چرا میانگین سرعت کافی نیست؟

گیر کوتاه را کنار میانگین پیدا کن

زمان فریم مدت یک فریم را بیان می‌کنه. میانگین می‌تواند لحظهٔ پرهزینه‌ای را پنهان کنه که بازیکن به شکل مکث می‌بینه. پروفایلر یونیتی کار پیرامون فریم مشکل‌دار را بررسی می‌کنه و نیاز به حدس دربارهٔ کل برنامه را کم می‌کنه.

منو ممکنه بیشتر وقت‌ها روان باشد و فقط با ظاهر شدن ده سکهٔ پاداش مکث کنه. گفتن اینکه میانگین نرخ فریم خوب هست، این لحظه را توضیح نمی‌دهدد. به زمان فریم‌های اطراف همان پاداش نگاه کن و ببین کدوم کار ناگهان زیاد شده. برای تصور بودجه، شصت فریم در ثانیه حدود ۱۶٫۷ میلی‌ثانیه برای هر فریم هست؛ این فقط تبدیل عدد هست، نه تضمین عملکرد یک گوشی. فریمی طولانی می‌تواند در میان فریم‌های کوتاه پنهان بشه و بازیکن همچنان توقف را حس کنه.

همان پاداش را دوباره اجرا کن

نشست کوتاهی شامل بازی عادی و لحظهٔ پاداش کنه ثبت کن. فریم همان لحظه را ببین، نه فقط میانگین نشست. روی گوشی مورد نظر با ترتیب عمل یکسان تکرار کن. کار افزایش‌یافته و تغییر را بنویس. بعد همان مسیر را بازپخش کن؛ اجرای اول شلوغ را با اجرای دوم آرام مقایسه نکن.

یک تغییر را انتخاب کن، مثلاً آماده کردن جلوه پیش از نمایش، و همان صحنهٔ پاداش را دوباره اندازه بگیر. هم‌زمان کیفیت تصویر، تعداد سکه و منطق جایزه را تغییر نده؛ دیگر معلوم نمی‌شود تفاوت از کجا آمده هست. Profiler می‌تواند هزینهٔ بخش‌های اجرا را نشان دهد، ولی اندازه‌گیری در ادیتور با تجربهٔ دستگاه هدف یکی نیست. تنظیمات اندازه‌گیری و نوع بیلد را ثبت کن. اگر فقط اولین اجرا مکث داره، دربارهٔ بارگذاری اولیه سؤال کن؛ اگر هر بار تکرار می‌شود، هزینهٔ تکرارشونده را جدا دنبال کن.

عدد را با شرایطش گزارش کن

وقتی تغییری بهتر شد، نتیجهٔ دیداری را هم نگاه کن. جلوه‌ای که ارزان شده اما دیگر معلوم نمی‌کنه سکه به موجودی اضافه شده، مسئلهٔ تازه ساخته هست. گزارشت می‌تواند بگوید در این دستگاه و این مسیر کدوم فریم پرهزینه بود و بعد چه اتفاقی افتاد. درصد بدون زمینه به نفر بعد کمک نمی‌کنه و یک بار مشاهده هم کافی نیست که همهٔ بازی را روان اعلام کنی. هدف تمرین پیدا کردن علت یک مکث مشخص و حفظ معنی پاداش هست؛ از همین مسئلهٔ کوچک می‌شود یک عادت خوب اندازه‌گیری ساخت.

مطالعهٔ بیشتر: Unity: Profiler

برای یک مثال مرتبط، دیباگ بدون ترس؛ خطا را به سؤال کوچک تبدیل کنیم را هم بخون.

مثال عملی زمان فریم بازی

برای فهم عملی زمان فریم بازی، یک مثال آموزشی را قدم‌به‌قدم دنبال کنیم. میانگین سرعت خوب است، ولی هنگام باز شدن پنجرهٔ فروشگاه مکث کوتاهی دیده می‌شود. پیش از اجرا، وضعیت آغاز را روی کاغذ بنویس؛ مشخص کن چه چیزی می‌تواند تغییر کند و چه چیزی باید ثابت بماند. بعد فقط همین مسیر را اجرا کن. این مثال گزارشی از آمار کاربران یا قابلیت تازهٔ منتشرشدهٔ دلو نیست؛ تمرینی برای روشن کردن تصمیم طراحی همین مطلب است.

خطای رایج و علت آن

میانگین FPS می‌تواند قله‌های زمان فریم و تجربهٔ لرزش را پنهان کند. این خطا معمولاً وقتی پنهان می‌ماند که فقط مسیر موفق و ظاهر نهایی را ببینیم. برای پیدا کردن علت، آخرین وضعیت درست را از نخستین وضعیت نادرست جدا کن و ببین تغییر دقیقاً در کدام مرز رخ داده است. بودجهٔ هر فریم، توزیع زمان و سناریوی ثبت از یک عدد متوسط مفیدترند. اگر این تفاوت در قرارداد مشخص نباشد، اصلاح یک نشانه ممکن است همان مسئله را در بخش دیگری دوباره ایجاد کند.

چطور نتیجه را بررسی کنیم؟

زمان همان لحظه را روی دستگاه هدف با Profiler و شرایط یکسان بررسی کن. اجرای یک‌باره برای نتیجه‌گیری کافی نیست؛ یک بار مسیر معمول و بار دیگر همان موقعیت را با ورودی مرزی یا تکرار اقدام بررسی کن. اگر نتیجه فرق دارد، ورودی و شرایط اجرا را همراه خروجی نگه دار تا مقایسه قابل بازسازی باشد. جدول زیر خلاصهٔ مشخصات همین سناریو است و برای ثبت نتیجهٔ بررسی به کار می‌آید.

بخش بررسیآنچه باید ثبت شود
موقعیت آزمایشیمیانگین سرعت خوب است، ولی هنگام باز شدن پنجرهٔ فروشگاه مکث کوتاهی دیده می‌شود.
ریسک اصلیمیانگین FPS می‌تواند قله‌های زمان فریم و تجربهٔ لرزش را پنهان کند.
روش بررسیزمان همان لحظه را روی دستگاه هدف با Profiler و شرایط یکسان بررسی کن.
مرز نتیجه‌گیریبودجهٔ هر فریم، توزیع زمان و سناریوی ثبت از یک عدد متوسط مفیدترند.

پرسش‌های کاربردی دربارهٔ زمان فریم بازی

از کجا شروع کنم؟

از همان موقعیت محدود این مطلب شروع کن: میانگین سرعت خوب است، ولی هنگام باز شدن پنجرهٔ فروشگاه مکث کوتاهی دیده می‌شود. ابتدا نتیجهٔ مورد انتظار را مشخص کن و بعد سراغ پیاده‌سازی یا ابزار برو. وقتی مسیر پایه قابل توضیح و بررسی شد، می‌توان حالت‌های بیشتری اضافه کرد. ساخت همهٔ حالت‌ها از ابتدا، فهم علت خطا را سخت‌تر می‌کند.

چه زمانی می‌توانم بگویم این بخش درست کار می‌کند؟

زمانی که رفتار در موقعیت تعریف‌شده با قرارداد سازگار باشد و محدودیت‌های آن روشن بمانند. زمان همان لحظه را روی دستگاه هدف با Profiler و شرایط یکسان بررسی کن. موفقیت در این آزمون دربارهٔ همان سناریو شاهد می‌دهد؛ از آن نمی‌توان بدون بررسی دربارهٔ همهٔ دستگاه‌ها، همهٔ قوانین محلی یا همهٔ حجم‌های داده نتیجه گرفت. بودجهٔ هر فریم، توزیع زمان و سناریوی ثبت از یک عدد متوسط مفیدترند.

برای ادامهٔ همین موضوع، نمونهٔ اولیهٔ بازی؛ چه چیزی را باید زود امتحان کنیم؟ را ببین. زمینهٔ ساخت این پروژه‌ها و معرفی سازنده در صفحهٔ کیان پاک نعمت آمده است.

جزئیات ابزار ثبت عملکرد در راهنمای رسمی Profiler یونیتی ۶ آمده است. قابلیت‌های نسخهٔ مورد استفاده و دستگاه هدف را هنگام اجرای آزمایش جدا بررسی کن.

آخرین مطالب بلاگ

تصویر مفهومی مستقل دربارهٔ مقایسه موتورهای بازی

مقایسه یونیتی، گودوت و آنریل؛ انتخاب براساس خروجی پروژه

مقایسهٔ یونیتی، گودوت و آنریل وقتی مفید است که خروجی پروژه معلوم باشد. برای یک بازی کارتی موبایل، یک پازل وب و یک اکشن سه‌بعدی نیازهای

ادامهٔ مطلب
تصویر مفهومی مستقل دربارهٔ تغییرات آنریل انجین ۵

تغییرات Unreal Engine 5؛ Nanite و Lumen چه چیزی عوض کردند؟

تغییرات پایهٔ Unreal Engine 5 شیوهٔ کار با جزئیات هندسه، نور پویا و جهان بزرگ را گسترش داد. این مقاله دربارهٔ مفاهیم این نسل است و

ادامهٔ مطلب
تصویر مفهومی درباره BoomBo و کنترل حرکت و نشانه‌گیری مستقل

BoomBo و کنترل حرکت و نشانه‌گیری مستقل

حرکت و نشانه‌گیری مستقل یکی از سؤال‌های اصلی کنترل در طرح فعلی BoomBo است. حرکت به چپ و نشانه‌رفتن به راست اجازه می‌دهد موقعیت و جهت حمله جدا مدیریت شوند..

ادامهٔ مطلب
Dalo