public void Awake() { // Taken from DefaultWorldInitalization.cs SetupInjectionHooks(); // Register hybrid injection hooks PlayerLoopManager.RegisterDomainUnload(DomainUnloadShutdown, 10000); // Clean up worlds and player loop Application.targetFrameRate = targetFrameRate; Worker.OnConnect += w => Debug.Log($"{w.WorkerId} is connecting"); Worker.OnDisconnect += w => Debug.Log($"{w.WorkerId} is disconnecting"); // Setup template to use for player on connecting client PlayerLifecycleConfig.CreatePlayerEntityTemplate = PlayerTemplate.CreatePlayerEntityTemplate; if (Application.isEditor) { var config = new ReceptionistConfig { WorkerType = SystemConfig.UnityGameLogic, }; CreateWorker(config, new Vector3(500, 0, 0)); config = new ReceptionistConfig { WorkerType = SystemConfig.UnityClient, }; CreateWorker(config, Vector3.zero); } else { var commandLineArguments = Environment.GetCommandLineArgs(); Debug.LogFormat("Command line {0}", string.Join(" ", commandLineArguments.ToArray())); var commandLineArgs = CommandLineUtility.ParseCommandLineArgs(commandLineArguments); var config = ConnectionUtility.CreateConnectionConfigFromCommandLine(commandLineArgs); CreateWorker(config, Vector3.zero); } if (World.AllWorlds.Count <= 0) { throw new InvalidConfigurationException( "No worlds have been created, due to invalid worker types being specified. Check the config in" + "Improbable -> Configure editor workers."); } var worlds = World.AllWorlds.ToArray(); ScriptBehaviourUpdateOrder.UpdatePlayerLoop(worlds); // Systems don't tick if World.Active isn't set World.Active = worlds[0]; }
public void Awake() { InitializeWorkerTypes(); // Taken from DefaultWorldInitalization.cs SetupInjectionHooks(); // Register hybrid injection hooks PlayerLoopManager.RegisterDomainUnload(DomainUnloadShutdown, 10000); // Clean up worlds and player loop Application.targetFrameRate = TargetFrameRate; if (Application.isEditor) { #if UNITY_EDITOR var workerConfigurations = AssetDatabase.LoadAssetAtPath <ScriptableWorkerConfiguration>(ScriptableWorkerConfiguration .AssetPath); foreach (var workerConfig in workerConfigurations.WorkerConfigurations) { if (!workerConfig.IsEnabled) { continue; } var worker = WorkerRegistry.CreateWorker(workerConfig.Type, $"{workerConfig.Type}-{Guid.NewGuid()}", workerConfig.Origin); Workers.Add(worker); } connectionConfig = new ReceptionistConfig(); connectionConfig.UseExternalIp = workerConfigurations.UseExternalIp; #endif } else { var commandLineArguments = System.Environment.GetCommandLineArgs(); Debug.LogFormat("Command line {0}", string.Join(" ", commandLineArguments.ToArray())); var commandLineArgs = CommandLineUtility.ParseCommandLineArgs(commandLineArguments); var workerType = CommandLineUtility.GetCommandLineValue(commandLineArgs, RuntimeConfigNames.WorkerType, string.Empty); var workerId = CommandLineUtility.GetCommandLineValue(commandLineArgs, RuntimeConfigNames.WorkerId, string.Empty); // because the launcher does not pass in the worker type as an argument var worker = workerType.Equals(string.Empty) ? WorkerRegistry.CreateWorker <UnityClient>( workerId: null, // The worker id for the UnityClient will be auto-generated. origin: new Vector3(0, 0, 0)) : WorkerRegistry.CreateWorker(workerType, workerId, new Vector3(0, 0, 0)); Workers.Add(worker); connectionConfig = ConnectionUtility.CreateConnectionConfigFromCommandLine(commandLineArgs); } if (World.AllWorlds.Count <= 0) { throw new InvalidConfigurationException( "No worlds have been created, due to invalid worker types being specified. Check the config in" + "Improbable -> Configure editor workers."); } var worlds = World.AllWorlds.ToArray(); ScriptBehaviourUpdateOrder.UpdatePlayerLoop(worlds); // Systems don't tick if World.Active isn't set World.Active = worlds[0]; }