/// <summary> /// Spawns new <see cref="NetworkEntity"/> having local authority. /// </summary> /// <param name="prefab"></param> /// <param name="onEntitySpawned"></param> public void SpawnLocalEntity(NetworkEntity prefab, EntitySpawnCallback onEntitySpawned) { Assert.IsTrue(Instance.IsConnected); Assert.IsTrue(Authentication.IsAuthenticated); prefab.HasLocalAuthority = true; Message message = new Message { UserId = Authentication.ClientId, Request = "register_entity", Arg = null, }; SendToServer(message, response => OnRegisterFinished(response, prefab, onEntitySpawned)); }
private void OnRegisterFinished(Response response, NetworkEntity entity, EntitySpawnCallback onEntitySpawned) { switch (response.Result) { case ERPCResult.Ok: break; case ERPCResult.Error: Debug.Log("Failed to register entity."); onEntitySpawned?.Invoke(null, false); return; default: throw new ArgumentOutOfRangeException(); } EnqueueMainThreadCommand(() => { Guid newId; try { newId = Guid.Parse(response.Args); } catch (Exception e) { Debug.LogError($"Invalid Guid : {response.Args}"); throw; } var spawned = Instantiate(entity); spawned.NetworkId = newId; RegisterEntity(spawned); onEntitySpawned?.Invoke(spawned, true); }); }