我正在使用 UNet 开发 Unity 2D 多人游戏。我的问题是客户端无法将其发送[Command]
到服务器。我在 UnityEditor 上调试,并为我的 android 手机构建了一个 apk。
首先我使用 UnityEditor 作为主机,手机作为客户端,Debug.Log(SkinName)
APPEARS on the console
.
然后我使用 UnityEditor 作为客户端,手机作为主机,Debug.Log(SkinName)
DOES NOT APPEAR
.
我尝试使用[ClientRpc]
而不是,[Client]
但它只会让情况变得更糟,客户端和主机都不会同步。我不知道我是否以正确的方式执行了 [ClientRpc]。(我是 UNet 的菜鸟)
我访问了其他线程/论坛和其他 UNet 教程来寻找解决方案,但这就是我想出的。
注意:在我访问的其他线程上,人们大多建议未选中本地玩家权限,这就是导致问题的原因,但在这种情况下是CHECKED
.
代码:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using Spine;
using Spine.Unity;
using Spine.Unity.Modules;
class SetupLocalPLayer : NetworkBehaviour {
[SyncVar]
public string SkinName;
public string[] CharNames;
public string[] SlotNames;
public string[] AttachmentSuffix;
void Start (){
TransmitSkins ();
SyncSkin ();
if (isLocalPlayer) {
var skeletonrenderer = GetComponent<SkeletonRenderer>();
for(int z=0;z<SlotNames.Length;z++){
skeletonrenderer.skeleton.SetAttachment(SlotNames[z],GameController.control.skinName+AttachmentSuffix[z]);
}
GetComponent<PlayerManager> ().enabled = true;
GetComponent<FollowCam> ().enabled = true;
}
}
void Update () {
}
void SyncSkin(){
if (!isLocalPlayer) {
var skeletonrenderer = GetComponent<SkeletonRenderer>();
for(int z=0;z<SlotNames.Length;z++){
skeletonrenderer.skeleton.SetAttachment(SlotNames[z],SkinName+AttachmentSuffix[z]);
}
}
}
[Command]
void CmdSetSkin(){
SkinName = GameController.control.skinName;
Debug.Log (SkinName);
}
[Client]
void TransmitSkins(){
if (isLocalPlayer) {
CmdSetSkin ();
}
}
}