二、局域网联机

目录

1.下载资源包 

2.配置NetworkManager

3.编写测试UI


1.下载资源包 

2.配置NetworkManager

(1)在Assets/Prefabs下创建Network Prefabs List

相应设置如下: 

(2) 创建空物体“NetworkManager”并挂载NetworkManager组件。相应设置如下:

(3) 选择Player预制体并挂载组件Network Object

(4)在Asset/Scripts/目录下创建Network目录并创建并编写ClientNetworkTransform.cs,使Client可控制transform的属性,将其挂载至Player预制体

using Unity.Netcode.Components;
using UnityEngine;

namespace Unity.Multiplayer.Samples.Utilities.ClientAuthority
{
    [DisallowMultipleComponent]
    public class ClientNetworkTransform : NetworkTransform
    {
        protected override bool OnIsServerAuthoritative()
        {
            return false;
        }
    }
}

并对其Syncing属性进行如下设置

(5) 选择Player预制体并挂载组件Network Rigidbody

(6)在Player预制体中的Camera上挂载Network Transform组件,并对其Syncing属性进行如下设置

 

(6)将原有的Main Camera重命名(F2)为SceneCamera,并将其Tag设置为MainCamera

(7)在Player预制体上创建并编写PlayerSetup.cs,使游戏只接收本地输入

using UnityEngine;
using Unity.Netcode;

public class PlayerSetup : NetworkBehaviour
{
    [SerializeField] 
    private Behaviour[] componentsToDisable;
    [SerializeField] 
    private Camera sceneCamera;
    
    // Start is called before the first frame update
    void Start()
    {
        if (!IsLocalPlayer)
        {
            for (int i = 0; i < componentsToDisable.Length; i++)
            {
                componentsToDisable[i].enabled = false;
            }
        }
        else
        {
            sceneCamera=Camera.main;
            if (Camera.main != null)
            {
                sceneCamera.gameObject.SetActive(false);
            }
        }
    }

    private void OnDisable()
    {
        sceneCamera.gameObject.SetActive(true);
    }
}

 并对其进行如下设置

将其移动至Assets/Scripts/Player目录下 

3.编写测试UI

(1)创建Canvas并将其命名为MenuUI,并在其内部创建3个Button并分别命名为Host,Server以及Client。Hierarchy中的物体结构和UI布局如下:

 

(2)在NetworkManager上创建并编写NetworkManageUI.cs,编写按钮逻辑,将其移至Assets/Scripts/Network

using Unity.Netcode;
using UnityEngine;
using UnityEngine.UI;

public class NetworkManagerUI : MonoBehaviour
{
    [SerializeField] 
    private Button hostBtn;
    [SerializeField] 
    private Button serverBtn;
    [SerializeField] 
    private Button clientBtn;
    
    // Start is called before the first frame update
    void Start()
    {
        hostBtn.onClick.AddListener(() =>
        {
            NetworkManager.Singleton.StartHost();
        });
        serverBtn.onClick.AddListener(() =>
        {
            NetworkManager.Singleton.StartServer();
        });
        clientBtn.onClick.AddListener(() =>
        {
            NetworkManager.Singleton.StartClient();
        });
    }
}

4.附录 

 测试效果图 

(打包后,开启两个应用【其中一个作为主机端,另一个作为客户端】) 

 (其中一个应用,点击Host创建游戏)

 (另一个应用,点击Client加入游戏) 文章来源地址https://uudwc.com/A/edDDq

原文地址:https://blog.csdn.net/qq_53401568/article/details/133421546

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年10月16日 03:25
数据结构与算法基础-(4)
下一篇 2023年10月16日 05:55