二、局域网联机

目录

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加入游戏) 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UE4是一款流行的游戏引擎,可用于开发各种类型的游戏。局域网联机是指在同一网络内的多个设备之间进行游戏联机(multiplayer)的功能。C语言是一种通用的编程语言,也可以用于开发游戏。 要在UE4中实现局域网联机,我们可以使用UE4的多人游戏框架(Multiplayer Framework),该框架提供了一套强大的工具来创建多人游戏体验。首先,我们需要设置游戏的网络模型,选择合适的网络模式来支持局域网联机。然后,在游戏中创建服务器和客户端实例,客户端可以通过局域网连接到服务器。 在C语言中实现局域网联机,我们需要使用网络编程的相关库函数。C语言提供了一些标准库函数来创建套接字(socket),这是实现网络通信的基础。通过使用套接字函数,我们可以创建服务器socket和客户端socket,服务器socket用于监听来自客户端的连接请求,客户端socket用于连接到服务器。 在服务器端,我们可以使用C语言的多线程编程来处理多个客户端的连接和通信。可以创建一个线程池来管理并发的客户端连接,每个线程负责处理一个客户端的请求。服务器可以接收客户端发送的数据,处理请求,并将结果回传给客户端。 在客户端,我们可以使用C语言的套接字函数来建立与服务器的连接,并发送数据请求。客户端可以接收服务器发送的数据,并对数据进行处理和显示。 总之,要在UE4中实现局域网联机,我们可以利用UE4提供的多人游戏框架,而使用C语言在服务器和客户端之间实现网络通信。这样,我们就可以实现通过局域网连接的多人游戏体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值