Unity使用Mirror框架注意的事项(持续不断更新)

本篇章记录一下Unity使用Mirror框架遇到的问题和解决方法(不断更新)

1.当开发测试中出现A客户端和B客户端操作进行同步的情况,需要注意(有没有进行isLocalPlayer是否是本地Player的判断)
在这里插入图片描述
这个isLocalPlaye是需要继承NetworkBehaviour这个脚本,才可以进行判断的

2.当开发中出现了同画面的情况,需要注意你的Player下面是否有相机且一直开启状态,这会导致每生成一个Player就会有镜头画面的冲突,导致会看最后一个生成Player镜头,所以解决办法如下:
在这里插入图片描述
重写一下刚开始加载Player的生命周期函数,这个方法也是继承于NetworkBehaviour这个脚本

3.假设你的设备采用的是WiFi连接方式(缺点IP不是固定的,客户端连接不知道连接哪个IP?),想要快速做出功能 可以采用我这种方式,
Mirror框架有一个脚本NetworkDiscoveryHUD,没错挂载到My_NetworkManager共同的物体上(挂载的时候会有个绑定脚本NetworkDiscovery我们也是需要的),然后重点来了!!!修改这个NetworkDiscoveryHUD脚本,添加两个方法如下:

        /// <summary>
        /// 查找开启的服务端
        /// </summary>
        public void My_FindServers()
        {
            discoveredServers.Clear();
            networkDiscovery.StartDiscovery();
            Debug.Log($"Discovered Servers [{discoveredServers.Count}]:");
            foreach (ServerResponse info in discoveredServers.Values)
            {              
                Debug.Log("IP_URL"+info.uri.ToString());

                Connect(info);

                Debug.Log("循环");
            }
        }
        /// <summary>
        /// 开启服务端和一个客户端
        /// </summary>
        public void My_StartHost()
        {
            discoveredServers.Clear();
            NetworkManager.singleton.StartHost();
            networkDiscovery.AdvertiseServer();
        }

然后在自己写的脚本中去调用这两个方法,如下:

using Mirror;
using Mirror.Discovery;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class My_NetworkManager : MonoBehaviour
{
    NetworkManager manager;
    NetworkDiscoveryHUD  networkDiscoveryHUD;
    public Text text;
    public Button button_StartHost, button_StartClient;
    void Awake()
    {
        manager = GetComponent<NetworkManager>();
        networkDiscoveryHUD = GetComponent<NetworkDiscoveryHUD>();
    }

    private void Start()
    {      
        button_StartHost.onClick.AddListener(Button_StartHostEvent);
        button_StartClient.onClick.AddListener(Button_StartClientEvent);
    }

    private void Button_StartHostEvent()
    {
        // manager.StartHost();
        networkDiscoveryHUD.My_StartHost();
        text.text = "服务端+客户端";
        button_StartHost.gameObject.SetActive(false);
        button_StartClient.gameObject.SetActive(false);
    }
    private void Button_StartClientEvent()
    {
        // manager.StartClient();
        networkDiscoveryHUD.My_FindServers();
        text.text = "客户端";
        button_StartHost.gameObject.SetActive(false);
        button_StartClient.gameObject.SetActive(false);
    }

}

调用完成之后,回到HUD的脚本别忘了注释掉这个If判断
注释掉这个判断

当然不想要OnGUI的界面按钮,可以直接GUILayout.BeginArea(new Rect(0, 0, 0, 0));或者去掉都行…
这边我自己的脚本就有两个选项,服务端+客户端和客户端,你们可以根据情况安排修改(有什么不懂的可以在评论区提问)…

目前遇到这些,后续再更新…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值