diff --git a/03-UnrealEngine/Gameplay/GAS/GAS Ability输入绑定.md b/03-UnrealEngine/Gameplay/GAS/GAS Ability输入绑定.md index 21ec974..aed5afb 100644 --- a/03-UnrealEngine/Gameplay/GAS/GAS Ability输入绑定.md +++ b/03-UnrealEngine/Gameplay/GAS/GAS Ability输入绑定.md @@ -129,7 +129,57 @@ uint8 InputPressed:1; - UAbilityTask_WaitInputPress - UAbilityTask_WaitInputRelease -理论上是可以将其修改成增强输入的版本,只需要将枚举循环改成InputActionContext循环即可。 +理论上是可以将其修改成增强输入的版本,只需要将枚举循环改成InputActionContext循环即可,具体逻辑在角色类中 +```c++ +void AGSHeroCharacter::BindASCInput() +{ + if (!bASCInputBound && IsValid(AbilitySystemComponent) && IsValid(InputComponent)) + { + AbilitySystemComponent->BindAbilityActivationToInputComponent(InputComponent, FGameplayAbilityInputBinds(FString("ConfirmTarget"), + FString("CancelTarget"), FString("EGSAbilityInputID"), static_cast(EGSAbilityInputID::Confirm), static_cast(EGSAbilityInputID::Cancel))); + + bASCInputBound = true; + } +} + +FGameplayAbilityInputBinds(FString InConfirmTargetCommand, FString InCancelTargetCommand, FTopLevelAssetPath InEnumPathName, int32 InConfirmTargetInputID = INDEX_NONE, int32 InCancelTargetInputID = INDEX_NONE) + : ConfirmTargetCommand(InConfirmTargetCommand) + , CancelTargetCommand(InCancelTargetCommand) + , EnumPathName(InEnumPathName) + , ConfirmTargetInputID(InConfirmTargetInputID) + , CancelTargetInputID(InCancelTargetInputID) +{ +} +``` + +**ConfirmTarget**、**CancelTarget**需要在DefaultInput.ini中添加对应的配置(名字需要对应)。 +**EGSAbilityInputID**为枚举类名称,**EGSAbilityInputID::Confirm**与**EGSAbilityInputID::Cancel**为枚举的index需要与GameplayAbilitySpec中的AbilityInputID对应。具体是在GiveAbility中进行,参考[[#GASShooter中给Ability注册按键ID]]。 + +之后还需要在URPGGameplayAbility中将枚举**ERPGAbilityInputID**修改成 +```c++ +UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "RPGGameplayAbility|Input") +ERPGAbilityInputID AbilityInputID = ERPGAbilityInputID::None; +``` + +## GASShooter中给Ability注册按键ID +```c++ +void AGSCharacterBase::AddCharacterAbilities() +{ + // Grant abilities, but only on the server + if (GetLocalRole() != ROLE_Authority || !IsValid(AbilitySystemComponent) || AbilitySystemComponent->bCharacterAbilitiesGiven) + { + return; + } + + for (TSubclassOf& StartupAbility : CharacterAbilities) + { + AbilitySystemComponent->GiveAbility( + FGameplayAbilitySpec(StartupAbility, GetAbilityLevel(StartupAbility.GetDefaultObject()->AbilityID), static_cast(StartupAbility.GetDefaultObject()->AbilityInputID), this)); + } + + AbilitySystemComponent->bCharacterAbilitiesGiven = true; +} +``` # SDHGame 李兄是在状态机每个节点的StateBegin()中调用CreateDynamicSkillInputActionMappingContext()进行动态绑定的。FSDHSkillInputActionBinding里包含FEnhancedActionKeyMapping相关数据。 diff --git a/03-UnrealEngine/卡通渲染相关资料/卡通渲染开发总览.md b/03-UnrealEngine/卡通渲染相关资料/卡通渲染开发总览.md index 168b533..162353c 100644 --- a/03-UnrealEngine/卡通渲染相关资料/卡通渲染开发总览.md +++ b/03-UnrealEngine/卡通渲染相关资料/卡通渲染开发总览.md @@ -12,9 +12,10 @@ rating: ⭐ - 参考对象分析 - 星穹铁道 - 破晓传说 - - 蓝色协议3. + - 蓝色协议3 - 非人学园2 - 少女前线2 追放 + - https://www.bilibili.com/video/BV1pt421H7EH/?buvid=38ddfe416af6e23f1aada0674f307e3e&from_spmid=tm.recommend.0.0&is_story_h5=false&mid=a0AUwJxrG%2FcYg0AorRjOGA%3D%3D&p=1&plat_id=116&share_from=ugc&share_medium=iphone&share_plat=ios&share_session_id=CD0CF499-8DF5-48F5-A03A-7A3AE61FFF3A&share_source=COPY&share_tag=s_i&spmid=united.player-video-detail.0.0×tamp=1706754945&unique_k=44q6hra&up_id=140517136&vd_source=d47c0bb42f9c72fd7d74562185cee290 - 明日方舟终末地 >PS. 先实现一波Cel,之后再实现Thickly - Coated。