【问题标题】:Switching between player objects in Unity Networking在 Unity Networking 中切换播放器对象
【发布时间】:2016-07-18 15:06:21
【问题描述】:

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

例如,假设有两个对象,Player1 和 Player2,并且您正在控制 Player1。通过按空格键,您现在正在控制 Player2。再按一次,回到控制Player1。

我做了什么: 我关注the Unity Manual 到“测试多人运动”,并在Player Objects 中引用“切换玩家”
我将播放器的脚本更改为如下:

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);
      }  
  }

}

另外,Player2 对象是通过将 Player1 (Prefab) 拖到 Hierarchy 来创建的。

错误: 我尝试播放它,虽然从 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)

【问题讨论】:

    标签: c# unity3d unity5


    【解决方案1】:

    要使用网络对象,您需要先分配权限才能使用它。

    假设你在player1,然后想切换到player2,

    将权限分配给玩家 2 并从玩家 1 移除权限(反之亦然)。

    要分配权限,您应该使用AssignClientAuthority。对于代码的实际实现,我会推荐你​​this unity forum discussion(值得了解)。

    【讨论】:

      猜你喜欢
      • 2021-09-25
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2019-05-04
      相关资源
      最近更新 更多