簡體   English   中英

在Unity Networking中切換播放器對象

[英]Switching between player objects in Unity Networking

我想知道如何在Unity網絡中的可控對象之間來回切換。

例如,假設有兩個對象,Player1和Player2,並且您正在控制Player1。 按空格鍵,您現在正在控制Player2。 再次按,返回控制Player1。

我做了什么:我遵循Unity手冊直到“測試多人游戲運動”,並參考玩家對象中的 “切換玩家”
我將播放器的腳本更改為如下:

using UnityEngine;
using UnityEngine.Networking;

public class PlayerMove : NetworkBehaviour {

    string player1;
    string player2;

    void Start(){
        player1 = "Player1(Clone)";
        player2 = "Player2";
    }

    // Update is called once per frame
    void Update () {
        if(!isLocalPlayer){
            return;
        }


        float x = Input.GetAxis("Horizontal")*0.1f;
        float z = Input.GetAxis("Vertical")*0.1f;

        transform.Translate(x, 0, z);

        if(Input.GetKeyDown(KeyCode.Space)){
            Debug.Log("switched");
            PlayerChange(this.gameObject);
        }
    }

  public void PlayerChange(GameObject oldPlayer)
  {
      var conn = oldPlayer.GetComponent<NetworkIdentity>().connectionToClient;

      GameObject newPlayer;
      if(this.gameObject.name == player1){
          newPlayer = GameObject.Find(player2);
          NetworkServer.ReplacePlayerForConnection(conn, newPlayer, 0);
      }
      else{
          newPlayer = GameObject.Find(player1); 
          NetworkServer.ReplacePlayerForConnection(conn, newPlayer, 0);
      }  
  }

}

此外,通過將Player1(Prefab)拖動到層次結構來創建Player2對象。

錯誤:我嘗試過播放它,當從Player1切換到Player2時,從Player2切換回Player1則不然。 錯誤消息:

SetClientOwner m_ClientAuthorityOwner already set!
UnityEngine.Networking.NetworkServer:ReplacePlayerForConnection(NetworkConnection, GameObject, Int16)
PlayerMove:PlayerChange(GameObject) (at Assets/PlayerMove.cs:43)
PlayerMove:Update() (at Assets/PlayerMove.cs:28)

要使用網絡對象,您需要先分配權限才能使用它。

假如你在player1並且想要切換到player2那么,

將權限分配給player2並從player1中刪除權限(反之亦然,用於另一個交換機)。

要分配權限,您應該使用此AssignClientAuthority 為了實現代碼的實現,我會向你推薦這個統一論壇的討論 (值得理解)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM