UE5 C++教程 (二、在线子系统)

本文介绍了如何在Unreal Engine 5.0中配置OnlineSubsystem以接入多种在线服务,包括设置委托机制,以便处理异步通信并实现游戏的在线功能。通过实例演示了如何配置Steam、创建委托及使用委托进行网络操作,助力开发者轻松接入在线服务。

目录

        1.配置在线子系统(OnlineSubsystem)

        2.委托(Delegate)

        3.联机


The Online Subsystem and its interfaces provide a common way to access the functionality of online services such as Steam, Xbox Live, Facebook, and so on. 

在线子系统(OnlineSubsystem)及其接口提供了一种访问在线服务功能的通用方式,有了它,我们就可以访问诸如Steam、Xbox Live、Facebook 等的在线服务,开发人员只需对每个支持的服务进行配置调整即可开发在多个平台上发布,支持多个在线服务的游戏。 

在线子系统官方文档:Online Subsystem in Unreal Engine | Unreal Engine 5.0 Documentation

1.配置在线子系统(OnlineSubsystem)

OnlineSubsystem定义并注册特定服务的模块到引擎,定义在Engine.ini配置文件中,初始化时系统将尝试加载配置在其中的在线服务模块。

示例:配置steam的在线子系统

[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.S
### UE5 C++ 实现增强输入系统 在Unreal Engine 5中,通过C++实现增强输入系统(Enhanced Input System)可以让开发者更灵活地处理玩家的输入行为。增强输入系统提供了更为强大的功能来定义复杂的输入操作以及响应逻辑。 #### 设置项目依赖项 为了使用增强输入插件,在项目的构建文件`YourProjectName.Build.cs`里需要添加对`EnhancedInput`模块的支持: ```csharp PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput" }); ``` #### 定义输入动作资产 1. **创建输入动作** 在编辑器中前往内容浏览器并右键点击选择新建资源 -> 输入动作(Input Action Asset)。这会创建一个新的输入动作对象用于捕捉特定类型的输入事件,比如跳跃、移动等。 2. **配置触发条件** 对于每一个新建立的动作,可以通过属性面板设置其绑定的具体按键组合或触摸手势,并指定如何解释这些信号——例如作为瞬发按钮还是持续按压的状态。 3. **关联映射上下文** 接着要为角色或其他交互实体分配一组这样的动作集合称为映射上下文(Mapping Context),以便它们知道哪些控制指令应该生效。同样是在编辑器内部完成这项任务,只需简单拖拽相应的Context至目标Actor蓝图即可[^1]。 #### 编写代码集成增强输入 下面展示一段基本的角色类头文件声明部分,这里引入了必要的命名空间和成员变量用来支持后续的功能扩展: ```cpp // MyCharacter.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "MyCharacter.generated.h" class UEnhancedInputComponent; class UEnhancedInputLocalPlayerSubsystem; UCLASS() class MYPROJECT_API AMyCharacter : public ACharacter { GENERATED_BODY() protected: virtual void BeginPlay() override; private: /** Handles movement based on the value of a Vector Axis Value */ UFUNCTION() void Move(const FInputActionValue& Value); /** Handles looking up/down when an axis is pressed or released */ UFUNCTION() void LookUp(const FInputActionValue& Value); /** Pointer to Enhanced Input Component */ UPROPERTY() class UEnhancedInputComponent* PlayerEnhancedInputComponent; }; ``` 接着是对应的源文件实现细节,注意初始化阶段需确保正确设置了组件引用并且启用了所需的子系统服务: ```cpp // MyCharacter.cpp #include "MyCharacter.h" #include "EnhancedInputComponent.h" #include "EnhancedInputSubsystems.h" void AMyCharacter::BeginPlay() { Super::BeginPlay(); if (APlayerController* PlayerController = Cast<APlayerController>(GetController())) { if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer())) { // Add our mapping context so we can bind inputs from it. Subsystem->AddMappingContext(MyMappingContext, 0); } // Assign component reference after ensuring subsystem exists and mappings are added PlayerEnhancedInputComponent = Cast<UEnhancedInputComponent>(PlayerController->InputComponent); } } void AMyCharacter::Move(const FInputActionValue& Value) { FVector2D MovementVector = Value.Get<FVector2D>(); AddMovementInput(GetActorForwardVector(), MovementVector.Y); AddMovementInput(GetActorRightVector(), MovementVector.X); } void AMyCharacter::LookUp(const FInputActionValue& Value) { float Val = Value.Get<float>(); AddControllerPitchInput(Val); } ``` 上述代码片段展示了怎样利用增强输入框架简化传统方法下较为繁琐的手动解析键盘鼠标状态的过程,转而采用更高层次抽象的方式描述意图驱动的行为模式[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值