美景之屋5在线观看_成人区精品一区二区婷婷_91av在线视频播放_午夜影院在线_一本久久综合亚洲鲁鲁五月天_国产精品一区在线观看

  • 您的位置:首頁 > 新聞動態(tài) > Unity3D

    Unity3d網(wǎng)絡(luò)通信 - NetWork組件使用

    2019/5/28??????點(diǎn)擊:

    習(xí)Unity3d的過程中,經(jīng)常上網(wǎng)查閱各位大牛的博客,受益匪淺,從今天開始寫自己在學(xué)習(xí)過程中遇到的問題,總結(jié)歸納下來,方便日后復(fù)習(xí)

    這兩天在學(xué)習(xí)Unity的網(wǎng)絡(luò)模塊,今天先總結(jié)Unity自帶的Network組件相關(guān)使用方法

    一.網(wǎng)絡(luò)管理物體

    搭建網(wǎng)絡(luò),需要先創(chuàng)建一個空物體用來添加網(wǎng)絡(luò)管理組件,首先要給空物體添加以下兩個組件

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

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

                      2.Spawn Info 服務(wù)器卵生信息 :  把網(wǎng)絡(luò)預(yù)設(shè)體(必須掛有網(wǎng)絡(luò)組件) 拖入PlayerPrefab , 服務(wù)器會把游戲?qū)ο髮\生到所有連接的客戶端中

    二.游戲?qū)ο?/strong>

    1.Network Identity

          游戲?qū)ο?網(wǎng)絡(luò)預(yù)設(shè)體)需要掛Network Identity組件,該組件是網(wǎng)絡(luò)的核心,由服務(wù)器Spwan(卵生)的物體都必須具備,該組件在卵生的時(shí)候會自動分配assetID和權(quán)限

    注意事項(xiàng):1.ServerOnly 勾選后物體只在服務(wù)器中存在

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

    2.實(shí)現(xiàn)狀態(tài)同步

     游戲?qū)ο蟮目刂颇_本需要繼承NetWorkBehaviour組件(依賴于NetWorkIdentity),用來實(shí)現(xiàn)RPC技術(shù)和狀態(tài)同步屬性.
    1.Transform同步
    這個組件負(fù)責(zé)玩家對象在客戶端發(fā)出移動指令后,把該玩家的移動同步到所有客戶端中

    注意事項(xiàng):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);
            }
    }


    注意事項(xiàng) 1.所有網(wǎng)絡(luò)控制腳本必須要繼承 NetWorkBehaviour

                  2.在Update里需要先判斷是否是本地客戶端,不是的話Return~!!!  如果沒有這個判斷條件,在客戶端發(fā)出指令,網(wǎng)絡(luò)里所有的客戶端都會執(zhí)行

    2.發(fā)射子彈與減血的同步

    經(jīng)過上邊的步驟,已經(jīng)可以實(shí)現(xiàn)物體在網(wǎng)絡(luò)里的移動,但我們想要實(shí)現(xiàn)在網(wǎng)絡(luò)里發(fā)射子彈,受到攻擊后還要減血,這些指令都需要在服務(wù)器上執(zhí)行,先來看一下NetWorkBehaviour的常用特性

    [SyncVar]    用于標(biāo)識序列化變量,實(shí)現(xiàn)變量同步             例: (把Hp標(biāo)識,就可以實(shí)現(xiàn)同步減血)

    [Client]        表示只能在客戶端調(diào)用

    [ClientCallBack]   表示客戶端執(zhí)行的回調(diào)

    [Command]  表示客戶端向服務(wù)端發(fā)送的命令,在服務(wù)端執(zhí)行

    [ClientPrc]  表示服務(wù)端向客戶端發(fā)送的命令,在客戶端執(zhí)行

    直接來看代碼如何使用:

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

    注意事項(xiàng):1.網(wǎng)絡(luò)預(yù)設(shè)體需要先在客戶端場景里注冊一下,才能正常產(chǎn)生              

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

                   3.Command修飾的方法,由客戶端發(fā)起,服務(wù)端執(zhí)行,方法名前必須加Cmd

                   4.監(jiān)聽鍵盤事件的Iput.GetKeyDown要放在Update里,不能放在Cmd方法里!!!  (此時(shí)方法由服務(wù)器調(diào)用,無法監(jiān)聽鍵盤事件)

    3.動畫的同步

       要實(shí)現(xiàn)游戲?qū)ο蟮膭赢嬐?還需要添加一個網(wǎng)絡(luò)組件,并給組件指定Animator,并勾選Animator里包含的動畫.

    動畫同步需要注意一點(diǎn),過度條件是Trigger時(shí)需要由客戶端發(fā)起指令,在服務(wù)端執(zhí)行,再分發(fā)給各個客戶端執(zhí)行,其他條件正常.

    這里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]    //服務(wù)器執(zhí)行
        void CmdAttack02()
        {
            RpcPlayTrigger();
        }
        [ClientRpc]   //由服務(wù)器端調(diào)用,在客戶端執(zhí)行 
        void RpcPlayTrigger()
        {
            ani.SetTrigger("attack02");
        }
    希望對UNITY愛好者有拋磚引玉的療效,敬請關(guān)注WONGLOVE獲取更多UNITY精華。
    主站蜘蛛池模板: 日日噜噜夜夜狠狠久久丁香五月 | 成人综合av | 特一级黄色毛片 | 国产高清成人久久 | 麻豆xfplay国产在线观看 | 奶茶视频有容乃大 | 91精品综合久久久久久久久久久 | 欧美视频三区 | 国产性受xxxx黑人xyx性爽 | 极品少妇高潮到爽 | 伊人75在线| 人人妻人人做人人爽精品 | 亚洲品质自拍视频网站 | 欧美激情免费在线 | 波多野结衣好大好紧好爽 | 特级做爰片毛片免费看小说 | 成人国产一区二区三区精品 | 亚洲性夜夜综合久久7777 | 欧美一级免费黄色片 | 91精品综合久久久久久五月天 | 张柏芝三级在线观看 | 国产精品一区在线免费观看 | 国产OO后高中生在线视频 | ⅹ一art欧美唯美在线 | 老熟妇性老熟妇性色 | 国内揄拍高清国内精品对白 | 日日躁夜夜躁狠狠躁aⅴ蜜 精品国产91久久久久 | 久久人妻无码AⅤ毛片A片麻豆 | 日韩高清免费看 | 掏空网午夜| 狠狠爱天天操 | 国产精品亚洲视频 | 无码人妻精一区二区三区 | 2015天堂网 | 国产色婷婷精品综合在线 | 亚洲а∨天堂久久精品 | 国产一级免费视频 | 丝袜美腿视频一区二区三区 | 在线视频播放大全 | 视频二区欧美 | 成人精品一区二区三区中文字幕 |