//点击事件
public void ClickDXView()
{
RpcDXView();
}
[ClientRpc]
public void RpcDXView()
{
readyPN.gameObject.SetActive(false);
startGm();
Camera.main.GetComponent<DOTweenPath>().DOPlay();
}
[ServerCallback]:只执行在服务器端,并使一些特殊函数(eg:Update)不报错(若在此函数中改变了带有syncvar的变量,客户端不同步)
(使用ServerCallback时,将Update中的重要语句摘出来写入Rpc函数中并调用)
[ClientCallback]:只执行在客户端
另:[Server]:只执行在服务器端但是不能标识一些特殊函数(可以在这里调用Rpc类函数)
远程过程的参数
传递给客户端远程过程调用的参数会被序列化并在网络上传送,这些参数可以是:
- 基本数据类型(字节,整数,浮点树,字符串,64位无符号整数等)
- 基本数据类型的数组
- 包含允许的数据类型的结构体
- Unity内建的数学类型(Vector3,Quaternion等)
- NetworkIdentity
- NetworkInstanceId
- NetworkHash128
- 带有NetworkIdentity组件的物体
远程过程的参数不可以是游戏物体的子组件,像脚本对象或Transform,他们也不能是其他不能在网络上被序列化的数据类型。
在使用过程中发现一个问题:带有NetworkIdentity的组件在运行之前不能是隐藏的,否则同步会受影响,在代码Start函数中置为SetActive = false,或者因为网络问题一开始隐藏的物体在后续同步中都没有问题。