معماری ساخت بازی تحت شبکه با یونیتی

بازی تحت شبکه – تکنولوژی ها و معماری

مقدمه

عنوان این مطلب خیلی بزرگ تر از چیزیه که من بخواهم توضیح بدم و شامل خیلی موارد میشه که شاید همه این اطلاعات رو یه نفر اصلا نتونه داشته باشه ، چه برسه بخواد به دیگران آموزش بده .اما در مجموع من سعی می کنم در این اموزش تجربیات خودم رو که حاصل کار خودم روی بازی فروت کرفت و نبرد قهرمانان(هنوز منتشر نشده) رو در اختیار تون بذارم .

نوع ارتباط تحت شبکه

۱- ریل تایم نیست . یعنی هر قرار نیست همه چی همه جا سینک باشه .برای نمونه بازی های ریل تایم مثل کانتر و دوتا و wow و خیلی بازی های معروف روی PC ریل تایم هستن و بازی های غیر ریل تایم مثل Clash of clans ، فروت کرفت ، خروس جنگی و … .

امیدوارم تفاوت این دو نوع رو درک کرده باشید. به طور کلی توی بازی های غیر ریل تایم Ping، lag ،delay خیلی مطرح نیستن به نسبت بازی های ریل تایم . توی بازی کانتر شما به محض اینکه اینترنتون قطع بشه از بازی خارج می شید ولی توی بازی فروت کرفت مادامی که کاری انجام ندین بازی متوجه قطع بودن اینترنت شما نمیشه .(حتی شاید بتونین کارت ها تون رو نگاه هم بندازین)

۲- در هر لحظه که تبادل اطلاعات مد نظر بود یک درخواست به سرور داده می شه و سرور اطلاعات را در قالب پاسخ بر می گردونه .

 

خوب فکر کنم سبک بازی و نوع بازی دستتون اومده باشه . من می خوام فقط یک دید کلی بهتون بدم . چیزی که خیلی از بازی سازها وقتی می خوان از یک بازی تک نفره به یک بازی چند نفره سوییچ کنن ، ندارن . (یک دید کلی)

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

روند ارتباط

روند کاری توی این بازی ها به این شکل هستش که در سمت سرور شما API دارید . حالا API چیه ؟ API جیز خاصی نیست ، فقط شما یک آدرس اینترنتی رو صدا می کنید و یکسری اطلاعات همراه اون می فرستید (به این می گن Request ) و سرور در جواب یکسری اطلاعات برای شما بر می گردونه (به این میگن Response). در حقیقت شما با صدا کردن یک آدرس اینترنتی یک تابع درون کد های سمت سرور رو صدا می کنید . مثلا فرض کنیم می خوایم آیتم های بازیکن رو لود کنیم . برای این کار یک Request به سرور می زنیم و توش اسم بازیکن رو می فرستیم برای سرور . سرور اسم بازیکن رو بررسی می کنه و در نهایت در Response لیستی از آیتم های بازیکن برای ما(منظور از ما کلاینت بازی است ، همون نرم افزاری که با یونیتی یا هر گیم انجین دیگه می سازیم) می فرسته .

استاندارد های ارتباط

حالا این اطلاعات چجوری رد و بدل می شن ؟ یعنی چی می فرسته می فرستیم و … .

برای اینکه سرور و کلاینت با هم صحبت کنن و اطلاعات رد و بدل کنن باید یک استانداردی وجود داشته باشد . علت وجود استاندارد هم اینه که سرور و کلاینت دو نرم افزار کاملا مجزا هستند و در دو پلتفرم جداگانه با تکنولوژی ها و زبون های غیریکسان(نه لزوما) اجرا میشن ، پس به صورت عادی نمی تونن با هم ارتباط بر قرار کنن . پس برای بر قراری ارتباط به یک استاندارد احتیاج دارن که بتوننن با هم صحبت کنن . معمولا برای رد و بدل کردن داده توی وب از XML یا JSON استفاده می کنن .استفاده از JSON بیشتره چون بهتره و هدر رفت اطلاعات کمتری داره .

البته باید این نکته رو هم اصافه کنم که بهینه ترین راه انتقال اطلاعات تحت شبکه تبدیل اون به باینری است. منتها برای اینکار باید از تکنولوژی های دیگه ای استفاده کنید که یکم کار رو سخت می کنه. به طور مثال کسانی که علاقمند هستند می تونند Thrift رو سرچ کنند.

جمع بندی

خیلی خوب پس تا اینجا فهمیدیم که کلاینت بازی ما یک Request به سرور می زنه (یک URL رو باز می کنه) ، اطلاعاتی که می خواد برای سرور بفرسته رو به شکل JSON در میاره . سرور اطلاعات رو به شکل JSON  دریافت می کنه ، اون رو بازخوانی می کنه . فعالیت مورد نظرش رو انجامی میده و سپس جواب(Response) رو در قالب JSON  برای کلاینت می فرسته . کلاینت JSON رو بازخوانی می کنه و از اطلاعات استفاده می کنه .

خیلی خوب پس نحوه تبادل اطلاعات بین کلاینت و سرور رو یاد گرفتید .

تخصص های مورد نیاز

در درجه اول شما به یکسری بازی ساز احتیاج دارید 🙂 . که توانایی ساخت بازی تک نفره رو داشته باشن (با هر ابزاری ، می خواد یونیتی باشه ، گیم میکر باشه ، کرونا باشه ، کوکوس باشه و …)

سپس شما به یکسری وب دولوپر احتیاج دارید . که توانایی ساخت API ها رو برای شما داشته باشن .(با هر ابزاری و زبونی ، می خواد پی اچ پی زند فریم ورک باشه ، دانت وب ای پی آی باشه ، نود جی اس باشه و …)

علاوه بر اینها شما به حداقل یک سرور احتیاج دارید که برنامه ای که وب دولوپر هاتون می سازن رو روی اون قرار بدید .(قاعدتا دیتابیس اطلاعاتتون هم روی همین سرور قرار خواهد گرفت)

بازی سازهاتون می تونن به این سرور وصل شن و از API ها استفاده کنن .

 

شاید براتون سوال پیش اومده باشه که چه وقت هایی باید به سرور وصل شیم و چه وقت هایی نباید ؟ جواب این سوال به دیزاین بازی شما بستگی داره . این شمایید که تعیین می کنید چه میزان از اطلاعات تون سمت سرور باشه و چه میزان به صورت لوکال روی دستگاه بازیکن ذخیره بشه . همه این ها به نوع بازی شما بستگی داره .

خیلی خوب فکر می کنم کلیت رو گفتم . امیدوار موفق باشید .(متن مقاله از زبان طراح بازی فروت کرفت و نبرد قهرمانان میباشد)

برای اشنایی بیشتر با تکنولوژی های ارتباطی به کار رفته اموزش رایانش ابری یا همان cloud computing  که در سایت قرار دارد را مشاهده نماید

(69 Posts)

جت آموز یکی از به روز ترین سایت های تولید فیلم های اموزشی فارسی در شاخه های فناوری اطلاعات و نت میباشد.هدف ما ارائه اموزش های با کیفیت و ارزان قیمت به تمامی کاربران است.

    4 thoughts on “معماری ساخت بازی تحت شبکه با یونیتی

    1. پیروز

      دمت گرم از مطالبه مفید شما

      ولی یه سوال داشتم : می شه با خود پلاگین یونیتی که می شه باهاش بازی آنلاین درست کنی استفاده کرد ، رایگانه سرورش یا باید بخری

      بهتره از چه پلاگینی یا نرم افزاری برای ساخت بازی های آنلاین استفاده کنیم.

      Reply
      1. سایت لرن Post author

        سلام.شما لطف دارید.میتوانید از کامپوننت نتورک خود یونیتی استفاده کنید
        سرور هم رایگانش هست اما محدود است و شما باید سرور خریداری نماید که حداقل ماهیانه ۳۰ تومان هزینه میبرد !

        Reply
    2. حامد

      ممنون از مطلب مفیدت
      فقط کاش میگفتی نوع سرور چی باید باشه ویندوز؟ لینوکس و…
      و اینکه در همون مثال خودت خروس جنگی به ازای چقدر کاربر انلاین چه سروری باید گرفته بشه

      Reply
      1. جت آموز Post author

        خواهش میکنم.این کاملا وابسته به معماری است که شما بازی خود را پیاده سازی میکنید.
        برای هر بازی هم متفاوت است.
        مثلا یک بازی انلاین که با یونیتی ساحته شده است و از ان خروجی وب گرفته اید را میتوانید با پایگاه داده sql روی یک سرور ویندوزی با حداقل ۲ گیگ رم و ۲ هسته سی پی یو بالا بیاورید که میتواند در لحطه حداکثر ۱۰ کاربر انلاین داشته باشد.
        بازم میگم بسته به نوع بازی و گرافیک و نحوه ارتباط با پایگاه داده منابع بازی هم تغییر میکنه
        مثلا اگر میخواهید یک بازی تنها احراز هویت و امتیاز روی سرور ذخیره شود و خودش روی گوشی فرد اجرا شود کافی است سرور لینوکس با ۱ گیگ رم و یک هسته بخرید و روی ان mysql نصب کنید.

        Reply

    Leave a Reply

    Your email address will not be published. Required fields are marked *