Skip to content
jiepengtan edited this page Nov 20, 2019 · 4 revisions
  • 需要在文件 __DllSourceFiles/Tools.UnsafeECS.ECDefine/Src/Unsafe/Event.cs 中进行定义, 同时需要继承自 IEvent
  • 事件需要的参数以类 public 成员的形式定义,默认参数会添加 Entity* ptr
    public class OnSkillFire: IEvent{
        public SkillData SkillData;//这里是相应的事件需要的参数
    }
  • 生成的代码的主体可以在 __DllSourceFiles/Game.Model/Src/__UnsafeECS/Generated/CodeGen_Event.cs 看到
  • 其他细碎的代码在其他文件中可能掺杂
    public unsafe partial interface IGameEventService : IService{
        void OnSkillFire(Entity* ptr
                ,ref SkillData SkillData             
            );  
    } 
  • 可以在相应的GameExecuteSystem 中会自动生成 RaiseEventXxxx 函数。可以直接调用(限制在主线程中调用),相应的回调函数在IGameEventService 的继承者中定义 如:
    public unsafe partial class SkillSystem : GameExecuteSystem {
        private LFloat _deltaTime;
        public void Execute(Entity* ptr,ref SkillData skillData){
            //skillData.IsFiring = skillMonoData.IsFiring;
            if (skillData.IsNeedFire) {
                if (skillData.CdTimer <= 0 && !skillData.IsFiring) {
                    skillData.CdTimer = skillData.CD;
                    skillData.IsFiring = true;
                    skillData.DurationTimer = skillData.Duration;
                    RaiseEventOnSkillFire(ptr,ref skillData);
                }
            }

            skillData.CdTimer -= _deltaTime;
            if (skillData.IsFiring) {
                skillData.DurationTimer -= _deltaTime;
                if (skillData.DurationTimer <= 0) {
                    skillData.IsFiring = false;
                    RaiseEventOnSkillDone(ptr,ref skillData);
                }
            }

            skillData.IsNeedFire = false;
        }
      ...

Clone this wiki locally