需求提出
首先,说一下需求场景:在一个多人联机的场景里,每个玩家都可以自定义自己的名字,但这个名字其他玩家不知道。故出现了此需求——所有客户端自定义的名字通过UI进行显示,并且同步显示给其他客户端。
实现原理
将本地保存的自定名称,通过Command特性标注的方法,在服务器中进行变更,再利用SyncVar特性标注的值,在服务端发生变化时,会同步给所有客户端的机制,达到目的。
Tips:因为对Mirror还不是很熟悉,所以只能想到这个方法了。如果有更好的方法,欢迎私信交流或者评论留言。
具体实现
首先,创建一个脚本,用于保存玩家自定义输入的名字。这个脚本可以挂在NetworkManager游戏对象上,因为这个物体在加载场景过程中不会销毁,玩家名字也能在客户端中得以永久保存。
(Tips:一定要保证这个脚本在场景切换时不会被销毁,不然就会出现空引用问题)
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerDataManager : MonoBehaviour
{
public string playerName;
public static PlayerDataManager Instance;//为了方便获取,暂时使用一个单例
private void Awake()
{
Instance = this;
}
}
其次,再创建一个脚本,用于同步更新自定义输入的名字。
(Tips:这个脚本只能放在由NetworkManager创建的Player上,否则isLocalPlayer永远为false)
代码如下:
using System.Collections