【发布时间】: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)
【问题讨论】: