• 二、局域网联机


    目录

    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预制体

    1. using Unity.Netcode.Components;
    2. using UnityEngine;
    3. namespace Unity.Multiplayer.Samples.Utilities.ClientAuthority
    4. {
    5. [DisallowMultipleComponent]
    6. public class ClientNetworkTransform : NetworkTransform
    7. {
    8. protected override bool OnIsServerAuthoritative()
    9. {
    10. return false;
    11. }
    12. }
    13. }

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

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

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

     

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

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

    1. using UnityEngine;
    2. using Unity.Netcode;
    3. public class PlayerSetup : NetworkBehaviour
    4. {
    5. [SerializeField]
    6. private Behaviour[] componentsToDisable;
    7. [SerializeField]
    8. private Camera sceneCamera;
    9. // Start is called before the first frame update
    10. void Start()
    11. {
    12. if (!IsLocalPlayer)
    13. {
    14. for (int i = 0; i < componentsToDisable.Length; i++)
    15. {
    16. componentsToDisable[i].enabled = false;
    17. }
    18. }
    19. else
    20. {
    21. sceneCamera=Camera.main;
    22. if (Camera.main != null)
    23. {
    24. sceneCamera.gameObject.SetActive(false);
    25. }
    26. }
    27. }
    28. private void OnDisable()
    29. {
    30. sceneCamera.gameObject.SetActive(true);
    31. }
    32. }

     并对其进行如下设置

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

    3.编写测试UI

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

     

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

    1. using Unity.Netcode;
    2. using UnityEngine;
    3. using UnityEngine.UI;
    4. public class NetworkManagerUI : MonoBehaviour
    5. {
    6. [SerializeField]
    7. private Button hostBtn;
    8. [SerializeField]
    9. private Button serverBtn;
    10. [SerializeField]
    11. private Button clientBtn;
    12. // Start is called before the first frame update
    13. void Start()
    14. {
    15. hostBtn.onClick.AddListener(() =>
    16. {
    17. NetworkManager.Singleton.StartHost();
    18. });
    19. serverBtn.onClick.AddListener(() =>
    20. {
    21. NetworkManager.Singleton.StartServer();
    22. });
    23. clientBtn.onClick.AddListener(() =>
    24. {
    25. NetworkManager.Singleton.StartClient();
    26. });
    27. }
    28. }

    4.附录 

     测试效果图 

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

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

     (另一个应用,点击Client加入游戏) 

  • 相关阅读:
    DES加密算法是怎么实现的?
    《动手学深度学习 Pytorch版》 5.5 读写文件
    【NGINX--1】基础知识
    GIF图像动态生成-JAVA后台生成
    IntelliJ IDEA中有什么让你相见恨晚的好用插件?
    Vue 路由懒加载, VueRouter一步完成Vue的路由懒加载 一行代码搞定懒加载
    Python正则表达式(一看就懂)
    Python 2022年面试题总结
    SpringBoot集成自然语言处理hanlp工具包
    electron
  • 原文地址:https://blog.csdn.net/qq_53401568/article/details/133421546