私はマルチプレイヤーゲームを書いていますが、システムの構築に行き詰まっています-ブロックを配置するコードを作成したことは、ホスト側で完全に正常に動作することを意味します(ホストでこのスクリプトを実行すると、すべてのクライアントのブロックスポーン)が、クライアント側では動作していません (ブロックはローカル クライアントに対してのみ生成され、サーバーや他のクライアントに対してはブロックされません)。私は多くの同様の問題を見てきましたが、今日は答えが見つかりませんでした. 手を貸してくれるかもしれません。これが私のコードです:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Builder : NetworkBehaviour {
public GameObject preview;
public Transform currentPreview;
bool isPreviewing = false;
GameObject buildingPreview;
private NetworkIdentity networkId;
// Use this for initialization
void Start ()
{
networkId = GetComponent<NetworkIdentity>();
}
// Update is called once per frame
void ViewPreview()
{
buildingPreview = Instantiate(preview, transform.position, transform.rotation) as GameObject;
currentPreview = buildingPreview.transform;
isPreviewing = true;
}
void Update ()
{
CmdBuild();
}
void CmdBuild()
{
if (networkId.isLocalPlayer)
{
}
else
{ return; }
if (Input.GetKeyDown(KeyCode.E))
{
if (!isPreviewing)
ViewPreview();
else
{
Destroy(buildingPreview);
isPreviewing = false;
}
}
if (isPreviewing)
{
Preview();
}
}
[Command]
void CmdSpawnBuilding()
{
GameObject buildingPlaced = Instantiate(preview, currentPreview.position, currentPreview.rotation) as GameObject;
NetworkServer.Spawn(buildingPlaced);
}
void Preview()
{
currentPreview.position = transform.position + transform.forward * 3f;
currentPreview.rotation = transform.rotation;
if (Input.GetButtonDown("Fire1"))
{
CmdSpawnBuilding();
isPreviewing = false;
}
}
}
PS: ネットワーク認識スクリプトをプレハブに割り当てています。ネットワーク対応のプレハブを作成しており、そのプレハブをネットワーク マネージャーに登録済みのスポーン可能なプレハブとして持っています。