1.創建文件夾:
2.創建一個空物體,添加如下組件:
Network Manager(網絡管理組件):
Network Manager HUD(提供一個UI):
3.創建如下模型,並設置為預制體:
給預制體添加組件:NetWork Identity
4.把預制體提供給網絡組件:
將預制體拖拽至:Network Manager - Spawn Info - Player Prefab
5.讓玩家移動:
以下腳本編輯好后拖拽至預制體上
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { // 水平旋轉 private float x; // 垂直移動 private float z; void Start () { } void Update () { x = Input.GetAxis ("Horizontal") * Time.deltaTime * 150.0f; z = Input.GetAxis ("Vertical") * Time.deltaTime * 3.0f; // 旋轉 transform.Rotate (0, x, 0); transform.Translate (0, 0, z); } }
6.運行發現問題:客戶端與服務器同時移動,移動不同步
7.修改腳本 PlayerController
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class PlayerController : NetworkBehaviour { // 水平旋轉 private float x; // 垂直移動 private float z; void Start () { } void Update () { // 如果不是本地玩家,就跳出該方法 // 加入游戲后 network manager 會標記本地玩家 if (!isLocalPlayer) { return; } x = Input.GetAxis ("Horizontal") * Time.deltaTime * 150.0f; z = Input.GetAxis ("Vertical") * Time.deltaTime * 3.0f; // 旋轉 transform.Rotate (0, x, 0); transform.Translate (0, 0, z); } }
添加組件:
Network Transform:
9.使本地角色看起來更特殊:
修改腳本 PlayerController
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class PlayerController : NetworkBehaviour { // 水平旋轉 private float x; // 垂直移動 private float z; void Start () { } void Update () { // 如果不是本地玩家,就跳出該方法 // 加入游戲后 network manager 會標記本地玩家 if (!isLocalPlayer) { return; } x = Input.GetAxis ("Horizontal") * Time.deltaTime * 150.0f; z = Input.GetAxis ("Vertical") * Time.deltaTime * 3.0f; // 旋轉 transform.Rotate (0, x, 0); transform.Translate (0, 0, z); } public override void OnStartLocalPlayer () { // 調用父類中該虛方法 base.OnStartLocalPlayer (); GetComponent<MeshRenderer> ().material.color = Color.blue; } }
10.制作子彈:
制作子彈預制體
修改Player預制體:添加 炮管、子彈發射位置、給腳本中的公共變量賦值。
更新腳本 PlayerController
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class PlayerController : NetworkBehaviour { // 水平旋轉 private float x; // 垂直移動 private float z; // 子彈 public GameObject bulletPrefab; // 子彈生成位置 public Transform bullerSpawn; void Start () { } void Update () { // 如果不是本地玩家,就跳出該方法 // 加入游戲后 network manager 會標記本地玩家 if (!isLocalPlayer) { return; } x = Input.GetAxis ("Horizontal") * Time.deltaTime * 150.0f; z = Input.GetAxis ("Vertical") * Time.deltaTime * 3.0f; // 旋轉 transform.Rotate (0, x, 0); transform.Translate (0, 0, z); // 發射子彈 if (Input.GetKeyDown (KeyCode.Space)) { Fire (); } } public override void OnStartLocalPlayer () { // 調用父類中該虛方法 base.OnStartLocalPlayer (); GetComponent<MeshRenderer> ().material.color = Color.blue; } private void Fire () { print ("發射子彈"); // 生成子彈 GameObject bullet = Instantiate<GameObject> (bulletPrefab, bullerSpawn.position, bullerSpawn.rotation); // 子彈飛行 bullet.gameObject.GetComponent<Rigidbody> ().velocity = bullet.transform.forward * 6.0f; Destroy (bullet, 5.0f); } }
11.給子彈 Bullet 預制體添加組件:Network Manager
讓服務產生子彈的方法:
①.將子彈預制體拖拽到Network Manager - Registered Spawnable Prefabs
②.在腳本中生成子彈的方法前面加上 特性[Command]
12.制作血條
13.解決血條同步問題
14.玩家死亡后回到出生點
此部分不用判斷是否是本地玩家
15.創建敵人,產生敵人,
16.敵血量消失后敵人這個游戲物體消失
17.設置兩個出生點,並在玩家死亡后隨機選一個出生點復活。
請參考視頻:
鏈接:
https://pan.baidu.com/s/11fwz59saubkPdKpiUWUgew 密碼:3pfc
