最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

5.Unity-Mirror網(wǎng)絡(luò)框架基礎(chǔ)

2022-08-31 02:30 作者:機(jī)智的小草yns  | 我要投稿

簡(jiǎn)介:

Mirror是一個(gè)開源Unity網(wǎng)絡(luò)框架,可用于快速開發(fā)聯(lián)機(jī)項(xiàng)目。

Mirror項(xiàng)目地址::https://github.com/vis2k/Mirror

文檔:https://mirror-networking.gitbook.io/docs/


官方提供了很多demo ,先從Tanks的demo入門。

打開項(xiàng)目的Tanks文件夾中的Scene,打包即可測(cè)試聯(lián)機(jī)

Tanks

1.NetworkManager?

NetworkManager作為項(xiàng)目網(wǎng)絡(luò)連接的核心。

NetworkManager的Inspector面版有兩個(gè)比較核心的配置:

一是PlayerPrefab,當(dāng)玩家連接成功時(shí),生成的玩家對(duì)象。

二是OnlineScene,聯(lián)網(wǎng)時(shí)的網(wǎng)絡(luò)場(chǎng)景。


使用NetworkManager啟動(dòng):

NetworkManager.StartClient(); //啟動(dòng)客戶端

NetworkManager.StartHost(); //啟動(dòng)服務(wù)器

NetworkManagerStartHostClient(); //啟動(dòng)服務(wù)器&客戶端


2.NetworkBehaviour介紹

NetworkBehaviour 作為網(wǎng)絡(luò)對(duì)象的基本類 ,繼承NetworkBehaviour的類可以接收和發(fā)送網(wǎng)絡(luò)命令。

基本生命周期 :

OnStartServer()? //服務(wù)器端玩家啟動(dòng)時(shí)

OnStartLocalPlayer() //本地客戶端啟動(dòng)時(shí)執(zhí)行

OnStartClient() //客戶端啟動(dòng)時(shí)執(zhí)行

OnStopClient() //結(jié)束 或 斷開連接時(shí)執(zhí)行


3.NetworkBehaviour對(duì)象的網(wǎng)絡(luò)交互方式

NetworkBehaviour中有兩個(gè)主要使用的特性

[Command] :Client->Server , 標(biāo)記在客戶端通知服務(wù)端的方法。

[ClientRpc]:Server->Client (多個(gè)), 標(biāo)記在服務(wù)端向客戶端們轉(zhuǎn)發(fā)的方法。


以Tanks中坦克開火例子


[Command]
void CmdFire()
?{

??? //1. 在服務(wù)端中生成子彈

????GameObject projectile = Instantiate(projectilePrefab, position, transform.rotation);

????//2. 將生成的子彈 廣播給玩家(玩家:指發(fā)射子彈的坦克)

????NetworkServer.Spawn(projectile);

????//3.將播放動(dòng)畫 廣播給玩家

????RpcOnFire();
}

[ClientRpc]
void RpcOnFire()
{
????animator.SetTrigger("Shoot");
}


4.[Sycn] 值同步

類似于血量,攻擊力之類是數(shù)值需要同步給多端時(shí),可以使用[sync]標(biāo)記在字段上。

當(dāng)字段被sync]標(biāo)記時(shí), 相當(dāng)于該字段被放于服務(wù)器上,服務(wù)器將會(huì)不斷地把數(shù)值發(fā)送給客戶端,達(dá)到值同步。

更改血量示例代碼

[sync]

int Hp;

[Command]
void OnChangeHp(int change)

{

????Hp+=change;

}

此外還可以利用hook做值變化監(jiān)聽,如

[SyncVar(hook =nameof(OnValueChange))]

int Hp;

void OnValueChange(int oldHp ,int newHp)

{

????Debug.Log($"血量變化{oldHp}->{newHp}");

}

5.一些常用的方法

通過(guò)netId查找對(duì)象

????????NetworkIdentity.spawned[netId]

獲取本地玩家

??????? NetworkClient.localPlayer

注冊(cè)已生成對(duì)象到服務(wù)端

???????? NetworkServer.Spawn(player);

切換場(chǎng)景

????????NetworkManager.singleton.ServerChangeScene("OtherScene");

授予Authority權(quán)限
??????? NetworkIdentity id = target.GetComponent<NetworkIdentity>();

????????id.AssignClientAuthority(NetworkClient.localPlayer.connectionToClient);

????

6.其他

為了方便聯(lián)機(jī)測(cè)試,可以使用

Unity多開插件:https://github.com/VeriorPies/ParrelSync/

個(gè)人聯(lián)機(jī)Demo試玩: https://share.weiyun.com/19CVbJoU


5.Unity-Mirror網(wǎng)絡(luò)框架基礎(chǔ)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
金乡县| 台南县| 永登县| 洪雅县| 舞钢市| 眉山市| 准格尔旗| 曲周县| 拉孜县| 吴江市| 犍为县| 卢龙县| 通城县| 云南省| 保德县| 苍山县| 台前县| 德阳市| 阳泉市| 宽城| 克什克腾旗| 江都市| 福清市| 巴楚县| 原阳县| 鄂尔多斯市| 德州市| 威信县| 昌吉市| 韩城市| 全南县| 信阳市| 惠水县| 手游| 渭源县| 崇文区| 云龙县| 图木舒克市| 大同县| 阜康市| 会昌县|