OnNewZoneObject.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using UnityEngine;
  2. namespace ET.Client
  3. {
  4. [Event(SceneType.Current)]
  5. public class OnNewZoneObjectHandler : AEvent<EventType.OnNewZoneObject>
  6. {
  7. protected override async ETTask Run(Scene scene, EventType.OnNewZoneObject args)
  8. {
  9. var obj = UnitMgr.Instance.GetUnit(args.ObjectId);
  10. if(obj is BattleUnit)
  11. {
  12. await CreatUnitModel(obj as BattleUnit);
  13. }
  14. else
  15. {
  16. Log.Error("unknow new object");
  17. }
  18. }
  19. private static CommonLang.Geometry.Vector3 vecTemp = new();
  20. private async ETTask CreatUnitModel(BattleUnit unit)
  21. {
  22. var zu = unit.ZUnit;
  23. var handle = await YooAssetProxy.LoadAssetAsync<GameObject>($"Unit_{zu.Info.FileName}");
  24. var prefab = handle.GetAssetObject<GameObject>();
  25. GameObject go = UnityEngine.Object.Instantiate(prefab, GlobalViewComponent.Instance.Unit, true);
  26. vecTemp.Set(unit.ZUnit.X, unit.ZUnit.Y, unit.ZUnit.Z);
  27. go.transform.position = RenderUtils.UnityPosFromBattle(vecTemp);
  28. go.transform.rotation = RenderUtils.UnityRotationFromBattle(zu.Direction);
  29. ModelViewComponent.Instance.AddChildWithId<UnitRenderComponet, GameObject>(unit.Id, go, true);
  30. if (unit is BattleActor)
  31. {
  32. CameraMgr.FollowMe(go.transform.position);
  33. }
  34. Log.Debug($"unitRender({zu.ObjectID}) ok.");
  35. //TODO: 同步ZoneUnit status
  36. }
  37. }
  38. }