السلام عليكم و رحمة الله تعالى و بركاته
هذا الدرس الثالث من دروس نظام الشبكة
هذا الدرس مهم جدا و بسيط جدا ايضا , و هو عن نظام RPC
اولا اذا لم تكن متابع للدرسين الماضيين يجب ان تفهمهم لكي تقدر على فهم هذا الدرس
الدرس الاول : http://www.maxforums.net/showthread.php?t=223538
الدرس الثاني : http://www.maxforums.net/showthread.php?t=223574
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ـــــــــ
بس الله نبدأ:
نظام الـ RPC يتيح لك تحويل فنكشن الى فنكشن مشتركة بين المتصلين بالشبكة
اكيد لم تفهم كلامي
ستفهم ان شاء الله في المثال البسيط التالي
سنقوم في هذا المثال بعمل كرة يتغير لونها عند الضغط على زر معين , لكن سيتغير لونها عند اللعبتين بمجرد الضغط من طرف واحد
نبدأ:
اولا نقوم بعمل كرة في البروجكت نفسه يلي استخدمناه في دروسنا السابقة
ونضعها في مكان ظاهر على الكاميرا
ثم ندخل الى سكربت الـ connect
نقوم بعمل متغير نسميه ball نخزن فيه الكرة كالتالي:
نضيف الكرة الى هذا المتغير
ثم سنصنع زر ليتم الضغط عليه
ونقوم بعمل فنكشن عادي بداخله كود تغيير لون الكرة
السكربت الكامل حتى الان:
الان ياتي دور الـ RPC
كي نجعل الفنكشن RPC نقوم بوضع كلمة [RPC] قبل الفنكشن مباشرة (اذا كنت تستخدم جافا فستكون @RPC )
الان سيكون الفنكشن هكذا :
حسنا اذا لدينا الفنكشن و الزر , يجب علينا ان نجعل الزر ينادي الفنكشن عند الضغط عليه , لكن هناك طريقة معينة لمناداة فنكشن rpc انظر هنا :
كما تلاحظ استخدمنا الكود networkView.RPC لمناداة الفنكشن ثم وضعنا بين القوسين اسم الفنكشن ثم فاصلة ثم وضعنا RPCMode.All
ستسألني ما هذا ؟
هذا اتجاه المناداة : يعني عندما تضع RPCMode.All فسيتم تنفيذ الفنكشن عند جميع من هم متصلين بما فيهم السيرفر , يوجد انواع ثانية مثل RPCMode.Server يتم تنفيذ الفنكشن عند السيرفر فقط
يمكنك رؤية الانواع هنا : http://docs.unity3d.com/Documentatio...e/RPCMode.html
في حالتنا استخدمنا all لاننا نريد ان يتم تنفيذ الاوامر التي في الفنكشن للجميع
اذا سيصبح الكود هكذا :
الان قم بالتجربة
قم بالاتصال ثم اضغط على زر change color ستلاحظ تغيّر لون الكرة في الطرفين
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ـــــــــــــــــــــــــــــــــــ
هنا نصل الى نهاية درسنا
اتمنى ان تكونوا استفدتم
هذا كان تطبيق بسيط جدا
في الدرس القادم ان شاء الله سوف نقوم بعمل مثال اكثر تعقيدا عن RPC
اي ملاحظة او مشكلة او خطا ارتكبته اكتبه في رد
تحياتي
هذا الدرس الثالث من دروس نظام الشبكة
هذا الدرس مهم جدا و بسيط جدا ايضا , و هو عن نظام RPC
اولا اذا لم تكن متابع للدرسين الماضيين يجب ان تفهمهم لكي تقدر على فهم هذا الدرس
الدرس الاول : http://www.maxforums.net/showthread.php?t=223538
الدرس الثاني : http://www.maxforums.net/showthread.php?t=223574
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ـــــــــ
بس الله نبدأ:
نظام الـ RPC يتيح لك تحويل فنكشن الى فنكشن مشتركة بين المتصلين بالشبكة
اكيد لم تفهم كلامي
ستفهم ان شاء الله في المثال البسيط التالي

سنقوم في هذا المثال بعمل كرة يتغير لونها عند الضغط على زر معين , لكن سيتغير لونها عند اللعبتين بمجرد الضغط من طرف واحد
نبدأ:
اولا نقوم بعمل كرة في البروجكت نفسه يلي استخدمناه في دروسنا السابقة
ونضعها في مكان ظاهر على الكاميرا
ثم ندخل الى سكربت الـ connect
نقوم بعمل متغير نسميه ball نخزن فيه الكرة كالتالي:
كود PHP:
public GameObject ball;
ثم سنصنع زر ليتم الضغط عليه
كود PHP:
if(GUI.Button(new Rect(5,60,100,25),"ChangeColor"))
كود PHP:
void ChangeColor(){
ball.renderer.material.color = Color.blue;
}
كود PHP:
using UnityEngine;
using System.Collections;
public class connect : MonoBehaviour {
public string IP = "127.0.0.1";
public int Port = 25555;
public GameObject ball;
void OnGUI(){
if(Network.peerType == NetworkPeerType.Disconnected){
IP = GUI.TextArea(new Rect(105,5,100,25),IP);
if(GUI.Button(new Rect(5,5,100,25),"Start Server")){
Network.InitializeServer(10,Port);
}
if(GUI.Button(new Rect(5,35,100,25),"Connect")){
Network.Connect(IP,Port);
}
}
else{
if(Network.peerType == NetworkPeerType.Client){
if(GUI.Button(new Rect(5,35,100,25),"Disconnect")){
Network.Disconnect();
}
}
if(Network.peerType == NetworkPeerType.Server){
if(GUI.Button(new Rect(5,35,100,25),"Turn off server")){
Network.Disconnect();
}
}
}
if(GUI.Button(new Rect(5,65,100,25),"ChangeColor")){
}
}
void ChangeColor(){
ball.renderer.material.color = Color.blue
}
كي نجعل الفنكشن RPC نقوم بوضع كلمة [RPC] قبل الفنكشن مباشرة (اذا كنت تستخدم جافا فستكون @RPC )
الان سيكون الفنكشن هكذا :
كود PHP:
[RPC]
void ChangeColor(){
ball.renderer.material.color = Color.blue;
}
كود PHP:
networkView.RPC("ChangeColor",RPCMode.All);
ستسألني ما هذا ؟
هذا اتجاه المناداة : يعني عندما تضع RPCMode.All فسيتم تنفيذ الفنكشن عند جميع من هم متصلين بما فيهم السيرفر , يوجد انواع ثانية مثل RPCMode.Server يتم تنفيذ الفنكشن عند السيرفر فقط
يمكنك رؤية الانواع هنا : http://docs.unity3d.com/Documentatio...e/RPCMode.html
في حالتنا استخدمنا all لاننا نريد ان يتم تنفيذ الاوامر التي في الفنكشن للجميع
اذا سيصبح الكود هكذا :
كود PHP:
using UnityEngine;
using System.Collections;
public class connect : MonoBehaviour {
public string IP = "127.0.0.1";
public int Port = 25555;
public GameObject ball;
void OnGUI(){
if(Network.peerType == NetworkPeerType.Disconnected){
IP = GUI.TextArea(new Rect(105,5,100,25),IP);
if(GUI.Button(new Rect(5,5,100,25),"Start Server")){
Network.InitializeServer(10,Port);
}
if(GUI.Button(new Rect(5,35,100,25),"Connect")){
Network.Connect(IP,Port);
}
}
else{
if(Network.peerType == NetworkPeerType.Client){
if(GUI.Button(new Rect(5,35,100,25),"Disconnect")){
Network.Disconnect();
}
}
if(Network.peerType == NetworkPeerType.Server){
if(GUI.Button(new Rect(5,35,100,25),"Turn off server")){
Network.Disconnect();
}
}
}
if(GUI.Button(new Rect(5,65,100,25),"ChangeColor")){
networkView.RPC("ChangeColor",RPCMode.All);
}
}
[RPC]
void ChangeColor(){
ball.renderer.material.color = Color.blue
}
}
قم بالاتصال ثم اضغط على زر change color ستلاحظ تغيّر لون الكرة في الطرفين

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ـــــــــــــــــــــــــــــــــــ
هنا نصل الى نهاية درسنا

اتمنى ان تكونوا استفدتم
هذا كان تطبيق بسيط جدا
في الدرس القادم ان شاء الله سوف نقوم بعمل مثال اكثر تعقيدا عن RPC
اي ملاحظة او مشكلة او خطا ارتكبته اكتبه في رد
تحياتي
تعليق