【发布时间】:2022-08-07 17:23:07
【问题描述】:
我对镜子很陌生。让我试着解释一下我的设置和问题:
在客户端,玩家生成多个游戏对象并选择他将在比赛中使用的唯一一个。例如,他的车库里有 4 辆汽车,加载场景车库时,场景中已经生成了 4 个汽车对象。当他选择想要在比赛中使用的汽车时,PlayerManager 实例中的 Player 属性将更新为所选汽车的值。
public class PlayerManager : MonoBehaviour {
public static PlayManager Instance;
private void Awake() {
if (Instance != null) Destroy(gameObject);
Instance = this;
}
public Player Player {get; private set;}
public static void UpdateSelectedCar() {
Car car = CarSpawner.SelectedCar;
Player.Car = car;
}
}
public class Player () {
public Car Car { get; set; }
public string Name;
....
public Player(string playerName){
Name = playerName;
}
}
public class Car() {
public GameObject;
public CarName;
.....
public void Instantiate() {
GameObject = Object.Instantiate(carPrefab, carPosition);
}
}
在 NetworkManagerCar 中,我进行了如下设置:
public class NetworkManagerCar : NetworkManager {
// There are Host and Join Button in the UI for create host or join as client
private void OnEnable() {
hostBtn.onClick.AddListener(CreateHost);
joinBtn.onClick.AddListener(JoinGame);
}
private void OnDisable() {
hostBtn.onClick.RemoveListener(CreateHost);
joinBtn.onClick.RemoveListener(JoinGame);
}
private void CreateHost() {
StartHost();
networkStatus.text = \"Waiting for other to join...\";
}
private void JoinGame() {
StartClient();
networkStatus.text = \"Finding Match...\";
}
public override void OnClientConnect() {
PlayerManager.UpdateSelectedCar();
playerPrefab = PlayerManager.Instance.Player.Car.GameObject;
Debug.Log($\"Prefab name: {playerPrefab.name}\");
base.OnClientConnect();
Debug.Log($\"{PlayerManager.Instance.Player.Name} connected\");
}
public override void OnServerAddPlayer(NetworkConnectionToClient conn) {
GameObject player = playerPrefab;
player.name = $\"{playerPrefab.name} [connId={conn.connectionId}]\";
NetworkServer.AddPlayerForConnection(conn, player);
}
}
我主持比赛时没问题。但是,当 1 个客户加入时,我得到了以下错误。我使用 ParrelSync 克隆客户端,我已经尝试删除克隆并创建一个新的,但错误仍然是:
在主机控制台上:
Object Car10(Clone) [connId=0] [connId=250806295] [connId=701038615] (Mirror.NetworkIdentity) netId=2 already has an owner. Use RemoveClientAuthority() first
UnityEngine.Debug:LogError (object,UnityEngine.Object)
在客户端控制台上:
Spawn scene object not found for CE359B9F. Make sure that client and server use exactly the same project. This only happens if the hierarchy gets out of sync.
Could not spawn assetId=00000000-0000-0000-0000-000000000000 scene=CE359B9F netId=1
OnSpawn message with netId \'2\' has no AssetId or sceneId
谁能告诉我哪里错了:(