【Unity3D入门教程】网络通信
Unity之前都是使用RPC來進行網絡通信的,后來在Unity5中有了UNET,使得開發多人在線網絡游戲變得非常簡單。本文將會介紹使用新網絡模塊開發游戲的方法。?
首選創建一個空工程,保存場景名字為“Main”。創建一個空物體,并改名為“Network Manager”。給這個空物體添加組件NetworkManager和NetworkManagerHUD。
點擊運行,效果如下。
創建一個Capsule,重命名為“Player”。創建一個Cube,作為Player的子物體,并且命名為Visor。將Visor的Scale設置為(0.95,0.25,0.5),位置設置為(0,0.5,0.24)。創建一個新的材質,命名為“Black”,然后選中該Material,將它的Albedo顏色設置為黑色,將Visor的Material設置為這個Black。此時,Player應該如下圖所示。
選中Player,添加組件NetworkIdentity。并且將LocalPlayerAuthority選項設置為true。
將Player拖動到Project視圖中創建一個Prefab,然后刪除場景中的Player,保存場景。選中場景中的Network Manager,將Player Prefab拖動到它的NetworkManager組件的圖示位置。
創建一個腳本PlayerController.cs,然后賦給PlayerPrefab,并將內容替換為如下:
using UnityEngine;public class PlayerController : MonoBehaviour {void Update(){var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;transform.Rotate(0, x, 0);transform.Translate(0, 0, z);} }這個腳本允許用戶控制Player。默認情況下,Input.GetAxis(“Horizontal”)和Input.GetAxis(“Vertical”)允許玩家使用WASD、方向鍵和控制板等來移動Player。保存腳本,返回到Unity。選中Player Prefab,為其添加組件NetworkTransform。目前的腳本還不能區分本地玩家和其他玩家,所以我們需要對PlayerController.cs進行一些修改。
加入命名空間UnityEngine.Networking,將繼承的類改為NetworkBehaviour。在Update函數中增加本地玩家判斷:
if(!isLocalPlayer) {return; }為了從外觀上區分本地玩家和其他玩家,可以在PlayerController類中加入下面函數:
public override voidOnStartLocalPlayer() {GetComponent<MeshRenderer>().material.color = Color.blue; }最終的腳本如下:
using UnityEngine; using UnityEngine.Networking;public class PlayerController : NetworkBehaviour {void Update(){if (!isLocalPlayer){return;}var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;transform.Rotate(0, x, 0);transform.Translate(0, 0, z);}public override void OnStartLocalPlayer(){GetComponent<MeshRenderer>().material.color = Color.blue;} }保存腳本,返回Unity。生成并運行該程序,然后以服務器模式運行。同時,在unity內部以調試模式運行,作為客戶端。兩個程序都可以用WASD控制Player運動。結果如下:
總結
以上是生活随笔為你收集整理的【Unity3D入门教程】网络通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux(RedHat9.0)下Als
- 下一篇: LiveWallPaper 动态壁纸程