آنلاین سازی بازی (پکیج های یونیتی)
فهرست مطالب
آخرین به روزرسانی در 29/07/2022
در این مقاله قصد داریم در رابطه با کلیت و آشنایی با نحوه ی آنلاین سازی بازی در یونیتی صحبت کنیم .
ما در این مقاله وارد جزئیات نمی شویم و به نکات کلی در رابطه با نحوه ی آنلاین سازی بازی در یونیتی
خواهیم پرداخت . ما به ارائه ی شبکه های مورد استفاده برای آنلاین سازی بازی در یونیتی خواهیم پرداخت و توضیحات کلی ای را در رابطه با هر کدام از آن ها و ویژگی هایشان ارائه می دهیم .
لازم به ذکر است همانطور که گفته شد مبنای آنلاین سازی بازی با موتور بازی سازی یونیتی در نظر گرفته شده است .
برای درک بهتر این مقاله پیشنهاد می شود در ابتدا با موتور بازی سازی یونیتی آشنایی نسبی داشته باشید.
پکیج های یونیتی
برای آنلاین سازی و بخش شبکه ی بازی ها در یونیتی معمولا ما از پکیج هایی استفاده می کنیم .
تا چندین ماه پیش ما برای ساخت و توسعه ی بازی های آنلاین و پیاده سازی بخش شبکه ی آنها از
پکیج Unet استفاده می کردیم اما یونیتی به دلایلی این پکیج را منسوخ کرد و دیگر شما نمی توانید با
استفاده از آن به پیاده سازی بخش شبکه ی بازی بپردازید .
اما در حال حاضر اکثریت بازی سازان از پکیج Mirror که از کامل ترین و بهترین پکیج های یونیتی
برای بخش شبکه می باشد استفاده و به پیاده سازی بازی بخش آنلاین بازی می پردازند که ما در ادامه قصد داریم به معرفی این پکیج و ساخت یک سیستم چت آنلاین بپردازیم ، سیستمی که شاید در بسیاری از بازی های آنلاین مورد استفاده قرار می گیرد ، پس تا پایان این مقاله با ما همراه باشید .
نصب شبکه Mirror
اولین قدم برای شروع کار نصب Mirror است. این یک پکیج Unity است بنابراین نصب آن بسیار ساده می باشد.
به صفحه ی مربوط به Mirror در Unity asset store بروید
سپس روی “ Add to My Assets ” کلیک کنید.
مراحل نصب را دنبال کنید تا با Unity باز شود، پکیج را دانلود کرده و در برنامه خود نصب کنید.
برای اینکه Mirror GameObjects نمایش داده شود، Unity را مجددا راه اندازی کنید.
راه اندازی Network Manager
پس از راه اندازی مجدد Unity، یک GameObject خالی ایجاد کنید و نام آن را NetworkManager بگذارید.
این شامل اجزای Mirror مورد نیاز برای ایجاد اتصالات سرور و پخش کننده است.
به NetworkManager، یک کامپوننت NetworkManager که Telepathy Transport را اضافه می کند
و NetworkManagerHUD اضافه کنید. فعلاً همه فیلدها را با تنظیمات پیشفرض آنها رها کنید.
راه اندازی باکس چت
اگر در حال توسعه یک بازی هستید، کاربر می تواند یک شی یا شخصیت در بازی شما باشد.
وقتی بازیکنان به بازی میپیوندند، به عنوان آن شی یا شخصیت نشان داده میشوند.
از آنجایی که ما در حال ایجاد یک چت مستقل هستیم، هر یک از اشکال پیش فرض باید کار کند.
ما یک مکعب را انتخاب کردیم، اما با خیال راحت یکی از اشکال استاندارد دو بعدی یا سه بعدی را می توانید به دلخواه انتخاب کنید.
یک شی Cube به صحنه اضافه کنید.
یک جعبه چت استاندارد ، جدیدترین متن را در پایین نمایش میدهد و متن قدیمی را با ورود پیامهای جدید به سمت بالا می فرستند .
در لپتاپ یا دسکتاپ، کاربران معمولاً میتوانند با زدن دکمه Enter یا Return در دستگاه خود پیام ارسال کنند.
در نهایت، با حجم زیاد متن، کاربران می توانند برای مشاهده پیام های قبلی به بالا اسکرول کنند.
ما تمام عملکردهای بالا را شبیه سازی می کنیم.
یک شی Canvas را به عنوان فرزند شی Cube اضافه کنید.
این Canvas تمام ویژگی های رابط کاربری مورد نیاز ما برای یک جعبه چت کاربردی را در خود جای می دهد.
در Inspector، UI Scale Mode را در Canvas Scaler روی Scale with Screen Size تنظیم کنید
و رزولوشن مرجع را به وضوح صفحه خود تغییر دهید :
سپس، یک شی Panel را به عنوان فرزند شی Canvas که اضافه کرده اید، اضافه کنید.
در Inspector، یک Vertical Layout Group را به پنل اضافه کنید.
علامت Height in Child Force را بردارید و Child Alignment را به Upper Center تغییر دهید :
به شی Panel، درchildren یک شی Scroll View و یک شی InputField اضافه کنید.
در نهایت به این سلسله مراتب می رسیم :
اسکرول و نمایش متن از پایین به بالا
به منظور دستیابی به ظاهر استاندارد باکس چت، ما می خواهیم نمای اسکرول خود را اصلاح کنیم.
قسمت Scroll View → Viewport، Content را حذف کنید.
به جای استفاده از فرزند محتوای پیشفرض، آن را با یک شی Text جایگزین میکنیم.
یک شیء متنی را به عنوان Child of Viewport اضافه کنید.
روی Scroll View کلیک کنید و در Inspector، شی Text را روی Content در زیر Scroll Rect بکشید و رها کنید (ما نام شی Text خود را ChatText گذاشتیم) :
شیء متنی که اضافه کردیم حاوی تمام پیامهای ارسال شده در برنامه خواهد بود.
بنابراین، با اضافه شدن پیامهای جدید، به گسترش یافتن آن نیاز داریم.
برای انجام این کار، یک کامپوننت Content Size Fitter به متن اضافه کنید.
Vertical Fit را روی Preferred Size تنظیم کنید:
در Rect Transform، Text’s Pivot x و y را به صورت زیر وارد کنید :
X = 0.5 و Y = 0.01
ممکن است مجبور شوید متن را به گونه ای تنظیم کنید که فضای مناسبی را در نمای پیمایش اشغال کند.
در صورت نیاز متن از پیش تعیین شده را در شی Text حذف کنید و رنگ متن را به دلخواه تنظیم کنید.
شما باید در نهایت چیزی شبیه به تصویر زیر داشته باشید :
اسکریپت شبکه
خب در این بخش ما قصد داریم یک اسکریپت ساده اضافه کنیم تا به کار امکان ارسال پیام و نمایش آن پیام ها در سرور را بدهد.
اگر سرور هم به عنوان سرور و هم به عنوان کاربر ثبت شده باشد، می تواند پیام ارسال کند. (در ادامه منظور خود را بهتر ارائه می دهیم.)
ابتدا یک اسکریپت به پروژه خود اضافه کنید (در Project کلیک راست کرده و به Create → C# Script بروید).
اسکریپت را چیزی مرتبط نامگذاری کنید، مانند ChatBehavior. ، حال روی اسکریپت جدید دوبار کلیک کنید.
پس از دوبار کلیک به ویرایشگر کد پیشفرض خود خواهید رفت . (ویرایشگر ما ویژوال استودیو است).
اگر قبلا هرگز یک اسکریپت C# را از Unity باز نکرده اید، ممکن است از شما خواسته شود ویرایشگر خود را انتخاب کنید.
“ویژوال استودیو” یا “ویژوال استودیو کد” بهترین کاربری را دارند زیرا هر دو دارای پلاگین هایی هستند
که می توانید برای برقراری ارتباط با یونیتی نصب کنید و صحنه را مطابق با تغییرات اسکریپت خود به صورت کاملا ریل تایم به روز کنید.
(لازم به ذکر است که حتما نام کلاس را بر اساس نام اسکریپت خود تغییر دهید).
در حال حاضر سه متغیر وجود دارد، یکی برای Text که همه پیام ها را نمایش می دهد،
یکی برای InputField که کلاینت پیام های جدید را در آن تایپ می کند و
دیگری برای خود Canvas و Canvas تنها زمانی برای مشتری قابل مشاهده است که به سرور متصل باشد.
وقتی مشتری دکمه Enter یا Return را روی صفحه کلید خود میزند، تا زمانی که InputField خالی نباشد،پیامی که در آن وجود دارد برای همه افراد روی سرور ارسال میشود.
اتصال اسکریپت
هنگامی که اسکریپت را در اختیار داریم، اکنون می توانیم به اتصال آن با عناصر UI بپردازیم.
روی شی Cube در Hierarchy کلیک کنید و یک کامپوننت NetworkIdentity به آن اضافه کنید.
تنظیمات را به عنوان پیش فرض بگذارید. سپس اسکریپت جدیدی را که اضافه کردهایم به Cube بکشید و رها کنید.
متغیرهای مناسب را به هر یک از متغیرهای خصوصی در اسکریپت اضافه کنید :
روی Canvas کلیک کنید و تیک کادر سمت چپ نام آن را بردارید.
تا زمانی که متد ()OnStartAuthority فراخوانی نشود Canvas را مخفی می کند :
شی Cube را به پنل Unity Project بکشید (ترجیحاً در یک پوشه پیش ساخته) تا بتوان از آن به عنوان
player prefab برای مدیریت شبکه ما استفاده کرد.
به قسمت Network Manager در NetworkManager بروید.
Prefab Cube را از پنل Project به Player Prefab در قسمت Player Object بکشید و رها کنید.
شی Cube را در Hierarchy حذف کنید زیرا دیگر به آن نیاز نداریم.
مکعب ما به ازای هر کاربر در هنگام اتصال ایجاد می شود.
آخرین کاری که باید انجام دهیم این است که به InputField زیر Cube → Canvas → ChatPanel برویم
(برای دیدن Cube در سلسله مراتب روی Prefab Cube دوبار کلیک کنید) و event شنونده ( listener) اضافه کنید.
این ایونت به ما این امکان را می دهد که وقتی Enter یا Return را روی صفحه کلید خود فشار می دهیم، () Send را فراخوانی کنیم.
در قسمت Input Field → On End Edit، پیش ساخته Cube را به None (Object) بکشید و مطمئن شوید که Runtime Only درست بالای آن انتخاب شده است. روی منوی کشویی No Function کلیک کنید و ChatBehavior → Send را انتخاب کنید.
اجرای برنامه
برای اجرای برنامه، باید دو پنجره مختلف داشته باشید، یکی به عنوان سرور و دیگری یک کلاینت.
ما از یک نسخه ساخته شده و پنجره Unity خود به عنوان دو نقش استفاده خواهیم کرد.
روی File → Build Settings کلیک کنید و صحنه ای را که می خواهید بسازید انتخاب کنید (یا روی Add Open Scenes کلیک کنید).
Build and Run را در گوشه سمت راست پایین پنجره Build Settings انتخاب کنید.
هنگامی که برنامه ساخته شد، باید آن را با دکمه های زیر اجرا کنید:
Mirror گزینههای پیشفرض را به شما میدهد تا بهعنوان سرور + کاربر، فقط کاربر یا فقط سرور اجرا شود.
از آنجایی که می خواهیم بتوانیم از این پنجره با چت استفاده کنیم، Host (Server + Client) را انتخاب می کنیم.
سپس باید کادر چت را مشاهده کنید که ظاهر می شود.
به Unity رفته و روی Play کلیک کنید.
همان صفحه شروع نشان داده می شود، فقط این بار باید کاربر را انتخاب کنیم.
پس از پیوستن کاربر، می توانید از هر دو طرف پیام ارسال کنید.
قبل از اینکه به عنوان کاربر ملحق شوید، مطمئن شوید که سرور را حداقل در یک پنجره راه اندازی کرده اید.
جمع بندی
ما در مقاله هدفمان آشنایی و یادگیری آنلاین سازی بازی با استفاده از یونیتی بوده است.
اما فراموش نکنید که هر موتور بازی سازی متد آنلاین سازی مختص خود را دارد.
و حتی ما به صورت مجزا سرویس های آنلاین سازی بازی ای را نیز داریم که پروسه ی آنلاین سازی بازی ما را انجام می دهند.
پس به خاطر داشته میزان بهینه سازی متدهای آنلاین سازی بازی وابسته به بازی و سبک بازی شما متفاوت می باشد.
مهرشاد شادان مهر
مدرس سئو ، طراح سایت ، انیماتور
قهرمان زندگی شما در چند سال آینده ی شما می باشد