久久精品国产精品亚洲精品_日日爽爽_国产免费不卡av_男人的网站你懂得_少妇和子乱视频_超碰碰人人

  • 您的位置:首頁 > 新聞動態 > Unity3D

    Unity3d網絡通信 - NetWork組件使用

    2019/5/28??????點擊:

    習Unity3d的過程中,經常上網查閱各位大牛的博客,受益匪淺,從今天開始寫自己在學習過程中遇到的問題,總結歸納下來,方便日后復習

    這兩天在學習Unity的網絡模塊,今天先總結Unity自帶的Network組件相關使用方法

    一.網絡管理物體

    搭建網絡,需要先創建一個空物體用來添加網絡管理組件,首先要給空物體添加以下兩個組件

    注意事項: 1. OffLine Scene代表客戶端連接服務器前,等待的場景(游戲大廳)

    .                   OnLine Scene代表客戶端連接服務器后的場景 (游戲場景)

                      2.Spawn Info 服務器卵生信息 :  把網絡預設體(必須掛有網絡組件) 拖入PlayerPrefab , 服務器會把游戲對象孿生到所有連接的客戶端中

    二.游戲對象

    1.Network Identity

          游戲對象(網絡預設體)需要掛Network Identity組件,該組件是網絡的核心,由服務器Spwan(卵生)的物體都必須具備,該組件在卵生的時候會自動分配assetID和權限

    注意事項:1.ServerOnly 勾選后物體只在服務器中存在

                  2.Local Player Authority勾選后在客戶端中存在

    2.實現狀態同步

     游戲對象的控制腳本需要繼承NetWorkBehaviour組件(依賴于NetWorkIdentity),用來實現RPC技術和狀態同步屬性.
    1.Transform同步
    這個組件負責玩家對象在客戶端發出移動指令后,把該玩家的移動同步到所有客戶端中

    注意事項:1.Net Work Send Rate 表示同步Transform的頻率

                    2.Transform Synv Mode 表示同步的模式,可以選擇同步剛體組件,角色控制器等

    然后在控制腳本編寫代碼

        void Update() {
            if (!isLocalPlayer)   //判斷是否是本地客戶端
            {
                return;
            }
            float x = Input.GetAxis("Horizontal");
            float y = Input.GetAxis("Vertical");
            if (x != 0 || y != 0)
            {
                transform.position += new Vector3(x, 0, y);
            }
    }


    注意事項 1.所有網絡控制腳本必須要繼承 NetWorkBehaviour

                  2.在Update里需要先判斷是否是本地客戶端,不是的話Return~!!!  如果沒有這個判斷條件,在客戶端發出指令,網絡里所有的客戶端都會執行

    2.發射子彈與減血的同步

    經過上邊的步驟,已經可以實現物體在網絡里的移動,但我們想要實現在網絡里發射子彈,受到攻擊后還要減血,這些指令都需要在服務器上執行,先來看一下NetWorkBehaviour的常用特性

    [SyncVar]    用于標識序列化變量,實現變量同步             例: (把Hp標識,就可以實現同步減血)

    [Client]        表示只能在客戶端調用

    [ClientCallBack]   表示客戶端執行的回調

    [Command]  表示客戶端向服務端發送的命令,在服務端執行

    [ClientPrc]  表示服務端向客戶端發送的命令,在客戶端執行

    直接來看代碼如何使用:

    //將血量設置為網絡同步變量
        [SyncVar]
        float hp = 100;
        public Slider slider;       //顯示血量的血條
        public GameObject bullet;   //子彈預設體
        void Start () {
            ClientScene.RegisterPrefab(bullet); //在場景注冊預設體
        }
        void Update () {
            // 2.將血量的值賦給slider
            slider.value = hp / 100f;
            if (!isLocalPlayer)
            {
                return;
            }     
            if (Input.GetKeyDown(KeyCode.Q))
            {
                CmdReduceHp();
            }
            if (Input.GetKeyDown(KeyCode.T))
            {
                CmdFire();
            }
        }
        //減血的方法   標識為Command由服務器執行
        //前綴必須是Cmd 開頭
        [Command]
        public void CmdReduceHp()
        {
            hp -= 10;
        }
         //發射子彈的方法
        [Command]
        public void CmdFire()
        {
            GameObject a= Instantiate(bullet, transform.position+transform.right, Quaternion.identity);
            a.GetComponent().AddForce(transform.right*100);   //給子彈添加向右的力
            NetworkServer.Spawn(a);   //由服務器卵生給連接的客戶端
        }

    注意事項:1.網絡預設體需要先在客戶端場景里注冊一下,才能正常產生              

                   2.hp賦值給Slider要寫在判斷是否是本地客戶端前,血條才會正常同步顯示

                   3.Command修飾的方法,由客戶端發起,服務端執行,方法名前必須加Cmd

                   4.監聽鍵盤事件的Iput.GetKeyDown要放在Update里,不能放在Cmd方法里!!!  (此時方法由服務器調用,無法監聽鍵盤事件)

    3.動畫的同步

       要實現游戲對象的動畫同步,還需要添加一個網絡組件,并給組件指定Animator,并勾選Animator里包含的動畫.

    動畫同步需要注意一點,過度條件是Trigger時需要由客戶端發起指令,在服務端執行,再分發給各個客戶端執行,其他條件正常.

    這里Animator的兩個動畫,attack01條件是bool,attack02條件是Trigger ,代碼如下:

    Animator ani;  
        void Start()
        {
            ani = GetComponent();
        }
         void Update () {
         if (Input.GetKeyDown(KeyCode.Q)) 
            {
                ani.SetBool("attack01", !ani.GetBool("attack01"));        
            }
            if (Input.GetKeyDown(KeyCode.E))
            {
                CmdAttack02();
            }
        }
        [Command]    //服務器執行
        void CmdAttack02()
        {
            RpcPlayTrigger();
        }
        [ClientRpc]   //由服務器端調用,在客戶端執行 
        void RpcPlayTrigger()
        {
            ani.SetTrigger("attack02");
        }
    希望對UNITY愛好者有拋磚引玉的療效,敬請關注WONGLOVE獲取更多UNITY精華。
    主站蜘蛛池模板: 精品美女久久久久 | 久久久久久不卡 | 国产日韩欧美色图 | 国产成人亚洲精品无码Av大片 | 99精品免费久久久久久久久日本 | 国产成人综合激情视频在线观看 | 国产精品久久久久久久久亚洲美女 | 日韩成人亚洲 | 日韩综合一区二区 | 国产一级做a爱片在线看免费 | 国产精品久久国产三级国不卡顿 | 人人干影院| 海角在线观看91一区二区 | 国产丝袜在线观看一区 | 囯产黄色视频一级黄片 | 久久亚洲精品无码观看不卡 | 大胸美女污污污www网站 | 自拍日韩动漫欧美 | 国产免费AV片在线观看播放器 | 老司机亚洲 | 日本高清不卡中文字幕 | 欧美又粗又大色情hd堕落街传奇 | 免费国产一级淫片 | 一级毛片视频 | 天堂久久一区二区三区 | 亚洲欧洲精品一区二区三区不卡 | 欧美老妇与ZOZOZ0交 | 大陆一级毛片免费视频观看i | 日韩中文无 | 久久久久久久久久久久久女过产乱 | 中国男女一级作爱大片 | 亚洲精品国产精品乱码不卞 | 日日干夜夜操 | 好大好深好猛好爽视频拍拍拍 | 久草日韩精品暖暖的在线视频 | 亚洲国产日韩a在线欧观看美 | 成人永久免费视频网站在线观看 | 人妻系列无码专区无码专区 | 成人在线免费看 | 亚洲AV天天做在线观看 | 性一交一乱一伦a片 |