using ET.PeopleBehave; using FairyGUI; using UnityEngine; namespace ET { using FUIUnitName; public class SceneChangeStart_AddComponent: AEvent { protected override void Run(EventType.SceneChangeStart args) { RunAsync(args).Coroutine(); } private async ETTask RunAsync(EventType.SceneChangeStart args) { Scene currentScene = args.ZoneScene.CurrentScene(); // 加载场景资源 // await ResourcesComponent.Instance.LoadBundleAsync($"{currentScene.Name}.unity3d"); // 切换到map场景 SceneChangeComponent sceneChangeComponent = null; try { sceneChangeComponent = Game.Scene.AddComponent(); { await sceneChangeComponent.ChangeSceneAsync(currentScene.Name); } } finally { sceneChangeComponent?.Dispose(); } currentScene.AddComponent(); currentScene.AddComponent(); currentScene.AddComponent(); currentScene.AddComponent(); currentScene.AddComponent(); currentScene.AddComponent(); Unit unit = UnitComponent.unit; // show name ui var fuiPkgComponent = unit.ZoneScene().GetComponent(); fuiPkgComponent.AddPackage(FUIPackage.Common); var nameComp = await unit.ZoneScene().GetComponent().ShowUIAsync(FUI_UnitNamePanel.UIPackageName); // 需要上面的Unit创建消息发送完进行初始化,才能进行下面其它东西的创建消息 BuildingComponent buildingComponent = unit.GetComponent(); foreach (var building in buildingComponent.Children) { Game.EventSystem.Publish(new EventType.AfterCreateBuilding() { Unit = unit, Building = (Building)building.Value }); } var cc = unit.GetComponent(); if (cc != null) { foreach (var construct in cc.Children) { Game.EventSystem.Publish(new EventType.AfterCreateConstruct() { Unit = unit, Construct = (Construct)construct.Value}); } } var rc = unit.GetComponent(); foreach (var resPair in rc.Children) { Game.EventSystem.Publish(new EventType.AfterCreateResource(){Unit = unit, Resource = (ResourcePoint)resPair.Value}); } // 人的View放在最后面,因为要安排他们去资源和建筑上工作 var pc = unit.GetComponent(); foreach (var v in pc.Children) { Game.EventSystem.Publish(new EventType.AfterCreatePeople() { Unit = unit, People = (People)v.Value }); } Game.EventSystem.Publish(new EventType.SceneChangeFinish() {ZoneScene = args.ZoneScene, CurrentScene = currentScene}); args.ZoneScene.GetComponent().Notify(new WaitType.Wait_SceneChangeFinish()); } } }