Photon與Unity核心技術(shù)之角色動作同步
文章作者:海洋_(CSDN )
本篇介紹關(guān)于使用Photon實現(xiàn)角色同步,客戶端還是選擇Unity開發(fā),在實現(xiàn)動作之前,Unity為我們提供了我們俗稱為老動畫和新動畫狀態(tài)機,我們提供了我們俗稱為老動畫和新動畫狀態(tài)機,我們先介紹老動畫的實現(xiàn)方式,它是通過Animation組件把角色的動作拖進去的。
- 老動畫網(wǎng)絡(luò)同步處理
老動畫使用在Unity以前的版本中常用,效果如下所示:
在Photon中也有關(guān)于老動畫同步的組件,如下圖所示:
也需要將Third Person Network組件拖到Observed Components組件上,這樣就完成了同步設(shè)置,Photon使用的同步方式是狀態(tài)同步,它同步包括:狀態(tài),位置,方向。我們看一下負責(zé)發(fā)送和接收消息的Third Person Network腳本代碼,如下所示:
- void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
- {
- if (stream.isWriting)
- {
- //We own this player: send the others our data
- stream.SendNext((int)controllerScript._characterState);
- stream.SendNext(transform.position);
- stream.SendNext(transform.rotation);
- }
- else
- {
- //Network player, receive data
- controllerScript._characterState = (CharacterState)(int)stream.ReceiveNext();
- correctPlayerPos = (Vector3)stream.ReceiveNext();
- correctPlayerRot = (Quaternion)stream.ReceiveNext();
- nbsp; // avoids lerping the character from "center" to the "current" position when this client joins
- if (firstTake)
- {
- firstTake = false;
- this.transform.position = correctPlayerPos;
- transform.rotation = correctPlayerRot;
- }
- }
- }
上述函數(shù)負責(zé)接收和發(fā)送消息,它使用的是Photon自帶的回調(diào)函數(shù)
- OnPhotonSerializeView
游戲中其他玩家是通過插值的方式處理的,插值函數(shù)如下所示:
- if (!photonView.isMine)
- {
- //Update remote player (smooth this, this looks good, at the cost of some accuracy)
- transform.position = Vector3.Lerp(transform.position, correctPlayerPos, Time.deltaTime * 10);
- transform.rotation = Quaternion.Lerp(transform.rotation, correctPlayerRot, Time.deltaTime * 10);
- }
以為我們的插值是對于其他玩家使用的,所以做了一個if語句判斷,這樣就完成了同步處理,下面重點介紹新動畫狀態(tài)機的處理方式。
- 新動畫狀態(tài)機同步
新動畫狀態(tài)機實現(xiàn)如下所示:
使用的是Animator組件,這些都是最基本的常識,如果讀者有不清楚的地方可以自己看一下Unity官方文檔或者在網(wǎng)上搜一下,相關(guān)資料很多的?;镜慕M件已經(jīng)完成,接下來看一下如何使用同步組件?先看下圖所示的效果圖:
相比老動畫狀態(tài)機,組件明顯不一樣,新增加了兩個組件,一個是Photon Animator View,該組件主要是針對新動畫狀態(tài)機的層設(shè)置,比如下圖所示:
上圖是我們設(shè)置的角色新動畫狀態(tài)機的Layer,另外我們還有一些Parameters參數(shù)設(shè)置,如下圖所示:
對應(yīng)的角色組件Photon Aniamtor View如下所示:
該組件在Photon NetWork都有,讀者可以自行查看,這里只是告訴讀者如何使用。
接下來再看同步的組件 Photon Transform View組件,它里面包括 同步位置,方向,縮放,這個與老動畫狀態(tài)機不同,效果如下所示:
在Synchronize Position中還有兩個選項要注意,一個是Interpolate Option,這個表示的是同步NPC的插值方式,一般采用的就是Lerp線性插值,插值速度默認是1,這個可以根據(jù)自身情況調(diào)整數(shù)值。這樣我們就完成了角色同步,然手使用接口:
- PhotonNetwork.Instantiate
實例化角色,可以看到同步的情況了,效果如下所示:
因為使用的是默認的Photon國外服務(wù)器,有點延遲,如果服務(wù)器在國內(nèi)或者自己搭建一個沒有任何問題。
unity資源下載:http://studio-ampersand.com/club/forum-51-1.html
-
分享到:
全部評論:0條