G2M_CreateUnitHandler.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. using UnityEngine;
  3. namespace ET
  4. {
  5. [ActorMessageHandler]
  6. public class G2M_CreateUnitHandler : AMActorRpcHandler<Scene, G2M_CreateUnit, M2G_CreateUnit>
  7. {
  8. protected override async ETTask Run(Scene scene, G2M_CreateUnit request, M2G_CreateUnit response, Action reply)
  9. {
  10. UnitComponent unitComponent = scene.GetComponent<UnitComponent>();
  11. Unit unit = unitComponent.AddChildWithId<Unit, int>(IdGenerater.Instance.GenerateId(), 1001);
  12. unit.AddComponent<MoveComponent>();
  13. unit.Position = new Vector3(-10, 0, -10);
  14. NumericComponent numericComponent = unit.AddComponent<NumericComponent>();
  15. numericComponent.Set(NumericType.Speed, 6f); // 速度是6米每秒
  16. unit.AddComponent<MailBoxComponent>();
  17. await unit.AddLocation();
  18. unit.AddComponent<UnitGateComponent, long>(request.GateSessionId);
  19. unitComponent.Add(unit);
  20. response.UnitId = unit.Id;
  21. // 把自己广播给周围的人
  22. M2C_CreateUnits createUnits = new M2C_CreateUnits();
  23. createUnits.Units.Add(UnitHelper.CreateUnitInfo(unit));
  24. MessageHelper.Broadcast(unit, createUnits);
  25. // 把周围的人通知给自己
  26. createUnits.Units.Clear();
  27. Unit[] units = scene.GetComponent<UnitComponent>().GetAll();
  28. foreach (Unit u in units)
  29. {
  30. createUnits.Units.Add(UnitHelper.CreateUnitInfo(u));
  31. }
  32. MessageHelper.SendActor(unit.GetComponent<UnitGateComponent>().GateSessionActorId, createUnits);
  33. reply();
  34. }
  35. }
  36. }