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

歡迎光臨散文網(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ó)家法律
天等县| 海城市| 即墨市| 建宁县| 黔南| 龙川县| 石阡县| 潜山县| 安化县| 麻栗坡县| 蛟河市| 安达市| 合山市| 延安市| 房山区| 开鲁县| 满洲里市| 萝北县| 龙岩市| 宁津县| 临澧县| 宣威市| 贞丰县| 云南省| 小金县| 泾源县| 房产| 阿拉尔市| 乌什县| 合阳县| 达州市| 江门市| 荣成市| 鸡东县| 青冈县| 武清区| 噶尔县| 衡山县| 宜丰县| 高阳县| 荔波县|