【问题标题】:ClientRpc Function not being carried out on all clients in Unity3d c#在 Unity3d c# 中的所有客户端上都没有执行 ClientRpc 功能
【发布时间】:2017-06-04 12:54:18
【问题描述】:

目前我正在开发一款联网的 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 函数中的代码出于某种原因仅在主机上调用,而不在任何客户端上调用。

【问题讨论】:

  • 每个客户端都需要在他们的场景中有JetpackManager才能调用这个函数。
  • 有什么错误吗?或您收到的日志?

标签: c# unity3d networking unity3d-unet


【解决方案1】:

你应该用网络类实例化网络对象

Network.Instantiate

网络实例化一个预制件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多