Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

[Unity3d][درس] عمل نظام شبكة _3_

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [Unity3d][درس] عمل نظام شبكة _3_

    السلام عليكم و رحمة الله تعالى و بركاته

    هذا الدرس الثالث من دروس نظام الشبكة

    هذا الدرس مهم جدا و بسيط جدا ايضا , و هو عن نظام 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] قبل الفنكشن مباشرة (اذا كنت تستخدم جافا فستكون @RPC )

    الان سيكون الفنكشن هكذا :

    كود PHP:
    [RPC]
        
    void ChangeColor(){
            
    ball.renderer.material.color Color.blue;
        } 
    حسنا اذا لدينا الفنكشن و الزر , يجب علينا ان نجعل الزر ينادي الفنكشن عند الضغط عليه , لكن هناك طريقة معينة لمناداة فنكشن rpc انظر هنا :

    كود PHP:
    networkView.RPC("ChangeColor",RPCMode.All); 
    كما تلاحظ استخدمنا الكود networkView.RPC لمناداة الفنكشن ثم وضعنا بين القوسين اسم الفنكشن ثم فاصلة ثم وضعنا 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

    اي ملاحظة او مشكلة او خطا ارتكبته اكتبه في رد


    تحياتي
    FaceBook
    Here

    Ask Me
    Here
    My Channel In Youtube
    Here

    ____________________________________________

    لكي تعيش عليك ان تتقن فن التجاهل باحتراف

  • #2
    هناك خطأ يظهر لى فى اخر السكريبت وهو هذه العلامه } كيف اصحح هذا الخطأ وانت لم تفسر الكثير

    تعليق


    • #3
      شرح ممتاز اعجبني التدرج بالموضوع
      لتوصيل الفكره
      اربي سي هو فنكش يتم تنفيذه اي شخص نيابه عن الجميع هذا الي فهمته
      لا اله الا الله واشهد ان محمد رسول الله
      اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
      وتفتك باعدائك اعداء الدين

      تعليق


      • #4
        المشاركة الأصلية بواسطة mido2000 مشاهدة المشاركة
        هناك خطأ يظهر لى فى اخر السكريبت وهو هذه العلامه } كيف اصحح هذا الخطأ وانت لم تفسر الكثير
        اخي السكربت مشروح بكل تفاصيله في الجزء الاول .. و انا فصلت كل ما له علاقة بموضوعنا , اما الباقي المفروض تكون تعرف تعمله و الا الافضل تبدأ تعلم من نقطة قبل هذه

        بالنسبة للخطأ فقط اضف قوس اغلاق في نهاية السكربت

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

        المشاركة الأصلية بواسطة المناهل مشاهدة المشاركة
        شرح ممتاز اعجبني التدرج بالموضوع
        لتوصيل الفكره
        اربي سي هو فنكش يتم تنفيذه اي شخص نيابه عن الجميع هذا الي فهمته
        سعيد ان الشرح اعجبك
        نعم مثلما قلت فنكشن يمكن استخدام الاوامر التي بداخله مع الاطراف الاخرى و يمكن تحديد نوع معين من الاطراف التي يعمل عندها , هذا الشرح من فهمي انا طبعا
        FaceBook
        Here

        Ask Me
        Here
        My Channel In Youtube
        Here

        ____________________________________________

        لكي تعيش عليك ان تتقن فن التجاهل باحتراف

        تعليق

        يعمل...
        X