【发布时间】:2022-10-02 04:23:39
【问题描述】:
我正在尝试构建一个基于图块的多人策略游戏。根据我的理解,我应该创建一个“播放器”GameObject,然后将地图存储为带有NetworkObject 组件的GameObjects 的集合,以便从客户端同步到服务器。
但是,我在主机和客户端之间同步游戏对象时遇到问题。创建服务器时,只有服务器应该生成地图(地图生成代码标记)。当玩家连接时,他们应该获得自己的游戏组件。
namespace HelloWorld
{
public class HelloWorldManager : MonoBehaviour
{
public GameObject networkedPrefab;
void OnGUI()
{
GUILayout.BeginArea(new Rect(10, 10, 300, 300));
if (!NetworkManager.Singleton.IsClient && !NetworkManager.Singleton.IsServer)
{
if (GUILayout.Button(\"Client\")) NetworkManager.Singleton.StartClient();
if (GUILayout.Button(\"Server\")) {
// Generate \'map\' here of 10 items
for (int i = 0; i < 10; i++) {
var go = Instantiate(networkedPrefab);
go.transform.position = new Vector2((i - 5), 0);
go.gameObject.name = \"Circle-\" + i;
}
NetworkManager.Singleton.StartServer();
}
}
else
{
StatusLabels();
SubmitNewPosition(); // Adds button for player to randomly move their position
}
GUILayout.EndArea();
}
static void SubmitNewPosition()
{
if (GUILayout.Button(NetworkManager.Singleton.IsServer ? \"Move\" : \"Request Position Change\"))
{
if (NetworkManager.Singleton.IsServer && !NetworkManager.Singleton.IsClient )
{
foreach (ulong uid in NetworkManager.Singleton.ConnectedClientsIds)
NetworkManager.Singleton.SpawnManager.GetPlayerNetworkObject(uid).GetComponent<HelloWorldPlayer>().Move();
}
else
{
var playerObject = NetworkManager.Singleton.SpawnManager.GetLocalPlayerObject();
var player = playerObject.GetComponent<HelloWorldPlayer>();
player.Move();
}
}
}
}
}
这是我使用的预制件:
任何帮助让事情在服务器和客户端之间同步将不胜感激。