1
ユニティ5 UNETを使っていくつかのマルチプレイヤーゲームをコーディングする間に立ち往生します。 は、現在ユニティ5.1と連携しており、ネットワーク経由でゲームオブジェクトの子トランスフォームを同期したいと考えています。ユニティ5 UNETマルチプレイヤーコード
問題は、すべてのクライアントが子トランスフォームをサーバーに同期する要求を送信していることです。サーバーは他のクライアントと子トランスフォームを沈めていません。
コンポーネントがユニティ5.2であると聞いていますが、私はユニティ5.1で作業していると言っているので、5.1のソリューションが必要です。
ここは私のコードです。
あなたは、サーバー上の各接続されたクライアント/プレーヤーの「影のオブジェクト」を作成し、antoehrリモートオブジェクトの位置をrepreseningこれらのオブジェクトを移動させることができ、応答
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class Sync_Position : NetworkBehaviour
{
[SyncVar]
Vector3 []sync_pos;
[SerializeField] Transform []obj;
[SerializeField] int lerp_rate;
Vector3 []last_pos;
float threshold=5;
void Start()
{
sync_pos= new Vector3[obj.Length];
last_pos= new Vector3[obj.Length];
}
// Update is called once per frame
void FixedUpdate()
{
transform_pos();
lerp_pos();
}
void lerp_pos()
{
if(!isLocalPlayer)
{
for(int i=0;i<obj.Length;i++)
{
if(Vector3.Distance(obj[i].localPosition,sync_pos[i]) > 1)
{
obj[i].localPosition=sync_pos[i];
}
}
}
}
[Command]
void Cmd_for_pos(Vector3 p, int index)
{
sync_pos[index]=p;
}
[ClientCallback]
void transform_pos()
{
if(isLocalPlayer)
{
for(int i=0;i<obj.Length;i++)
{
if(Vector3.Distance(obj[i].localPosition,last_pos[i]) > threshold)
{
Cmd_for_pos(obj[i].localPosition,i);
last_pos[i]=obj[i].localPosition;
}
}
}
}
}