当前位置: 首页 > news >正文

青岛需要做网站的公司有哪些北京网站制作收费标准

青岛需要做网站的公司有哪些,北京网站制作收费标准,wordpress手机没搜索,dw制作网页用的模板注#xff1a;1.这个分类是按照源码里的注释分类的 2.本篇是通读并给出一些注释形式的#xff0c;并不涉及结构性的分析 3.看之前要对UE的GAS系统的定义有初步了解 4.因为都是接口函数#xff0c;有些没细看的研究那一部分的时候会细看 1 一些接口函数#xff0c;但是…注1.这个分类是按照源码里的注释分类的 2.本篇是通读并给出一些注释形式的并不涉及结构性的分析 3.看之前要对UE的GAS系统的定义有初步了解 4.因为都是接口函数有些没细看的研究那一部分的时候会细看 1  一些接口函数但是注释说不要直接调用要通过GameplayCueManager调用 // Do not call these functions directly, call the wrappers on GameplayCueManager insteadUFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCueExecuted_FromSpec(const FGameplayEffectSpecForRPC Spec, FPredictionKey PredictionKey) override;UFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCueExecuted(const FGameplayTag GameplayCueTag, FPredictionKey PredictionKey, FGameplayEffectContextHandle EffectContext) override;UFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCuesExecuted(const FGameplayTagContainer GameplayCueTags, FPredictionKey PredictionKey, FGameplayEffectContextHandle EffectContext) override;UFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCueExecuted_WithParams(const FGameplayTag GameplayCueTag, FPredictionKey PredictionKey, FGameplayCueParameters GameplayCueParameters) override;UFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCuesExecuted_WithParams(const FGameplayTagContainer GameplayCueTags, FPredictionKey PredictionKey, FGameplayCueParameters GameplayCueParameters) override;UFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCueAdded(const FGameplayTag GameplayCueTag, FPredictionKey PredictionKey, FGameplayEffectContextHandle EffectContext) override;UFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCueAdded_WithParams(const FGameplayTag GameplayCueTag, FPredictionKey PredictionKey, FGameplayCueParameters Parameters) override;UFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCueAddedAndWhileActive_FromSpec(const FGameplayEffectSpecForRPC Spec, FPredictionKey PredictionKey) override;UFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCueAddedAndWhileActive_WithParams(const FGameplayTag GameplayCueTag, FPredictionKey PredictionKey, FGameplayCueParameters GameplayCueParameters) override;UFUNCTION(NetMulticast, unreliable)void NetMulticast_InvokeGameplayCuesAddedAndWhileActive_WithParams(const FGameplayTagContainer GameplayCueTags, FPredictionKey PredictionKey, FGameplayCueParameters GameplayCueParameters) override; 2 ExecuteGameplayCue相关 注释翻译GameplayCues也可以独立出现这些函数接受一个可选的效果上下文用于传递命中结果等信息 一个是传入GEContextHandle版本的一个是传入FGameplayCueParameters版本的 声明如下 /** GameplayCues can also come on their own. These take an optional effect context to pass through hit result, etc */void ExecuteGameplayCue(const FGameplayTag GameplayCueTag, FGameplayEffectContextHandle EffectContext FGameplayEffectContextHandle());void ExecuteGameplayCue(const FGameplayTag GameplayCueTag, const FGameplayCueParameters GameplayCueParameters); 实现就是调用GameplayCueManager里的函数 void UAbilitySystemComponent::ExecuteGameplayCue(const FGameplayTag GameplayCueTag, FGameplayEffectContextHandle EffectContext) {// Send to the wrapper on the cue managerUAbilitySystemGlobals::Get().GetGameplayCueManager()-InvokeGameplayCueExecuted(this, GameplayCueTag, ScopedPredictionKey, EffectContext); }void UAbilitySystemComponent::ExecuteGameplayCue(const FGameplayTag GameplayCueTag, const FGameplayCueParameters GameplayCueParameters) {// Send to the wrapper on the cue managerUAbilitySystemGlobals::Get().GetGameplayCueManager()-InvokeGameplayCueExecuted_WithParams(this, GameplayCueTag, ScopedPredictionKey, GameplayCueParameters); } 先大致看下实现可以发现逻辑都一样都是先检查有效性再构造FGameplayCuePendingExecute PendingCue,再调用AddPendingCueExecuteInternal唯一不一样的地方就是初始化PendingCue.CueParameters这个参数的方式不一样WithParams版本的很简单就是直接赋值下面去找下InitGameplayCueParameters这个函数里边重点就这一行 CueParameters.EffectContext EffectContext; 这里贴的实现  void UGameplayCueManager::InvokeGameplayCueExecuted(UAbilitySystemComponent* OwningComponent, const FGameplayTag GameplayCueTag, FPredictionKey PredictionKey, FGameplayEffectContextHandle EffectContext) {if (EnableSuppressCuesOnGameplayCueManager OwningComponent OwningComponent-bSuppressGameplayCues){return;}if (OwningComponent){FGameplayCuePendingExecute PendingCue;PendingCue.PayloadType EGameplayCuePayloadType::CueParameters;PendingCue.GameplayCueTags.Add(GameplayCueTag);PendingCue.OwningComponent OwningComponent;UAbilitySystemGlobals::Get().InitGameplayCueParameters(PendingCue.CueParameters, EffectContext);PendingCue.PredictionKey PredictionKey;AddPendingCueExecuteInternal(PendingCue);} }void UGameplayCueManager::InvokeGameplayCueExecuted_WithParams(UAbilitySystemComponent* OwningComponent, const FGameplayTag GameplayCueTag, FPredictionKey PredictionKey, FGameplayCueParameters GameplayCueParameters) {if (EnableSuppressCuesOnGameplayCueManager OwningComponent OwningComponent-bSuppressGameplayCues){return;}if (OwningComponent){FGameplayCuePendingExecute PendingCue;PendingCue.PayloadType EGameplayCuePayloadType::CueParameters;PendingCue.GameplayCueTags.Add(GameplayCueTag);PendingCue.OwningComponent OwningComponent;PendingCue.CueParameters GameplayCueParameters;PendingCue.PredictionKey PredictionKey;AddPendingCueExecuteInternal(PendingCue);} } 顺着思路看AddPendingCueExecuteInternal 发现就是把他加入了执行队列但是没有真正执行 void UGameplayCueManager::AddPendingCueExecuteInternal(FGameplayCuePendingExecute PendingCue) {if (ProcessPendingCueExecute(PendingCue)){PendingExecuteCues.Add(PendingCue);}if (GameplayCueSendContextCount 0){// Not in a context, flush nowFlushPendingCues();} } 再去看FlushPendingCues这个函数 函数体太长了核心就是调用这两个函数 诶惊奇的发现就是前面第一部分里不让你直接调用的接口函数找了一圈RepInterface也是调用接口函数所以最后除了各个函数的条件判断不太一样都是调用的ASC中的InvokeGameplayCueEvent RepInterface-Call_InvokeGameplayCueExecuted_WithParams PendingCue.OwningComponent-InvokeGameplayCueEvent 这里的RepInterface IAbilitySystemReplicationProxyInterface* RepInterface PendingCue.OwningComponent-GetReplicationInterface(); 再顺着看Invoke这个函数发现都调用GameplayCueManager的HandleGameplayCue UAbilitySystemGlobals::Get().GetGameplayCueManager()-HandleGameplayCue GC中的HandleGameplayCue会先将标签翻译然后路由路由中的具体处理 CueSet和Interface调用HandleGameplayCue其中的GameplayCueInterface CastIGameplayCueInterface(TargetActor) // Give the global set a chanceif (bAcceptsCue !(Options EGameplayCueExecutionOptions::IgnoreNotifies)){RuntimeGameplayCueObjectLibrary.CueSet-HandleGameplayCue(TargetActor, GameplayCueTag, EventType, Parameters);}// Use the interface even if its not in the mapif (GameplayCueInterface bAcceptsCue){GameplayCueInterface-HandleGameplayCue(TargetActor, GameplayCueTag, EventType, Parameters);} Interface中的Handle会处理函数列表最后转到默认处理函数子类可以实现 而CueSet中调用这个函数 UGameplayCueSet::HandleGameplayCueNotify_Internal 会分UGameplayCueNotify_Static和AGameplayCueNotify_Actor处理具体逻辑到这就各种信息检索完了进入具体的处理逻辑之后就要进入这两个类里看了这里就不继续看了 3 AddGameplayCue /** Add a persistent gameplay cue */void AddGameplayCue(const FGameplayTag GameplayCueTag, FGameplayEffectContextHandle EffectContext FGameplayEffectContextHandle());void AddGameplayCue(const FGameplayTag GameplayCueTag, const FGameplayCueParameters GameplayCueParameters); 套娃到这里 这个函数大体逻辑 检查是否是服务器 检查是否已经存在该提示避免重复添加 强制网络同步确保客户端能够接收到最新的游戏玩法提示 添加GC到容器 处理混合复制模式根据复制模式调整预测Key 调用RPC播放激活事件通过RPC将游戏玩法提示同步到客户端 触发服务器端事件在服务器端触发 WhileActive 事件 客户端预测逻辑在客户端预测性地添加GC并触发事件 void UAbilitySystemComponent::AddGameplayCue_Internal(const FGameplayTag GameplayCueTag, const FGameplayCueParameters GameplayCueParameters, FActiveGameplayCueContainer GameplayCueContainer) {if (IsOwnerActorAuthoritative()){const bool bWasInList GameplayCueContainer.HasCue(GameplayCueTag);ForceReplication();GameplayCueContainer.AddCue(GameplayCueTag, ScopedPredictionKey, GameplayCueParameters);// For mixed minimal replication mode, we do NOT want the owning client to play the OnActive event through this RPC, since it will get the full replicated // GE in its AGE array. Generate a server-side prediction key for it, which it will look for on the _Implementation function and ignore. (--- Original Hack){FPredictionKey PredictionKeyForRPC ScopedPredictionKey; // Key we send for RPC. Start with the regular old ScopedPredictionKey// Special stuff for mixed replication modeif (ReplicationMode EGameplayEffectReplicationMode::Mixed){if (GameplayCueContainer.bMinimalReplication){// For *replicated to sim proxies only* container, Create a Server Initiated PK to avoid double playing on the auto proxy in mixed replication mode (Original Hack)PredictionKeyForRPC FPredictionKey::CreateNewServerInitiatedKey(this);}else{// For replicated to everyone cue container, we need to clear server replicated prediction keys, or else they will trip the same absorption code that we added for the first hack above.// Its ok to just throw out a server replicated prediction key because (outside of mixed replication mode) it will not affect what the client does in NetMulticast_InvokeGameplayCueAdded_WithParams_Implementation// (E.g, the client only skips the InvokeCall if the key is locally generated, not for server generated ones anways)if (ScopedPredictionKey.IsServerInitiatedKey()){PredictionKeyForRPC FPredictionKey();}}}// Finally, call the RPC to play the OnActive eventif (IAbilitySystemReplicationProxyInterface* ReplicationInterface GetReplicationInterface()){ReplicationInterface-Call_InvokeGameplayCueAdded_WithParams(GameplayCueTag, PredictionKeyForRPC, GameplayCueParameters);}}if (!bWasInList){// Call on server here, clients get it from repnotifyInvokeGameplayCueEvent(GameplayCueTag, EGameplayCueEvent::WhileActive, GameplayCueParameters);}}else if (ScopedPredictionKey.IsLocalClientKey()){GameplayCueContainer.PredictiveAdd(GameplayCueTag, ScopedPredictionKey);// Allow for predictive gameplaycue events? Needs more thoughtInvokeGameplayCueEvent(GameplayCueTag, EGameplayCueEvent::OnActive, GameplayCueParameters);InvokeGameplayCueEvent(GameplayCueTag, EGameplayCueEvent::WhileActive, GameplayCueParameters);} } 4 RemoveGameplayCue /** Remove a persistent gameplay cue */void RemoveGameplayCue(const FGameplayTag GameplayCueTag); 去到了Container里处理Remove这里就不深入了具体研究GC会继续看 void UAbilitySystemComponent::RemoveGameplayCue_Internal(const FGameplayTag GameplayCueTag, FActiveGameplayCueContainer GameplayCueContainer) {if (IsOwnerActorAuthoritative()){GameplayCueContainer.RemoveCue(GameplayCueTag);}else if (ScopedPredictionKey.IsLocalClientKey()){GameplayCueContainer.PredictiveRemove(GameplayCueTag);} } 总结1.以上就是几个关键的函数但都是偏向的都是调用的整体逻辑没有深入具体的实现留坑 2.按着我看的顺序来的并非实际调用顺序
http://www.hkea.cn/news/14415182/

相关文章:

  • 做仿网站的书html访问人数统计代码
  • 专业网站推荐18款禁用软件黄app免费
  • 河北pc端网站建设企业网站东莞网站建设制作
  • 做阀门网站效果怎么样英文网站 模板
  • 成品网站w灬源码1688用自己的名字设计头像
  • 越秀公司网站建设郑州网站关键词优化公司
  • 工厂的网站在哪里做的php做的购物网站
  • 网站session 验证网上书店网站建设规划书
  • 网站建设流程公司十堰秦楚网公众号
  • 在网站里面如何做支付工具网站关闭了域名备案
  • 手机搞笑网站模板下载安装seo系统
  • 精品网站建设费用 地址磐石网络长沙网站推广系统
  • 广州网站推广哪家强做wordpress模板赚钱
  • 哪些网站专门做细胞的东莞做网站做seo优化外包网络公司
  • 简约网站建设公司wordpress移植数据库
  • 深圳wap网站建设公司铁岭网站建设移动网站
  • 最新淘宝客网站程序wordpress微信h5
  • 郑州网站建设三猫网络静态网页的特点
  • 网站竞争对手如何做调研哈尔滨网站建设教程
  • 好学校平台网站模板now9999网站提示建设中
  • 邯郸市永年区做网站的公司傻瓜网站开发软件
  • 做外销网站百度的网站建设代码
  • 宿迁城乡住房建设厅网站徐州网络科技有限公司
  • 天津网站建设 易尔通成品短视频app下载有哪些软件在线观看
  • 服务器win7网站建设网站建设目的和意义
  • 青岛wordpress建站门户网站的优点
  • 家装网站做网站开发流程6个阶段
  • 房产网站制作公司石家庄广告制作公司
  • 建网站问题网站开发工作量
  • 四川省四川省住房和城乡建设厅网站品牌网球拍有哪些