2017-06-04 86 views
0

目前,我在聯網的2D平臺遊戲的遊戲。我有一個腳本,應該實例化名爲JetpackManager的玩家jetpack。然而,當玩家涌入場景時,代碼只會在主機場景中產生一個噴氣揹包,而不會進入客戶的場景。這導致只有主持人場景正常工作,而客戶場景中的所有玩家都沒有jetpack。這是我對JetpackManager代碼:ClientRpc功能沒有進行對Unity3d所有客戶端的C#

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功能中的代碼是由於某種原因,僅被稱爲主機上,而不是在任何客戶端。

+0

每個客戶端都需要有JetpackManager在他們的現場,以調用這個函數。 – Fiffe

+0

有什麼錯誤?或記錄你收到? –

回答

0

你應該實例化對象的網絡與網絡類

Network.Instantiate

網絡實例化一個預製。

給定的預製會在遊戲中所有客戶端instanted。 同步被自動設置,以便不涉及額外的工作 。位置,旋轉和網絡組編號爲 參數。需要注意的是在下面的例子中一定有什麼東西在編輯器中設置 到playerPrefab。你可以閱讀的對象引用Object.Instantiate更多 實例。