Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity网络中播放器对象之间的切换_C#_Unity3d_Unity5 - Fatal编程技术网

C# Unity网络中播放器对象之间的切换

C# Unity网络中播放器对象之间的切换,c#,unity3d,unity5,C#,Unity3d,Unity5,我想知道如何在Unity的网络中在可控对象之间来回切换 例如,假设有两个对象,Player1和Player2,并且您正在控制Player1。按空格键,您现在可以控制Player2。再次按下,返回到控制播放器1 我所做的: 我接着说了“测试多人游戏移动”,并在 我将玩家的脚本更改为: using UnityEngine; using UnityEngine.Networking; public class PlayerMove : NetworkBehaviour { string p

我想知道如何在Unity的网络中在可控对象之间来回切换

例如,假设有两个对象,Player1和Player2,并且您正在控制Player1。按空格键,您现在可以控制Player2。再次按下,返回到控制播放器1

我所做的: 我接着说了“测试多人游戏移动”,并在
我将玩家的脚本更改为:

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,想切换到player2

将权限分配给player2并从player1中删除权限(对于另一个交换机,反之亦然)


要分配权限,您应该使用此选项。对于代码的实际实现,我推荐您(值得理解)。

对于使用网络对象,您应该首先分配权限才能使用它

假设你在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)