0

目前我正在开发一款联网的 2d 平台游戏。我有一个脚本应该实例化玩家喷气背包,名为 JetpackManager。然而,当玩家被生成到场景中时,代码只会将喷气背包生成到主机场景中,而不是客户端场景中。这导致只有主机场景正常工作,而客户端场景中的所有玩家都没有喷气背包。这是我的 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函数中的代码出于某种原因只在主机上调用,而不是在任何客户端上调用。

4

1 回答 1

1

您应该使用网络类实例化网络对象

网络实例化

网络实例化一个预制件。

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

于 2017-09-05T09:44:32.733 回答