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

服装手机商城网站建设tk网站域名注册

服装手机商城网站建设,tk网站域名注册,360提交网站收录入口,电商是怎么做的当我们想设计实现一个爆炸功能时,应该怎么办? 如何考虑服务端与客户端优先权的问题?如何设计出一个合理的功能。 UE源代码中给我们提供了一个相当细节爆炸实现函数,里面写了详细的注释。应该如何使用这个函数,注意事项…

        当我们想设计实现一个爆炸功能时,应该怎么办? 如何考虑服务端与客户端优先权的问题?如何设计出一个合理的功能。

UE源代码中给我们提供了一个相当细节爆炸实现函数,里面写了详细的注释。应该如何使用这个函数,注意事项.

声明与解释:

代码前导声明标记,可以在什么地方使用。 UE 中的meta 为自定义类型,意思就是怎么实现看你自己,提供更广阔的施展空间(具体可以看看UE中meta的用法)。所以这个函数,是UE 手动自己造的一个。

UFUNCTION(BlueprintCallable,                // 可在蓝图中调用BlueprintAuthorityOnly,           // 仅在拥有网络权限的服务器上执行Category="Game|Damage",           // 在蓝图中的分类路径meta=(WorldContext="WorldContextObject",  // 指定世界上下文参数AutoCreateRefTerm="IgnoreActors"    // 自动创建引用参数)
)
1. BlueprintCallable
  • 作用:允许在蓝图图表中调用此函数
  • 效果:
    • 函数会出现在蓝图的 "调用函数" 节点列表中
    • 可通过蓝图可视化编程直接调用 C++ 逻辑
  • 适用场景:需要在蓝图中实现的核心游戏逻辑(如伤害计算)
2. BlueprintAuthorityOnly
  • 作用:确保函数仅在拥有网络权限的服务器上执行
  • 网络逻辑:
    • 客户端调用此函数时,实际执行会转发到服务器
    • 防止客户端作弊修改伤害计算逻辑
  • 注意事项:
    • 函数执行结果需要通过网络同步回客户端
    • 纯单机游戏中此参数无效
3. Category="Game|Damage"
  • 作用:在蓝图编辑器中对函数进行分类
  • 显示效果:
    • 函数会出现在蓝图节点面板的 "Game → Damage" 类别下
    • 多层级分类使用竖线 (|) 分隔
  • 最佳实践:
    • 按功能模块组织函数(如 "Gameplay/Combat"、"UI/Navigation")
    • 保持分类结构简洁清晰
4. meta 参数详解
WorldContext="WorldContextObject"
  • 作用:指定哪个参数是用于获取游戏世界的上下文对象
  • 技术实现:
    • 虚幻引擎通过该参数获取 UWorld 实例
    • 确保函数在正确的游戏世界上下文中执行
  • 对应代码参数:

    cpp

    const UObject* WorldContextObject
    
AutoCreateRefTerm="IgnoreActors"
  • 作用:自动为引用参数创建可修改的输入项
  • 参数要求:
    • 针对类型为TArray<AActor*>&的引用参数
    • 允许在蓝图中动态修改传入的 Actor 数组
  • 蓝图表现:
    • 在蓝图节点中会显示为可编辑的数组输入框

函数在蓝图中的使用示例

当这个 C++ 函数被正确暴露后,在蓝图中可以这样使用:

  1. 在蓝图图表中添加 "调用函数" 节点
  2. 在 "Game|Damage" 类别下找到此函数
  3. 连接各输入参数:
    • WorldContextObject:通常连接 "Self" 引用
    • BaseDamage/MinimumDamage:设置数值
    • Origin:连接位置向量(如技能释放点)
    • IgnoreActors:添加需要忽略的 Actor 列表
  4. 处理返回值(是否成功应用伤害)

与网络同步相关的注意事项

由于标记了BlueprintAuthorityOnly,此函数的网络执行流程为:

  1. 客户端蓝图调用此函数
  2. 请求通过网络发送到服务器
  3. 服务器执行实际的伤害计算逻辑
  4. 服务器通过网络通知客户端伤害结果
  5. 客户端播放伤害反馈效果(如特效、音效)

这种设计确保了多人游戏中伤害计算的一致性和安全性。

源代码:  所有细节

关键参数说明

  • BaseDamage:中心点的最大伤害值。
  • MinimumDamage:范围外边界的最小伤害值。
  • Origin:伤害范围的球心位置。
  • DamageInnerRadius:伤害保持最大值的内半径。
  • DamageOuterRadius:伤害衰减的外半径。
  • DamageFalloff:伤害衰减曲线控制参数(指数衰减)。
  • IgnoreActors:忽略的伤害目标列表。

实现流程

  1. 碰撞检测初始化 使用 FCollisionQueryParams 配置碰撞检测参数,包括忽略特定 Actor
TArray<FOverlapResult> Overlaps;
World->OverlapMultiByObjectType(Overlaps, Origin, FQuat::Identity, FCollisionObjectQueryParams::InitType::AllDynamicObjects, FCollisionShape::MakeSphere(DamageOuterRadius), SphereParams);

      2.球形范围检测 通过 OverlapMultiByObjectType 检测范围内所有动态对象:

TArray<FOverlapResult> Overlaps;
World->OverlapMultiByObjectType(Overlaps, Origin, FQuat::Identity, FCollisionObjectQueryParams::InitType::AllDynamicObjects, FCollisionShape::MakeSphere(DamageOuterRadius), SphereParams);

      3. 筛选可伤害目标 遍历检测结果,过滤不可伤害或需忽略的 Actor:

if (OverlapActor && OverlapActor->CanBeDamaged() && OverlapActor != DamageCauser && Overlap.Component.IsValid())

 

       4. 伤害事件构造 创建 FRadialDamageEvent 并配置伤害参数(包括衰减参数):

FRadialDamageEvent DmgEvent;
DmgEvent.Params = FRadialDamageParams(BaseDamage, MinimumDamage, DamageInnerRadius, DamageOuterRadius, DamageFalloff);

 

        5.应用伤害 对每个有效目标调用 TakeDamage 方法:

TakeDamage 需要我们重载自定义的重新实现一下。因为这里重新实现了,伤害的计算方式。

Victim->TakeDamage(BaseDamage, DmgEvent, InstigatedByController, DamageCauser);

所以,一个完整的,带有衰减,距离检测,持续时间,爆炸范围的函数应该怎么用呢? 如下,

拿过来,只需要我们调用ApplyRadialDamageWithFalloff 此函数,并填好对应的参数就可以了

TArray<AActor*> IgnoredActors;
UGameplayStatics::ApplyRadialDamageWithFalloff(GetWorld(), 50.0f,  // BaseDamage10.0f,  // MinimumDamageExplosionLocation, 300.0f, // InnerRadius600.0f, // OuterRadius2.0f,   // FalloffUDamageType::StaticClass(), IgnoredActors,this,   // DamageCausernullptr // InstigatedByController
);
 

http://www.dtcms.com/wzjs/838655.html

相关文章:

  • 网站框架类型哈尔滨口碑好的网站建设
  • 国外优秀app设计网站有哪些个人网站怎么做支付宝接口
  • 腾讯云建网站湖南人文科技学院在哪
  • 全网有哪些网站可以做淘客道路建设网站专题
  • 黄岛网站制作建设农家书屋官方网站
  • python+网站开发+prf电子书新手学做网站
  • 个人如何建立免费手机网站建设网站的技术风险
  • 做海报创意网站常州低价网站建设公司
  • 公司百度网站建设哈尔滨排名seo公司
  • 南京住房和城乡建设部网站新企业如何在国税网站上做套餐
  • wordpress整站导入手机app界面设计分析
  • 网站开发者 敬请期待中国网络科技公司排名
  • 80端口被封怎么做网站sem运营
  • 网页ui设计网站装饰工程施工方案
  • 关于做网站常见的问题wordpress创始人赚钱吗
  • 网站开发用px还是rem网站建设费用 多少钱
  • 做问卷调查有哪些网站表白网页生成器软件
  • 做网站 语言仕德伟做的网站图片怎么修
  • 做外贸的网站怎么建立北京建设工程联合验收网站
  • 国内十大网站制作公司wordpress图片集插件
  • 站长之家最新域名查询代理网络手游
  • ui设计要学几个软件无锡网站优化工作室
  • 公司网站的宣传栏怎么做建c2c网站
  • 网站整体建设方案设计电子商务网站建设精品课程
  • 做美术鉴赏网站的心得深圳住 建设局网站
  • 网站建设后台系统有哪些购物中心招商信息发布平台
  • 山东中迅网站建设net网站是国际域名吗
  • 济南网站建设山东聚搜网力推wordpress 站点转移
  • 中国建设银行人事网站百度站长平台网站收录
  • 做网站工资怎么样网络推广服务商排名