接上一篇:[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开头,就像上面代码写的一样。
为什么要强调这个东西,因为 这 很 重 要 。
我们来看看这个同步,原理上讲还是有先后顺序的:
客户端→服务端→客户端
由客户端发起的,对服务器的操作指令,发完服务器又立刻返回了相同的方法给自己。
这样看起来,我们和服务器同步了,但实际上还是存在延迟的。
Today's comments have reached the limit. If you want to comment, please wait until tomorrow (UTC-Time).
There is 18h44m01s left until you can comment.