ClientRpc功能未在Unity3d c#中的所有客户端上执行

时间:2017-06-04 12:54:19

标签: c# unity3d networking unity3d-unet

目前我正在开发一款联网的2d平台游戏。我有一个脚本应该实例化名为JetpackManager的玩家jetpack。然而,当玩家产生场景时,代码只会将一个jetpack产生到主机场景中,而不会产生到客户端的场景中。这导致只有主机场景正常工作,而客户端场景中的所有玩家都没有喷气背包。这是我的JetpackManager代码:

using UnityEngine;
using UnityEngine.Networking;

public class JetpackManager : NetworkBehaviour {

[SerializeField]
private Jetpack[] jetpacks;

[SerializeField]
private Transform jetPackHold;

private PlayerController playerController;

private Jetpack currentJetpack;

void Start(){
    playerController = GetComponent<PlayerController> ();

    if (isLocalPlayer) {
        CmdEquipJetpack (0);
    }
}

[Command]
void CmdEquipJetpack(int jetpackNumber){
    RpcEquipJetpack (jetpackNumber);
}

[ClientRpc]
void RpcEquipJetpack(int jetpackNumber){

    if (currentJetpack != null) {
        Destroy (currentJetpack.gameObject);
    }

    currentJetpack = Instantiate (jetpacks[jetpackNumber], jetPackHold.position, jetPackHold.rotation);
    currentJetpack.transform.SetParent (jetPackHold);

    playerController.InitialiseJetpackVariables (currentJetpack);
}

}

基本上我的问题是RpcEquipJetpack函数中的代码由于某种原因仅在主机上调用而不在任何客户端上调用。

1 个答案:

答案 0 :(得分:1)

您应该使用网络类

实例化网络对象

<强> Network.Instantiate

  

网络实例化预制件。

     

给定的预制件将在游戏中的所有客户端上实施。   自动设置同步,因此无需额外工作   参与其中。位置,旋转和网络组编号为   参数。请注意,在下面的示例中,必须设置一些内容   到编辑器中的playerPrefab。你可以阅读更多相关信息   对象引用Object.Instantiate。

中的实例化