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

Bunny Circus Analytics از یونیتی تا ذخیرهٔ PHP

مسئله‌ای که باید حل می‌کردم

بعد از اقتصاد و ظاهر، می‌خواستم رفتار واقعی بازیکن را ببینم. در Bunny Circus Analytics، ارسال رویداد باید از ادامهٔ بازی جدا باشد و قطع شبکه نباید نتیجهٔ مسابقه را عوض کنه.

پیاده‌سازی در نسخهٔ فعلی

GameAnalytics.TrackEvent رویداد را در outbox پایدار می‌نویسد. فایل موقت پس از نوشتن جابه‌جا می‌شود و SendLoop قدیمی‌ترین فایل را با UnityWebRequest ارسال می‌کنه؛ تأیید success باعث حذف هست.

تصمیم و هزینهٔ طراحی

خطای موقت retry با فاصلهٔ افزایشی داره. خطای مجوز و redirect ارسال را pause می‌کنه و رد دائمی در پوشهٔ rejected نگه داشته می‌شود؛ همهٔ خطاها یک رفتار واحد ندارند.

مرزهای فعلی

سورس PHP اکنون ذخیرهٔ JSON روزانه، قفل فایل، بررسی تکرار و گزارش‌ها را نشان می‌دهد. این شواهد برای توضیح معماری کافی هست؛ وضعیت استقرار و موفقیت ترافیک زنده همچنان به شاهد جدا نیاز داره.

سناریوهای بررسی و معنای قرارداد

با اضافه شدن سورس PHP، می‌شود سمت دیگر قرارداد را نیز دید. API فقط POST با JSON می‌پذیرد، کلید را با بازی مجاز تطبیق می‌دهد و سپس داده را برای ذخیره می‌فرسته. store_event برای فایل روز همان بازی قفل می‌گیرد و بررسی بودجهٔ کلی رویدادها نیز با قفل مشترک انجام می‌شود. نوشتن اتمیک با فایل موقت و rename، جایگزین نوشتن مستقیم روی فایل اصلی هست. رویداد تکراری با شناسه و محتوای یکسان دوباره اضافه نمی‌شود؛ استفادهٔ متعارض از همان شناسه خطا می‌دهد. این بررسی در فایل روز هدف انجام می‌شود و نباید آن را شاخص یکتایی نامحدود در همهٔ روزها معرفی کرد.

سناریوی مهم، قطع پاسخ پس از ذخیرهٔ موفق هست: کلاینت نمی‌داند درخواست رسیده و دوباره همان رویداد را می‌فرسته. ثابت ماندن event_id و payload به سرور امکان تشخیص تکرار در همان روز را می‌دهد. اگر ظرفیت روز یا بودجهٔ کلی پر باشد، پاسخ 503 نشان‌دهندهٔ توقف موقت دریافت هست؛ حذف خودکار تاریخچه راهکار این نسخه نیست. ذخیرهٔ JSON برای هاست کوچک تصمیم ساده‌ای هست اما گزارش تاریخچه آن را در حافظهٔ PHP می‌خواند و با بزرگ شدن داده محدودیت پیدا می‌کنه. من این معماری Bunny Circus Analytics را با قراردادهای قابل بررسی توضیح می‌دهدم، بدون ادعای تعداد کاربران، نرخ تحویل یا آزمون فشار انجام‌شده.

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

چیزی که از این مرحله یاد گرفتم

برای من، ثبت رویداد باید صادقانه باشد: queued با delivered فرق داره. معماری کلاینت برای دوام تلاش می‌کنه، ولی صحت انتها به انتهای Bunny Circus Analytics به بررسی سمت سرور هم نیاز داره.

معرفی بازی دلو

سورس و گفتگو دربارهٔ پروژه: GitHub · Telegram

مثال عملی اتصال آنالیتیکس یونیتی

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

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

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

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

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

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

پرسش‌های کاربردی دربارهٔ اتصال آنالیتیکس یونیتی

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

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

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

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

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

آخرین دولاگ‌ها

تصویر آموزشی انیمیشن جمع‌کردن پاسور؛ مرتبط با موضوع نوشته

نمایش انتخاب و جمع‌کردن پاسور

حرکت پاسور باید نشان بدهد کدام کارت بازی شد و کدام کارت‌های زمین جمع شدند. در ادغام کار هم‌تیمی‌ام، ترتیب نمایش برای فهم نتیجه همان‌قدر مهم بود که خود capture.

ادامهٔ مطلب
تصویر آموزشی ربات پاسور؛ مرتبط با موضوع نوشته

تصمیم ربات پاسور از روی گزینه‌های جمع‌کردن

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

ادامهٔ مطلب
تصویر آموزشی جمع‌کردن کارت پاسور؛ مرتبط با موضوع نوشته

جمع‌کردن کارت‌های زمین در پاسور

در کار هم‌تیمی‌ام، پاسور انتخاب کارت دست را با انتخاب مجموعهٔ زمین ترکیب می‌کند. قانون باید هم ترکیب معتبر بسازد و هم اجازه ندهد بازیکن capture موجود را نادیده بگیرد.

ادامهٔ مطلب
Dalo