EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

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

接上篇:[Unity]Mirror联网插件的基本使用

 

我们发现一个新的问题:

Server发生的事情并没有正确的反映在客户端上。

很正常,因为我们还没做同步。

 

操作步骤:

 

1.Create Empty,命名为CommandSprite。

 

2.Add Component,增加Sprite Renderer组件。

 

3.将Sprite的填充内容设置为InputFieldBackground。(这里不是硬性要求)

 

4.Add Component,增加Network Identity组件。

 

5.给CommandSprite增加脚本CommandDemo.cs。

 

 

关于脚本:

 

1.using Mirror

 

2.类继承NetworkBehaviour

 

3.清除基本的Start和Update方法

 

 

Coding部分:

 

1.第一个方法OnStartLocalPlayer(),重写它,它将自动补全。

 

2.这是一个非常重要的方法,它只有在Client有权限的情况下才会运行。

 

3.接着我们写一个基本的修改SpriteRenderer颜色的方法。(写这个是为了便于观察信息同步)

 

4.然后我们自定义一个枚举器,并且设定它1s变化一次。

 

5.注意[Command],凡是在前面写了[Command]的方法,都将会在Server执行。

 

6.好了,到这里为止,应该明白这个是在Client执行的,向Server发出指令的脚本。

 

7.最后,我们方法传给StartCoroutine(),这是OnStartLocalPlayer()里面的第二行代码。

 

 

完整代码示例:

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);

    }
}

注意:以[Command]特性为首的方法,最好以Cmd开头,之后方法名称随便怎么写。

 

 

好的,搞完这些之后,我们把CommandSprite存为Prefab,

然后再放进Network Manager的Player Prefab里面。

prefab

 

 

让Build的出来的文件Run as Server Only,

 

在引擎中Play,使用Client,

 

最终结果:

FinalResult

这个时候,可以发现,只有Server的颜色在变。

 

这就是一个由Client发起的对Server的同步。(单向)

 

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

This article was last edited at 2020-04-13 05:54:53

* *