using System; using UnityEngine; namespace ET { [ActorMessageHandler] public class G2M_CreateUnitHandler : AMActorRpcHandler { protected override async ETTask Run(Scene scene, G2M_CreateUnit request, M2G_CreateUnit response, Action reply) { UnitComponent unitComponent = scene.GetComponent(); Unit unit = unitComponent.AddChildWithId(IdGenerater.Instance.GenerateId(), 1001); unit.AddComponent(); unit.Position = new Vector3(-10, 0, -10); NumericComponent numericComponent = unit.AddComponent(); numericComponent.Set(NumericType.Speed, 6f); // 速度是6米每秒 unit.AddComponent(); await unit.AddLocation(); unit.AddComponent(request.GateSessionId); unitComponent.Add(unit); response.UnitId = unit.Id; // 把自己广播给周围的人 M2C_CreateUnits createUnits = new M2C_CreateUnits(); createUnits.Units.Add(UnitHelper.CreateUnitInfo(unit)); MessageHelper.Broadcast(unit, createUnits); // 把周围的人通知给自己 createUnits.Units.Clear(); Unit[] units = scene.GetComponent().GetAll(); foreach (Unit u in units) { createUnits.Units.Add(UnitHelper.CreateUnitInfo(u)); } MessageHelper.SendActor(unit.GetComponent().GateSessionActorId, createUnits); reply(); } } }