PDA

View Full Version : آموزش: کار با فوتون سرور در یونیتی



silsin
سه شنبه 10 دی 1392, 21:55 عصر
عناوین :
تنظیم و اماده سازی PUN در Photon cloud
استفاده از PhotonViews
ارتباط و اتصال به فوتون
دریافت لیست اتاق ها
ساخت و ملحق شدن به یک اتاق
فیلتر کردن نتایج لابی به وسیله اولویت ها
استفاده از ساختار یافتن دوستان
همگام سازی مراحل بین بازیکنان
و در اخر نمونه برنامه چت سیستم به وسیله PUN


مقدمه :
فوتون یونیتی سرور محصول شرکت ExitGames یک از محصولات پرطرفدار در میان توسعه دهنده گان یونیتی برای ساخت بازی ها و کاربرد های تحت شبکه می باشد که با ارائه API مشابه خود شبکه یونیتی اقدام به ارائه راه حل های بهتری برای برطرف کردن مشکلات خود شبکه داخلی یونیتی(مستر سرور) کرده است. خود فوتون یونیتی سرور به وسیله یک سرویس دیگر که ان را با نام فوتون ابری نام می بریم کار می کند .
همانند شبکه یونیتی(مستر سرور) شبکه فوتون یونیتی نیز از udp برای ارتباط استفاده می کند . اما کلیدی ترین تفاوت بین انها این است که کاربر یا همان پلایر به صورت مستقیم به هاست سرور ها دسترسی ندارند . در عوض کاربران با اتصال به شاخه ای از سرور که ان را با نام ابر می شناسیم درخواست اتاق خالی و یا اتاق در دسترس را می نماید . یک اتاق باید به وسیله سرور ساخته شود و کلاینت باید به ان اتاق ملحق شود .


تنظیم PUN در Photon Cloud
برای شروع شما باید به ادرس زیر مراجعه کنید :
https: //Cloud.exitgames.com
پس از اینکه اکانت ایجاد کردید به قسمت Dashboard: My Photon | Application و سپس ساخت یک Application جدید . نام در اینجا مهم نیست اما باید ID را برای استفاده کپی کنید .

سپس وارد Asset Store شده و سپس Photon Unity Networking را جستجو کرده پس از ان شما باید ابتدا Photon Unity Networking Free را ببینید . ان را دانلود کرده و Asset را وارد پروژه کنید .

پس از دانلود پلاگین و وارد کردن ان به یونیتی شما باید با پنجره زیر که از شما sign Up شدن و یا app ID را می خواهد رو به رو شوید .
http://up.udk.ir/uploads/up385781388512768_qqqq.jpg
بر روی Setup کلیک کرده چون شما از قبل ثبت نام کرده بودید نیازی نیست از Send استفاده کنید .
پس از کلیک بر روی Setup و سپس انتخاب ملیت ( توجه داشته باشید که شرکت ExitGame سرور های مختلفی در چندین کشور دارد) . پس از انتخاب ملیت و وارد کردن شماره app ID اکنون می توانید ذخیره کرده و سپس از بابت متصل بودن ان به شبکه فوتون مطمئن باشید . در نظر داشته باشید که در نسخه رایگان کمی محدودیت در پلتفرم ها و تعداد کاربران دارید .
پس از ان شما اماده استفاده از این پلاگین هستید .
محدودیت هایی که از ان نام برده شده :
عدم کار بر روی شبکه های مشابه در iOS و اندروید به وسیله لایسنس رایگان
پشتیبانی کاربران حداکثر 20 نفر
نگه داری و پشتیبانی در اندروید تا 30 روز

silsin
چهارشنبه 11 دی 1392, 11:50 صبح
استفاده از PhotonViews
PUN دارای ویژگی با نام PhotonViews می باشد . این در اصل همان کار ابزار مشابه در خود یونیتی (NetworkViews) را که وظیفه ارسال و دریافت وضعیت ابجکت ها را بر عهده دارد را انجام می دهد . با وجود عملکرد مشابه کمی تفاوت در ان وجود دارد .
خوشبختانه همانطور که در قبل نیز به ان اشاره شد به خاطر طراحی تقریبا مشابه این سیستم با سیستم داخلی خود یونیتی ما شاهد بسیاری از متد ها و عملکرد های یکسان در اینجا نیز خواهیم بود . مثلا در همین بخش ما برای ارسال توابع و متد ها در شبکه امکان استفاده از RPC ها را نیز داریم .
در زیر مثالی را در استفاده از این بخش مشاهده می کنید :




void Update()
{

if(PhotonView.IsMine)
{

if(Input.GetKeyDown(KeyCode.Space))
{




photonView.RPC("TestRPC",PhotonTargets.ALL);
}






}




}

[RPC]
void TestRPC()
{

Debug.Log("An RPC was Called");


}


void OnPhotonSerializeView(PhotonStream stream,PhotonMessageInfi info)
{

if(stream.isWriting)
{

stream.sendNext(Transform.position);


}
else
{


transform.position - (vector3)stream.ReciveNext();


}



}



توجه داشته باشید با اینکه این API مشابه با کاربرد شبکه داخلی خود یونیتی است . اما این دو به صورت کامل با یکدیگر منطبق نیستند و شما نمی توانید از ویژگی های یکی در دیگری استفاده کنید .

silsin
چهارشنبه 11 دی 1392, 12:29 عصر
اتصال به Photon و دریافت لیست اتاق ها
بیاید به PhotonCloud متصل شوید . برای انجام این کار چند راه وجود دارد :
1- شما می توانید به وسیله :
PhotonNetwork.ConnectUsingSettings("1.0");
با تنظیمات از پیش تعریف شده در editor panel (همان پنلی که در ابتدای کار AppId رادر ان وارد کرده بودید) این کار را انجام دهید .
2- شما می توانید به وسیله صدا زدن
PhotonNetwork.ConnectUsingSettings("1.0"); با بررسی Ping به دنبال دسته سرور های مناسب در دسترس گشته و سپس به بهترین انها متصل شوید .
3- شما می توانید به وسیله صدا زدن :
PhotonNetwork.Connect(String ServerAddress,int Port,String AppId,String GameVersoin);
با استفاده از این روش شما می توانید با استفاده از ادرس سرور مناسب به فوتون ابری متصل شوید .

اگر شما از این روش برای اتصال می خواهید استفاده کنید در زیر می توانید ادرس سرور ها را برای این کار مشاهده کنید :
US : app-us.exitgamescloud.com
EU : app-eu.exitgamescloud.com
Asia : app-asia.exitgamescloud.com
japan : app-jp.exitgamescloud.com

در اینجا برای پورت برای اتصال به صورت استاتیک بوده و شما میت وانید به وسیله دستور زیر ان را نیز مقدار دهی کنید :
ServerSettings.DefaultMasterPort;

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

bool joined = false;
void Start () {
PhotonNetwork.ConnectUsingSettings("1.0");
}
void OnJoinedLobby()
{


joined = true;


}


void OnGUI()
{

if(!joined)
{

//reconnect
}
else
{

drawLobby();



}


GUILayout.Label(PhotonNetwork.connectionStateDetai led.ToString());


}

// Update is called once per frame
void drawLobby()
{

if(PhotonNetwork.GetRoomList().Length == 0)
{

//Aren't any Rooms Available to join
Debug.Log("Aren't any Rooms Available to join");
}
else
{

foreach(RoomInfo room in PhotonNetwork.GetRoomList())
{

//show room info to the GUI
Debug.Log(room.name);
}


}



}

silsin
چهارشنبه 11 دی 1392, 15:06 عصر
ساخت و ملحق شدن به یک اتاق :
در اینجا می خواهیم نگاهی به چگونگی ساخت یک اتاق نگاهی بیندازیم .
ساخت یک اتاق :
برای ساخت یک اتاق باید از متد CreateRoom استفاده کنید .
مثال :

void OnGUI()
{

if(PhotonNetwork.room == null)
{

PhotonNetwork.CreateRoom("RoomNameHere",true,true,8);


}

}


مقادیر این متد به شرح زیر می باشند :
1- نام اتاق
2 - ایا قابل مشاهده باشد یا خیر ؟
3 - ایا فعال باشد یا خیر ؟
4 - حداکثر تعداد بازیکنان چقدر باشد ؟

نکته :
در اینجا ما متد هایی را نیز برای نگه داری وضعیت برگشتی از اتصال را نیز داریم که در اینجا به ان callbacks می گوییم

1- OnJoinedLobby
این متد callback در زمان ورود به Lobby صدا زده خواهد شد

2 - OnJoinedRoom
اگر اتاق با موفقیت ایجاد شد

3-OnPhotonJoinRoomFailed و OnPhotonRandomJoinFailed
برای زمانی که ملحق شدن به اتاق با مشکل مواجه شود .

4 - OnPhotonCreateRoomFailed
زمانی که ساخت یک اتاق با مشکل مواجه شود
متاسفانه این مقدار هیچ پارامتری را برای نمایش دلیل این مشکل بر نمی گرداند.


ملحق شدن به یک اتاق :
ملحق شدن به یک اتاق همانند ساخت ان ساده است

PhotonNetwork.JoinRoom(string RoomName);


همچنین به وسیله دستور زیر می توانید از میان اتاق های موجود به صورت تصادفی به یکی از انها ملحق شوید
PhotonNetwork.JoinRandomRoom();

نکته :
call back های مربوط به این متد را نیز پیش از این بررسی کرده ایم .

mojdehi
دوشنبه 17 شهریور 1393, 16:49 عصر
سلام
این پلاگین رو چطور میشه تهیه کرد؟
لینک دانلود دارین؟

mojdehi
دوشنبه 17 شهریور 1393, 16:52 عصر
یک سوال داشتم، game object ها رو چطور تحت شبکه میشه انتقال داد؟ فقط خواهشا راحت توضیح بدین من تازه کارم تو یونیتی :چشمک: