آموزش ساخت بازی چندنفره: مفاهیم اوّلیّه
|پلاگین Multiplayer در کانستراکت ۲
طرّاحی کلّی یک بازی چندنفره در کانستراکت 2 چیزی شبیه این است.
روند یک بازی چندنفره
چرخهی یک بازی چندنفره شبیه زیر است.
- اتّصال به سیگنالینگ سرور و ورود به آن
- پیوستن به یک روم
- در طول بازی پیرهای دیگر میتوانند به بازی بپیوندند یا از آن خارج شوند.
- اطّلاعات اشیاء مختلف و پیامهای دیگری مثل چت بین پیرهای متّصلشده رد و بدل میشود.
- سرانجام بعد از اتمام بازی، همه روم را ترک میکنند، و شاید وارد یک روم دیگر شوند (برگشت به گام 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 شما را برمیگرداند
ممنون!
در ضمن به نطرم چند تا مشکل هست.
1.چرا نمیشه حتی آواتارو آپلود کرد؟ این دسترسی هم بدید چون آواتار که حجمی نداره!
2. رو هاست رایگان زدید سایت رو؟
3.آموزش ها رو میخواهم ویدیو تهیه کنم با کیفیت بالا میشه ایمیلتونو میدید تا براتون بفرستم؟
4.امیدوارم شما هم آموزش هاتونو ادامه بدید در ضمینه ایونت ها.
بدرود
سلام
1. به جاش گالری آواتار هست و درضمن میتونید آواتارتون رو یه جا دیگه آپلود کنید، بعد لینکش رو بدین. به خاطر همین فکر نمیکنم مشکلی باشه. میترسم بعدا که حجم کاربرا زیاد بشه این آواتارها دردسرساز بشن.
2. خیر. هاست سایت رایگان نیست.
3. ایمیل: [email protected]
4. انشاءالله
سلام
خیلی سایتتون خوب هست
چگونه میشه یک بازی ساده تحت وب در هاست ابلود کرد و اجرا کرد و طوری که قابلیت ثبت نام وجود داشته باشد برای کاربران و هر کاربر هر رکوردی میزنه ثبت بشه و در صفحه ای به صورت عمومی رکوردای کاربران معلوم بشه ؟
اگه امکانش هست کامل توضیح بدید و یا ویدیو اموزشی قرار بدید مطمئنم سوال خیلی هست
تشکر
علیک سلام
نظر لطفتونه
برای ثبت نام که خودتون میتونید یک اسکریپتی نصب کنید که قابلیت ثبت نام داشته باشه یا بعد از رکورد زدن اسم بازیکن رو ازش بپرسید، برای ثبت برترین امتیازها به صورت آنلاین هم تا چند روز دیگه یک آموزش تو سایت قرار میدم.
با سلام این مطلب یا مطالب نوشتاریتان را در قالب PDF هم بگزارید خیلی خوب میشه
با تشکر
سلام.
این آموزش که در قالب PDF هست، بیشتر آموزشهای متنی سایت هم همین طور.
فقط به خاطر بهبود سئوی سایت، نسخهی متنی آموزشها رو هم میذارم.
البته بعضی از آموزشها به خاطر کوتاه بودن PDF نشدند.
لینک دانلود این آموزش هم همین الآن دقیقاً زیر عکس کاور آموزش هست:
http://si2.ir/download/376/
خیلی عالی بود ، ممنون
ممنون از مطالبتون
عالی بود خیلی کمکم کرد
میخواستم اگه میشه ویدیو ها رو هم به صورت متن در سایت بگذارید
و بعضی از عکس رو نمیشه دید(فیزیک در کنستراکت ۲: مفاهیم اوّلیّه) اگه درست کنید ممنون میشم
خسته نباشید
علیک سلام
به خاطر این که وقت زیادی میطلبه امکانش نیست.
خیلی ممنون
مقله خوبی بود
ولی تو این مقاله نگفتید چگونه این کار ها را انجام دهیم
مثل چگونه بازی بسازیم که دو نفر با مسابقه بدهند
سلام
اون مربوط میشه به قسمتهای سوم و چهارم آموزش ساخت بازی چندنفره.، که انشاءالله سرم خلوت بشه شاید ادامه پیدا کنه.
آموزش ساخت چتروم رو هم میتونید ببینید (قسمت دوم آموزش ساخت بازی چندنفره).
با عرض سلام وخسته نباشید فراوان از زحمات شما
اموزشهاتون خیلی عالین
اگه میشه راجب کارکتر های gif هم توضیح بدین برای طراحی حرکت دادان ادم یا حیوانات
سلام من اموزش چت رومو دیدم اما چطوری یه بازی بسازم که دو نفر با هم بازی کنند و همدیگرو ببینند
سلام
اگه آموزش رو دیدهباشید گفتیم هنوز دو قسمت دیگه از آموزشهای چندنفره باقی مونده، که در اونجا به این مسائل هم میرسیم انشاءالله.
سلام.اول تشکر میکنم از اموزشای خوبتون.فقط قسمت دوم و سوم ویدیو هستند.میخواستم خواهش کنم اگه میشه این بخش اول رو هم به صورت ویدیو قرار بدین البته اگه میشه
علیک سلام. این PDF به اندازهی کافی کامل هست، ولی نسخهی ویدئویی این آموزش هم وجود داره.
برای تهیّهی نسخهی ویدئویی این قسمت روی لینک زیر کلیک کنید و فقط جلسهی یازدهم اون رو به مبلغ ۱۰۰۰ تومن بخرید.
http://construct2.ir/showthread.php?tid=609
آثا چقدر مسخره شد.
فقط صد نفر برای عضویت تو بازی؟
سلام
بستگی به سبک بازیتون و نوع اتصال بازیکنها داره.
مثلا پیرتوپیر باشه یا دارای سرور مرکزی باشه فرق میکنه.
یا حتّی سبک بازی هم تأثیر داره، مثلا اگه نیازی به آنلاین بودن همزمان همهی کاربران در یک زمان خاص و بازی کردنشون با هم نیست و اتصال برپایهی سرور مرکزیه تا چندهزارنفر هم شاید بتونن وصل بشن و بازی کنن (مثل بازیهایی شبیه کلش)
ما در این آموزش فرض رو بر این گرفتیم که اتصال پیرتوپیره و همه باید همزمان آنلاین باشن و با هم بازی کنند که در این حالت هم شاید به زور ۲۰ تا بازیکن بتونن آنلاین بازی کنند.
سلام داداش گلم ممنون بابت اموزش هاتون من یک بازی ماشینی 2d کامل ساختم می خوام انلاینش کنم مثل کلش طوری ک هک نشه و سود این زحمت هایی ک کشیدمو بده باید چی کار کنم راستی میشه ایدی تلگرامتو بدی تا بتونم مستقیا با هاتون در ارتبات باشم
علیک سلام
فعلاً همین سه قسمت آموزشو ابتدا ببینید: مفاهیم، چتروم، پنگ
خیر
البته بازیی ک ساختم برای اندروید
داداش چرا تعداد اوینت ها محدود من بخش مرحل بازی حرکت کاراکتر منو لوگو و… ساختم و دیگه نمی زاره چیزی ب بازیم اضافه کنم الان می خوام واس پرداخت درون برنامه ای یه بازیم اوینت بزارم اما ارور میده و یه ادرس وب میده ک فکر کنم باید یچیزی رو بخرم سایتشم کلا انگلیسی باید چی کار کنم
حتماً طبق دستوراتی که در صفحهی دانلود سایت برای کرک کردن برنامه نوشتیم عمل نکردید.
داداش تو قسمت دانلود نو شته فایلc2license این فایل دقیقا کجاست
داخل فایل زیپ که از سایت دانلود میکنید هست.
سلام ببخشید جای بی ربط کامنت میذارم
من از فاروم محروم شدم . فکر کنم اشتباه شده .اخه هر چی فکرشو میکنم دلیلش رو پیدا نمیکنم .. فقط یه موضوع ارسال کردم که تو اون سوال پرسیدم …
سلام، بله، این مشکل برای خیلی از کاربران دیگهمون پیش اومده و خودش درست شده. هنوز نمیدونم مشکل از کجاست، چون محروم نیستید. شما هم با سیستمهای دیگه وارد بشید و… شاید درست شد.
با احترام
سلام و درود خدمت اقای قاسم زاده عزیز
بنده تازه کارم و چند تا سوال سوال داشتم خدمتتون
1 : موتور کانستراکت 2 یک موتور بازی سازی مثل یونیتیه ؟
2 : یونیتی آموزشش دشوار تره یا کانستراک 2
3 :به نظرتون برای ساخت بازی انلاین 2 بعدی کودوم یک از اینها بهتره
4 : آموزش های بازی سازی در وبسایت شما از کد نویسی سی شارب هم استفاده شده ؟ و یا اگر نه از چه کد نویسی استفاده شده
تشکر از وبسایت بسیار خوب و مفیدتون
خدا قوت
علیک سلام
۱. بله، ولی فقط بازی دوبعدی میسازه.
۲. کانستراکت سادهتر هست
۳. اگر تحت وب هست کانستراکت بهتره وگرنه یونیتی
۴. خیر، فقط در آخرین دورهای که برگزار کردیم از جاوااسکریپت هم استفاده کردیم (در آموزشها و دورههای قبلی بدون برنامهنویسی با کانستراکت کار میکردیم)
سلامم
ممنون از وقتی که میذارید و برای هموطناتون مطالب مفید قرار میدید تا اونا هم پیشرفت کنن
من فقط یه سوال دارم
این آموزش(ایجاد بازی آنلاین)فقط در کانسترکت جواب میده یا یونیتی رو هم شامل میشه؟
یعنی برای ساخت بازی در یونیتی همین مراحل رو بریم کافیه یا باید کارای دیگه ای انجام بدیم؟
یا حق
علیک سلام
راهنمای اصلی سایت یونیتی رو که دیدم از لحاظ مفاهیم پایه خیلی شبیه کانستراکت بود. پس این قسمت (و فقط همین قسمت) از سری آموزشهای ساخت بازی چندنفره ی ما میتونه برای یونیتی هم مفید باشه، ولی برای پیاده سازی و کلاسها و تابعهایی که وجود داره باید ببینید مستندات خود یونیتی چی میگه.
سلام داداش اموزش ها درست هست اما هم اموزش شما و هم اموزش سایت سیرا مشکل داره چون وقتی بازی انلاین با همین اموزش شما میسازیم یا سورس های کانستراکت که تست میکنی تو کامپیوتر مشکل نداره چون اطلاعات از یک کامپیوتر که یک میلی مترم دور نیست فرستاده میشه اما اگه با یکی که یک شهر از شما فاصله داری امتحان کنی مشکل در میاد مشکل اینه مثلا اسپرایت من در مختصات30 است اما در اون میشه10 یا هرچی اطلاعات رد بدل با خیلی سرعت کم رد و بدل میشه و همان سورس که در کامپیوتر تست میکنی و یک میلی متر دور نیست میتوان باگ های در ان دید و چه برسه به یک کیلومتر فاصله
ممنون از اموزش ها با تشکر
دو پست مفید مربوط به این موصوع.
انواع معماری ساخت بازی آنلاین از نظر شبکه https://goo.gl/yHdVuG
چگونه سرور بازی آنلاین بنویسیم
https://goo.gl/wDb7gD