UnitFactory.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using UnityEngine;
  2. namespace ET
  3. {
  4. public static class UnitFactory
  5. {
  6. public static Unit Create(Entity domain, UnitInfo unitInfo)
  7. {
  8. UnitComponent unitComponent = domain.GetComponent<UnitComponent>();
  9. Unit unit = unitComponent.AddChildWithId<Unit, int>(unitInfo.UnitId, unitInfo.ConfigId);
  10. unitComponent.Add(unit);
  11. unit.Position = new Vector3(unitInfo.X, unitInfo.Y, unitInfo.Z);
  12. unit.Forward = new Vector3(unitInfo.ForwardX, unitInfo.ForwardY, unitInfo.ForwardZ);
  13. NumericComponent numericComponent = unit.AddComponent<NumericComponent>();
  14. for (int i = 0; i < unitInfo.Ks.Count; ++i)
  15. {
  16. numericComponent.Set((NumericType)unitInfo.Ks[i], unitInfo.Vs[i]);
  17. }
  18. unit.AddComponent<MoveComponent>();
  19. if (unitInfo.MoveInfo != null)
  20. {
  21. if (unitInfo.MoveInfo.X.Count > 0)
  22. {
  23. using (ListComponent<Vector3> list = ListComponent<Vector3>.Create())
  24. {
  25. list.Add(unit.Position);
  26. for (int i = 0; i < unitInfo.MoveInfo.X.Count; ++i)
  27. {
  28. list.Add(new Vector3(unitInfo.MoveInfo.X[i], unitInfo.MoveInfo.Y[i], unitInfo.MoveInfo.Z[i]));
  29. }
  30. unit.MoveToAsync(list).Coroutine();
  31. }
  32. }
  33. }
  34. unit.AddComponent<ObjectWait>();
  35. unit.AddComponent<XunLuoPathComponent>();
  36. Game.EventSystem.Publish(new EventType.AfterUnitCreate() {Unit = unit}).Coroutine();
  37. return unit;
  38. }
  39. }
  40. }