【发布时间】:2022-10-30 16:49:45
【问题描述】:
我一直在尝试使用这个在服务器中生成游戏对象(特别是玩家游戏对象)player.GetComponent().Spawn()然后试图改变所有权。它对我不起作用。如此沮丧。任何人都可以帮助解决这个问题。
我想在服务器和客户端生成两个不同的播放器。因此,我尝试仅在服务器中生成所有玩家,并尝试使用 ownerclientId、LocalClientId 更改所有权。没有任何效果。发生的情况是它在服务器和客户端屏幕中都生成了两个玩家,但只有服务器拥有所有权。
代码sn-p:
private void Start()
{
var playerSelected = GameObject.Find("PlayerSelected");
int selectedPlayer = playerSelected.GetComponent<PlayerSelected>().selectPlayer;
if (NetworkManager.Singleton.IsServer)
{
PlayerSpawner(selectedPlayer, OwnerClientId);
}
else
{
PlayerSpawnerOnServerRpc(selectedPlayer, OwnerClientId);
}
}
[ServerRpc(RequireOwnership = false)]
void PlayerSpawnerOnServerRpc(int selectedPlayer, ulong clientId)
{
PlayerSpawner(selectedPlayer, clientId);
}
void PlayerSpawner(int selectedPlayer, ulong clientId)
{
GameObject player;
switch(selectedPlayer)
{
case 0:
player = Instantiate(player1Prefab, spawnPositionPlayer1);
player.GetComponent<NetworkObject>().Spawn();
player.GetComponent<NetworkObject>().ChangeOwnership(clientId);
break;
case 1:
player = Instantiate(player2Prefab, spawnPositionPlayer2);
player.GetComponent<NetworkObject>().Spawn();
player.GetComponent<NetworkObject>().ChangeOwnership(clientId);
break;
}
}
【问题讨论】:
标签: unity3d multiplayer unity-networking