EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

[Unity]Mirror联网插件——基本信息同步(二)

接上一篇:[Unity]Mirror联网插件——基本信息同步(一)

 

新增代码(绿色部分):

using System.Collections;
using UnityEngine;
using Mirror;

public class CommandDemo : NetworkBehaviour
{
    public override void OnStartLocalPlayer()
    {
        base.OnStartLocalPlayer();
        StartCoroutine(__RandomizeColor());
    }

    private void SetColor(Color32 color)
    {
        SpriteRenderer renderer = GetComponent<SpriteRenderer>();
        renderer.color = color;
    }

    private IEnumerator __RandomizeColor()
    {
        WaitForSeconds wait = new WaitForSeconds(1f);

        while (true)
        {
            CmdChangeColor();
            yield return wait;
        }
    }

    [Command]
    private void CmdChangeColor()
    {
        Debug.Log("CmdChangeColor called");

        Color color = Random.ColorHSV(0f,1f,1f,1f,0f,1f,1f,1f);

        SetColor(color);

        RpcChangeColor(color);
    }

    [ClientRpc]
    private void RpcChangeColor(Color32 color)
    {
        Debug.Log("RpcChangeColor called.");
        SetColor(color);
    }

}

新增完代码,查看效果:

完全同步

是的,这样就实现了完全同步。

 

但是还是要注意,以[ClientRpc]开头的方法,最好严格以Rpc开头,就像上面代码写的一样。

为什么要强调这个东西,因为 这 很 重 要 。

 

我们来看看这个同步,原理上讲还是有先后顺序的:

客户端→服务端→客户端

 

由客户端发起的,对服务器的操作指令,发完服务器又立刻返回了相同的方法给自己。

这样看起来,我们和服务器同步了,但实际上还是存在延迟的。

 

下一篇:[Unity]Mirror联网插件——基本信息同步(三)

This article was last edited at 2020-04-13 06:08:06

* *