Network対戦での操作オブジェクトの切替方法
マルチポストです。
UnityのNetworkに関して,操作オブジェクトを切替る方法が知りたいです。
例えばゲーム画面上に2つのオブジェクト Player1,Player2があるとして,自分がPlayer1を方向キーで操作できるとします。その際,スペースボタンを押せばPlayer2の操作に切替る,そしてもう一度スペースを押せばPlayer1の操作に切替る方法が知りたいです。
(やってみたこと)
Unity本家サイトの「マルチプレイヤーの動きをテストする」まで同じことを行いました。そしてプレイヤーオブジェクトのプレイヤーの切替を参考にPlayerのScriptを以下のように書き換えました。
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("切替");
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)をHierarchyにドラッグして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)