UNet簡單案例講解

1.建立文件夾:服務器

2.建立一個空物體,添加以下組件:網絡

  Network Manager(網絡管理組件):ide

  Network Manager HUD(提供一個UI):spa

3.建立以下模型,並設置爲預製體:3d

  給預製體添加組件:NetWork Identitycode

4.把預製體提供給網絡組件:orm

  將預製體拖拽至:Network Manager - Spawn Info - Player Prefab視頻

5.讓玩家移動:blog

  如下腳本編輯好後拖拽至預製體上遊戲

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
相關文章
相關標籤/搜索