国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
太和县| 赤壁市| 宁南县| 西乌珠穆沁旗| 宁明县| 崇左市| 土默特右旗| 新宾| 东港市| 耿马| 深州市| 郎溪县| 怀来县| 晋宁县| 休宁县| 合作市| 南靖县| 克拉玛依市| 临桂县| 临西县| 自治县| 和林格尔县| 达日县| 宣城市| 漳浦县| 虹口区| 金阳县| 文水县| 淮阳县| 盐津县| 冀州市| 桃园市| 福建省| 启东市| 韶山市| 荔波县| 罗城| 宜良县| 汉寿县| 富顺县| 仲巴县|