目录
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;
        }
    }
}并进行如下设置

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

(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,编写按钮逻辑
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();
        });
    }
}








![[红明谷CTF 2021]write_shell %09绕过过滤空格 ``执行](https://img-blog.csdnimg.cn/d4689eed5afe4de4a687cd0cd2eb865d.png)









