راهنمای اتصال یونیتی

سرویس بلادرنگ «RealTime»

این راهنما به شما برای طراحی بازی هایی با ارتباط شبکه ی در لحظه «RealTime» کمک میکند. این سبک از بازی ها مانند شوتر، مسابقات ماشینی و ... فارغ از محتوی رد و بدل شده نیاز به ارسال پیام سریع و همگام سازی وضعیت میان بازیکنان دارد. برای این منظور گیم سرویس میتواند این ارتباط را برقرار و داده ها را به کاربران برساند. در ادامه روند یک نشست بازی با استفاده از این سرویس را مرور میکنیم:

ابتدا پس از اطمینان از صحت اتصال به گیم سرویس، برای دریافت رویداد های بازی شنونده هایی را تعریف میکنیم:

این شنونده از توابع زیر تشکیل شده است:

RealTimeEventHandlers.JoinedRoom(JoinData joinData , JoinType type);

RealTimeEventHandlers.NewMessageReceived(Message message , MessageType type);

RealTimeEventHandlers.LeftRoom(Leave leave);

RealTimeEventHandlers.RoomMembersDetailReceived(List<Member> members);

RealTimeEventHandlers.AvailableRoomsReceived(List<Room> rooms);

RealTimeEventHandlers.AutoMatchUpdated(AutoMatchStatus status,List<User> players);

RealTimeEventHandlers.InviteInboxReceived(List<Invite> invites);

RealTimeEventHandlers.InvitationSent();

RealTimeEventHandlers.FindUserReceived(List<User> users);

RealTimeEventHandlers.NewInviteReceived(Invite invite);

همچنین با استفاده از توابع زیر میتوانید اعمالی را انجام دهید:

GameService.GSLive.RealTime.CreateRoom(GSLiveOption.CreateRoomOption option);   

GameService.GSLive.RealTime.AutoMatch(GSLiveOption.AutoMatchOption option);   

GameService.GSLive.RealTime.JoinRoom(string roomId);   

GameService.GSLive.RealTime.LeaveRoom();   

GameService.GSLive.RealTime.GetAvailableRooms(string role);   

GameService.GSLive.RealTime.GetRoomMembersDetail();   

GameService.GSLive.RealTime.SendPublicMessage(string data, GProtocolSendType sendType);   

GameService.GSLive.RealTime.SendPrivateMessage(string receiverId , string data);   

GameService.GSLive.RealTime.GetInviteInbox();   

GameService.GSLive.RealTime.InviteUser(string roomId,string userId);   

GameService.GSLive.RealTime.AcceptInvite(string inviteId);   

GameService.GSLive.RealTime.FindUser(string query,int limit);

ایجاد اتاق بازی:

روش دستی:

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

ایجاد اتاق بازی

GameService.GSLive.RealTime.CreateRoom(GSLiveOption.CreateRoomOption option);

برای ایجاد یک اتاق بازی جدید این تابع را صدا بزنید.

متغیر های تابع:

  • option: اطلاعات ساخت یک اتاق بازی جدید مانند نام اتاق، حداکثر و حداقل تعداد بازیکنان، قانون اتاق و خصوصی بودن اتاق را در این بخش تایین می کنید.

دریافت اتاق های فعال

GameService.GSLive.RealTime.GetAvailableRooms(string role);

RealTimeEventHandlers.AvailableRoomsReceived(List<Room> rooms);

برای دریافت لیستی از اتاق های در دسترس برای پیوستن از این تابع استفاده میکنیم. در ورودی این تابع مقدار حالت اتاق دریافت میشود. بدین صورت میتوانید انواع مختلفی از بازی را پشتیبانی کنید. نتیجه این تابع در شنونده AvailableRoomsReceived دریافت میشود.

متغیر های تابع:

  • role: حالت مورد نظر

متغیر های شنونده:

  • rooms: لیستی از اتاق های بازی با قانون داده شده

پیوستن به اتاق بازی

GameService.GSLive.RealTime.JoinRoom(string roomId);

RealTimeEventHandlers.JoinedRoom(JoinData joinData , JoinType type);

با استفاده از آیدی اتاق و صدا زدن این تابع به اتاق مورد نظر متصل میشوید. پس از ورود موفق به اتاق اطلاعات پیوستن شما یا دیگر اعضا در شنونده JoinedRoom دریافت میشود.

متغیر های تابع:

  • roomId: آیدی اتاق بازی مورد نظر

متغیر های شنونده:

  • joinData: اطلاعات مربوط به بازیکن جدید
  • type: نوع اضافه شدن بازیکن جدید که می تواند به صورت AutoMatch یا Normal باشد.

 

روش اتوماتیک «MatchMaking - AutoMatch»:

در این روش با اعلام مشخصات دلخواه به سرور و انتظار در صف پیدا کردن بازیکنان مشابه سرور اقدام به ارتباط دادن بین بازیکنان میکند.

پیدا کردن همبازی

GameService.GSLive.RealTime.AutoMatch(GSLiveOption.AutoMatchOption option);

RealTimeEventHandlers.AutoMatchUpdated(AutoMatchStatus status,List<User> players);

با صدا زدن این تابع با ورودی های دلخواه سرور به دنبال فرد مشابه یا اتاقی با مشخصات مشابه میکند. نتیجه این تابع در صورت به حد نصاب نرسیدن افراد در صف شنونده AutoMatchUpdated با مشخصات افراد در صف و یا در صورت پیدا کردن اتاق دارای ظرفیت یا اتاق جدید شنونده JoinedRoom باشد.

متغیر های تابع:

  • option: اطلاعات ایجاد یک بازی تصادفی مانند حداکثر و حداقل تعداد بازیکنان ، قانون اتاق بازی را در این بخش تایین می کنید.

متغیر های شنونده:

  • status: وضعیت درخواست
  • players: لیستی از بازیکنان

 

دعوت از دوستان:

در این روش ابتدا با یکی از روش های قبل اتاقی را ایجاد میکنیم. سپس میتوانیم دیگر کاربران را برای پیوستن به اتاق دعوت کنیم. برای این منظور ابتدا:

جستجوی کاربر

GameService.GSLive.RealTime.FindUser(string query,int limit);

RealTimeEventHandlers.FindUserReceived(List<User> users);

این تابع با استفاده از مقدار query ورودی لیستی از کاربران را که نام آنها با ورودی مشابهت دارند را در شنونده FindUserReceived باز میگرداند.

متغیر های تابع:

  • query: نام مستعار کاربر
  • limit: محدودیت تعداد کاربران در لیست

متغیر های شنونده:

  • users: لیستی از بازکنان

دعوت از کاربر

GameService.GSLive.RealTime.InviteUser(string roomId, string userId);

RealTimeEventHandlers.InvitationSent();

RealTimeEventHandlers.NewInviteReceived(Invite invite);

حال با استفاده از تابع قبلی کاربر مورد نظر را دعوت میکنیم. نتیجه موفقیت آمیز بودن این تابع در شنونده ی InvitationSent دریافت میشود. در صورتی که کاربر دعوت شده به گیم سرویس متصل باشد اعلانی «Notification» در شنونده ی NewInviteReceived دریافت میکند.

متغیر های تابع:

  • roomId: آیدی اتاق بازی مورد نظر
  • userId: آیدی بازیکن مورد نظر

متغیر های شنونده ی کاربر دعوت شده:

  • invite: اطلاعات مربوط به دعوت

دریافت لیست دعوت ها

GameService.GSLive.RealTime.GetInviteInbox();

GameService.GSLive.RealTime.GetInviteInbox();

در صورتی که کاربر دعوت شده آنلاین نباشد میتواند پس از آنلاین شدن لیستی از دعوت هایی را دریافت کند که هنوز اتاق آنها وجود دارد. نتیجه ای تابع در شنونده ی GetInviteInbox دریافت میشود.

متغیر ها:

  • invites: لیستی از دعوت ها

قبول دعوت

GameService.GSLive.RealTime.AcceptInvite(string inviteId);

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

متغیر ها:

  • inviteId: آیدی دعوتی که به شما شده است

روند بازی:

دریافت لیست بازیکان

GameService.GSLive.RealTime.GetRoomMembersDetail();

RealTimeEventHandlers.RoomMembersDetailReceived(List<Member> members);

این تابع کاربردی برای دریافت تمامی کاربرانی است که هم اکنون به اتاق متصل هستند. مقادیر دریافتی از این تابع برای مشخص کردن وضعیت نشست بازی و مقایسه مقادیر و نتیجه نهایی بازی بسیار مفید است. نتیجه این تابع را میتوانید در شنونده ی RoomMembersDetailReceived دریافت کنید.

متغیر ها:

  • members: لیست بازیکنان اتاق

ارسال پیام عمومی

GameService.GSLive.RealTime.SendPublicMessage(string data, GProtocolSendType sendType);

RealTimeEventHandlers.NewMessageReceived(Message message , MessageType type, SendType type);

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

پیام های تضمین نشده با نرخ مشخصی از سمت سرور به دیگر کاربران ارسال میشوند. بنابراین پیام های ارسالی میان این دوره های ارسال از بین میروند و در هنگام ارسال نیز رسیدن آنها تصمین نمیشود. این ارسال سرعت بالاتری دارد و برای پیام هایی که پیام بعدی آنها را اصلاح میکند مانند حرکت پیوسته کاربر در بازی استفاده میشود.

توجه کنید که استفاده از پیام های تضمین شده در بازی هایی با ارسال پیوسته میتواند تاخیر در بازی را به همراه داشته باشد. همچنین تعداد ارسال و دریافت این پیام ها محدود است. این کار باعث جلوگیری از ازدحام پیام های ارسالی خواهد شد.

متغیر های تابع:

  • data : پیام مورد نظر

 

ارسال پیام خصوصی

GameService.GSLive.RealTime.SendPrivateMessage(string receiverId , string data);

RealTimeEventHandlers.NewMessageReceived(Message message , MessageType type);

این تابع داده ای را به فرد خاصی از اعضای بازی ارسال میکند و دیگر کاربران داده و اطلاعات فرد ارسال کننده را در شنونده ی NewMessageReceived دریافت میکنند.

متغیر های تابع:

  • receiverId: آیدی بازیکن مورد نظر
  • data: پیام مورد نظر

متغیر های شنونده:

  • message: اطلاعات مربوط به پیام ارسال شده
  • type: باشد Private یا Public نوع پبام ارسال شده که می تواند به صورت

ترک اتاق بازی

GameService.GSLive.RealTime.LeaveRoom();

RealTimeEventHandlers.LeftRoom(Leave leave);

در صورت تمایل به ترک نشست فعال این تابع را صدا میزنیم. در صورت موفقیت آمیز بود این تابع برای تمامی اعضای بازی شنونده ی OnLeave صدا میخورد.

متغیر های شنونده:

  • leave : اطلاعات مربوط به بازیکنی که اتاق بازی را ترک کرده است