آموزش ساخت بازی چندنفره: مفاهیم اوّلیّه

پلاگین Multiplayer در کانستراکت ۲

طرّاحی کلّی یک بازی چندنفره در کانستراکت 2 چیزی شبیه این است.

روند یک بازی چندنفره

چرخه‌ی یک بازی چندنفره شبیه زیر است.

  1. اتّصال به سیگنالینگ سرور و ورود به آن
  2. پیوستن به یک روم
  3. در طول بازی پیرهای دیگر می‌توانند به بازی بپیوندند یا از آن خارج شوند.
  4. اطّلاعات اشیاء مختلف و پیام‌های دیگری مثل چت بین پیرهای متّصل‌شده رد و بدل می‌شود.
  5. سرانجام بعد از اتمام بازی، همه روم را ترک می‌کنند، و شاید وارد یک روم دیگر شوند (برگشت به گام 2)

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

پلاگین Multiplayer دارای ویژگی‌هایی است که مرحله‌ی سیگنال‌دهی را انجام می‌دهد (گام‌های 1 و 2)، و نیز ویژگی‌های «room» روند بازی را پوشش می‌دهند، مثلاً وقتی پیرها بازی را ترک ‌کنند، به بازی ملحق شوند، پیامی دریافت شود و… به ما خبر می‌دهند.

طرّاحی کلّی

این طور در نظر ‌گرفته شده است بازی‌ها طوری طرّاحی شده اند که یک آبجکت‌تایپ داریم که نماینده‌ی اشیاء تحت کنترل بازی‌کن‌هاست. حالا این شیء توسّط تمام بازی‌کن‌ها به طور یکسان استفاده می‌شود که شامل شما نیز می‌شود (حتّی وقتی هاست هستید). عاقلانه است اسم این شیء را ‍Peer بگذارید، زیرا این شیء نماینده‌ی پیرها می‌باشد. اگر بازی‌کن‌های شما از ترکیب چند شیء ساخته شده‌اند، مثلاً از ترکیب یک اسلحه و یک بدن جدا، یکی را به عنوان شیء Peer اصلی در نظر بگیرید و آن را با سایر اشیاء مربوطه در یک کانتینر (Container) قرار دهید، این کار باعث می‌شود مطمئن شوید بازی‌کن شما به صورت کامل به وجود می‌آید و یا نابود می‌شود، و اشیاء مربوط به آن به صورت خودکار به شیء اصلی می‌چسبند، بنابراین تا حدّ زیادی می‌توانید شیء اصلی را به عنوان نماینده‌ی کلّ آن بازی‌کن تلقّی کنید.

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

اکشن Sync object شیء Multiplayer راه اصلی نشان‌دادنِ این است که می‌خواهید داده‌هایی در مورد شیئی خاص را از طریق شبکه ارسال کنید. این اکشن به هاست می‌گوید که اطّلاعات مربوط به آن اشیاء را به همه‌ی پیرها ارسال کند، و به پیرها می‌گوید تا منتظر اطّلاعات مربوط به آن اشیاء بمانند. وقتی پیرها به بازی ملحق می‌شوند و یا آن را ترک می‌کنند، موتور چندنفره به صورت خودکار اشیائی را که نماینده‌ی آن پیرها هستند به وجود می‌آورد و یا حذف می‌کند. (اکشن Sync object می‌تواند برای اشیائی که نماینده‌ی هیچ پیری نیستند هم به کار رود، ولی بیشتر برای پیرها استفاده می‌شود)

هر پیر شناسه‌ای منحصر به فرد دارد که از سیگنالینگ سرور دریافت کرده است، این شناسه که Peer ID نامیده می‌شود یک رشته است که در انتهای آن تعدادی کاراکتر تصادفی برای منحصر به فرد شدن اضافه شده است. به طور کلّی این شناسه‌ها برای این به کار می‌روند بتوانیم به طور مداوم به بازی‌کنی خاص اشاره داشته باشیم، حتّی اگر نام مستعار خود را در بازی تغییر دهد. Peer ID باید در یک متغیّر اینستنس ذخیره شود تا بدانید کدام شیء نماینده‌ی پیر مورد نظر است. وقتی موتور چندنفره شیئی را برای یک بازی‌کن به وجود آورد مقدار اکسپرشن Multiplayer.PeerID به Peer ID آن شیء تغییر می‌کند، بنابراین این مقدار می‌تواند در یک متغیّر اینستنس مربوط به همان شیء ذخیره شود. برای این‌که شما فقط شیء پیر مربوط به خودتان را کنترل کنید به راحتی می‌توانید با بررسی این‌که آیا مقدار آن متغیّر اینستنس با اکسپرشن Multiplayer.MyID[1] برابر است یا نه این کار را انجام دهید.

حالت‌های معتبر

3 حالت برای انتقال اطّلاعات وجود دارد.

مطمئن‌ترین حالت Reliable ordered است. در این حالت یک پیام به صورت زنجیروار فرستاده می‌شود: اگر این پیام در بین راه به هر دلیلی از بین برود، مجدّداً فرستاده می‌شود تا وقتی‌که اطمینان حاصل شود پیام به مقصد رسیده است. در این حالت ترتیب پیام‌ها نیز رعایت می‌شود، بنابراین پیام‌ها دقیقاً به همان ترتیبی که ارسال شده‌اند به مقصد می‌رسند. این خیلی مفید است، ولی سریع‌ترین حالت نیست: اگر یک پیام در بین راه از بین برود، مانع ارسال همه‌ی پیام‌های بعدی می‌شود تا این‌که به مقصد برسد. یعنی یک پیام تنها ممکن است Latency را چندین برابر آن چیزی که باید باشد بکند زیرا حدّاقل به اندازه‌ی یک زمان رفت و برگشت باید صبر کند تا بداند پیام رسیده‌است یا نه. به طور کلّی این حالت فقط مناسب پیام‌های کم‌بسامد مثل پیام‌های چت است.

حالت بعدی Reliable unordered است. در این حالت یک پیام به صورت زنجیروار آن‌قدر فرستاده می‌شود تا مطمئن شود به مقصد رسیده است. ولی ترتیب پیام‌ها در این حالت مهم نیست، این باعث می‌شود وقتی یک پیام در بین راه از بین می‌رود و مجدّداً فرستاده می‌شود پیام‌های بعدی را پشت سرش نگه ندارد، در این موقع این پیام بعد از پیام‌هایی به مقصد می‌رسد که دیرتر از آن ارسال شده‌اند. با این حال Latency برای رسیدن همان یک پیام هنوز هم چند برابر می‌شود. این حالت برای رویدادهای روند بازی که ربطی به هم نداشته باشند مناسب است، مثل دری که باز می‌شود یا انفجاری که رخ می‌دهد.

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

آماده برای رفتن!

با این‌که پلاگین Multiplayer کانستراکت 2 تعداد زیادی از جزئیّات فنّی مثل پیش‌بینی ورودی و اتّصال را برای شما انجام می‌دهد، باز هم خیلی مهم است که تئوری را هم بلد باشید تا بتوانید با توجّه به این‌که چه داده‌ای با چه دقّتی و از چه حالت معتبری فرستاده می‌شود انتخاب‌های مناسبی انجام دهید. امیدوارم این آموزش به اندازه‌ی کافی یک نمای کلّی به شما داده باشد تا شروع کنید به ساخت اوّلین بازی چندنفره‌تان، با اطّلاع از این‌که پشت صحنه چه اتّفاقاتی دارد می‌افتد و شما باید چه کارهایی را انجام دهید تا بهترین استفاده را از ویژگی‌های چندنفره‌ی کانستراکت 2 بکنید. با این‌که این آموزش روی تئوری تمرکز داشت، آموزش‌های بعدی در عمل چگونگی رسیدگی به مسائلی از قبیل پیش‌بینی ورودی و جبران lag را با استفاده از ویژگی‌های خاص پلاگین Multiplayer پوشش می‌دهند.

[1] این اکسپرشن Peer ID شما را برمی‌گرداند

سؤالات فنی خود را فقط در انجمن بپرسید. در غیر این صورت پاسخ داده نخواهد شد.
۳۳ نظر

افزودن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

تمامی حقوق برای مرجع تخصصی کانستراکت محفوظ است.