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

ASC学习笔记0006:游戏效果将如何复制到客户端

中文注释:UrealEngine-5.2.1源码-AbilitySystemComponent.h

学习内容:

/** 游戏效果将如何复制到客户端 */
UENUM()
enum class EGameplayEffectReplicationMode : uint8
{/** 仅复制最少的游戏效果信息。注意:这不适用于拥有的AbilitySystemComponents(请改用Mixed)。 */Minimal,/** 仅向模拟代理复制最少的游戏效果信息,但向所有者和自主代理复制完整信息 */Mixed,/** 向所有客户端复制完整的游戏效果信息 */Full,
};

一、这是一个来自虚幻引擎Gameplay Ability System (GAS) 中的枚举,用于定义游戏效果(Gameplay Effects)在网络复制时的策略。让我详细解释每个模式:

枚举说明

Minimal (最小复制)

  • 描述: 只复制最基础的游戏效果信息

  • 限制: 不适用于拥有的 AbilitySystemComponents(建议使用 Mixed 模式)

  • 适用场景:

    • 非玩家控制的AI角色

    • 不需要客户端知道详细效果信息的对象

    • 网络带宽敏感的场景

Mixed (混合复制)

  • 描述:

    • 对模拟代理(Simulated Proxies):复制最小信息

    • 对所有者(Owner)和自主代理(Autonomous Proxies):复制完整信息

  • 优势: 在节省带宽和提供完整信息之间取得平衡

  • 典型应用: 玩家角色拥有的AbilitySystemComponents

Full (完整复制)

  • 描述: 向所有客户端复制完整的游戏效果信息

  • 优势: 所有客户端都有完整的效果数据

  • 代价: 网络带宽消耗最大

  • 适用场景:

    • 需要所有客户端都知道详细效果信息的场景

    • 小规模游戏或局域网游戏

使用建议

// 在GameplayEffect类中设置复制模式
UGameplayEffect::ReplicationMode = EGameplayEffectReplicationMode::Mixed;// 或者在AbilitySystemComponent中配置
AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);
 

选择指南

  • 玩家角色: 推荐使用 Mixed

  • 重要NPC/Boss: 考虑使用 Full 或 Mixed

  • 小怪/环境效果: 使用 Minimal

  • 网络优化优先: 倾向于 Minimal 或 Mixed

  • 功能完整性优先: 选择 Full

这个系统允许开发者根据游戏需求平衡网络带宽和功能完整性。

二、我们来深入探讨这个枚举在实际项目中的应用。这个设置通常在 Gameplay Ability System (GAS) 插件中配置,是项目网络架构的重要基础。

1. 核心设置位置

这个枚举最主要的应用位置是在 Ability System Component (ASC) 上。

A. 在 C++ 类构造函数中设置:

// 在你的角色基类或玩家状态类的构造函数中
AYourCharacter::AYourCharacter()
{// 创建 ASCAbilitySystemComponent = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("AbilitySystemComponent"));// 设置复制模式AbilitySystemComponent->ReplicationMode = EGameplayEffectReplicationMode::Mixed;// ... 其他初始化
}

B. 在蓝图类中设置:
如果你使用蓝图,可以在角色的 Class Defaults 中找到 AbilitySystemComponent,展开后设置 Replication Mode 属性。


2. 三种模式的实际应用场景

A. Minimal (最小复制)

适用对象: AI控制的NPC、小兵、环境物体

行为举例:

  • 一个野怪对玩家施加了“中毒”效果

  • 模拟代理(其他玩家) 只能看到:

    • 玩家头顶出现了中毒图标

    • 玩家周期性地播放受伤动画

    • 但看不到具体的伤害数值、剩余时间等详细信息

代码影响:

// 在客户端,对于Minimal模式下的效果,你无法获取完整数据
if (EffectSpec.GetModifierMagnitude(0).GetMagnitudeValue() == 0.0f) 
{// 这可能返回0,因为具体的数值没有被复制
}
B. Mixed (混合复制) - ★ 最常用 ★

适用对象: 玩家控制的角色

行为举例:

  • 玩家对自己使用了“治疗术”

  • 对自己(Owner):能看到完整的治疗效果 +50HP,剩余冷却时间30秒,详细的buff描述

  • 对其他玩家(Simulated Proxy):只能看到你身上有绿色治疗粒子效果,看不到具体数值和冷却时间

实际优势:

  • 节省带宽:不对所有客户端复制详细数据

  • 反作弊:其他客户端不知道你技能的具体数值,难以开发外挂

  • 体验完整:本地玩家获得完整的功能体验

C. Full (完全复制)

适用对象: 重要的团队效果、观战者、需要精确同步的场景

行为举例:

  • 团队旗帜提供的“攻击力加成”

  • 所有客户端:都能看到完全一致的加成数值、剩余时间、效果来源

  • 观战模式需要显示所有玩家的完整状态信息


3. 实际开发中的考虑因素

性能考量:

// 根据角色类型动态设置(可选)
void AYourGameCharacter::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);if (AbilitySystemComponent){if (Cast<APlayerController>(NewController)){// 玩家控制:使用MixedAbilitySystemComponent->ReplicationMode = EGameplayEffectReplicationMode::Mixed;}else{// AI控制:使用Minimal节省带宽AbilitySystemComponent->ReplicationMode = EGameplayEffectReplicationMode::Minimal;}}
}
UI 显示的逻辑差异:

// 在UI组件中需要处理不同的复制模式
void UPlayerStatusWidget::UpdateEffectDisplay(FGameplayTag EffectTag)
{if (AbilitySystemComponent->ReplicationMode == EGameplayEffectReplicationMode::Minimal) {// Minimal模式:显示通用图标,不显示具体数值ShowGenericEffectIcon(EffectTag);}else {// Mixed/Full模式:可以显示详细数值ShowDetailedEffectInfo(EffectTag);}
}
网络同步的数据量对比:
模式复制的数据带宽消耗功能完整性
Minimal效果标签、开始/结束时间有限
MixedOwner: 完整数据
Others: 最小数据
Owner完整
Full所有数据给所有人全部完整

4. 推荐的最佳实践

  1. 玩家角色:默认使用 Mixed

  2. AI敌人:使用 Minimal

  3. 重要环境物体:使用 Full(如副本BOSS的团队光环)

  4. 观战系统:观战者使用 Full 模式来获取所有数据

项目设置示例:

// 玩家角色
APlayerCharacter::APlayerCharacter() 
{AbilitySystemComponent->ReplicationMode = EGameplayEffectReplicationMode::Mixed;
}// AI角色
AAIEnemy::AAIEnemy()
{AbilitySystemComponent->ReplicationMode = EGameplayEffectReplicationMode::Minimal;
}// 团队旗帜/重要物体
ATeamBuffFlag::ATeamBuffFlag()
{AbilitySystemComponent->ReplicationMode = EGameplayEffectReplicationMode::Full;
}

这种设置能在保证核心功能的同时,最大程度优化网络性能。

http://www.dtcms.com/a/610290.html

相关文章:

  • 延安市住建建设网站无锡网站营销推广
  • 我想做网站服务器选用什么电子商务网站建设总结与体会
  • Oracle分页sql
  • Airsim仿真、无人机、无人车、Lidar、深度强化学习
  • Airsim仿真、无人机、Lidar深度相机、DDPG深度强化学习
  • 做做网站下载2023常熟网站网站建设
  • app推广策略WordPress优化百度广告
  • pinctrl子系统介绍
  • python-MCPServer拉取和使用部署
  • 17.TCP编程(二)和序列化
  • x^3 - 3x + 1 = 0
  • Nacos 9848启动端口占用 Failed to bind to address 0.0.0.0/0.0.0.0:9848
  • 前端react 开发 图书列表分页
  • 做vip视频网站赚钱吗最近一周新闻大事件
  • 大数据安全技术实验:Hadoop环境部署
  • 【07】特征匹配算法:ORB算法深度解析与实现
  • vite7更新了哪些内容
  • Aemulo2.0门禁卡复制卡片后修改设置卡片备注名称
  • IP应用场景全图谱:你的IP属于哪一类?
  • 微网站开发 在线商城一键部署wordpress
  • Rust实战:使用Clap和Tokio构建现代CLI应用
  • 中移建设有限公司网站猎头可以做单的网站
  • PostIn V1.3.4版本发布,新增性能测试执行明细,ldap/企业微信/钉钉登录调整为社区版本功能
  • MySQL——表的约束
  • springboot对接xxl-job
  • 企业百度网站建设网络策划是做什么的
  • 网站项目开发流程有哪七步网站素材 按钮
  • Spring Boot 全局异常处理 + 参数校验进阶:让接口告别 “500 报错” 和 “脏数据”
  • Frame structure and physical resources(帧结构与物理资源)
  • 进程状态