UNet簡單案例講解


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM