This commit is contained in:
2025-08-02 12:09:34 +08:00
commit e70b01cdca
2785 changed files with 575579 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
# 摄像机控制逻辑
调用逻辑位于`BP_Sub_Controller`中的若干接口:
- Event
- Init_Camera
- BPI OFF SP Camera
- BPI SP Camera ON
- BPI USM Camera ON
- BPI Initi SP&USM Camera
-
- Interface
...
具体实现逻辑位于Character中。

View File

@@ -0,0 +1,94 @@
# Class
## FightGameAction
FightGameAction => GameAction => HitBoxAction => Actor
CustomEvent
- 继承事件:
- ActionStart取得当前Pawn并且赋予FgPawn变量以及当前AnimInstance赋予PawnAnim。
- SpecialEvent调用IsParry()来判断是否是格挡事件如果是就调用Parry事件。
- StrikeEvent
1. StrikeFeedback触发对应的反馈效果。包括粒子、声音、力、镜头摇晃。
2. ApplyHitDamage应用伤害。
- OtherEvent其他Hit逻辑。
- 新事件:
- Parry格挡事件。
- Freeze硬直效果。
- ResetFreeze重置硬直效果。
### HitBoxAction
Component
- HitBoxEditor编辑用组件用于编辑每帧Action时切换指定Index的帧。***ComponentTag"hb.Editor"***
- FrameSlider
- FrameIdTx
- AnimSlider
Method
- Initialize()
1. SetOwner()
2. SetFrameList()遍历所有HitBoxFrameComponent并且根据**组件名称**取得FrameID
3. ActionStart()调用ActionStart()事件。
CustomEvent
1. ActionStart
2. HitBox
3. OtherHits
Editor相关
CustomEvent
1. InitializeEditor**根据FrameSlider的Location来设置HitBoxFrame**该逻辑会在ConstructScript中被调用每移动一次就会被调用一次。
2. EditorSliders根据FrameSlider、AnimSlider的当前帧数根据相对Location来记录FrameId来设置显示文字。
3. DestroyEditor
### GameAction
主要实现了HitBox事件。判断是否是StrikeEvent与SpcialEvent后调用StrikeEvent()与SpcialEvent()。
CustomEvent
1. StrikeEvent
2. SpcialEvent
Editor相关
CustomEvent
1. InitializeEditor在父类事件的基础上用相对位移来存储开始播放Montage的初始位置设置到**SkeleMesh->AnimationData->InitialPosition**。
## ActionComponent
>主要使用这个组件来管理当前Action设置HitBoxAction类给ChildActor并且调用HitBoxAction的Initialize并且绑定ActionEvent。
Event
- BeginPlay设置ChildActorComponent到ChildActor变量上。可根据Tag来选择ChildActorComponent。
- EndPlay触发DestoryAction事件。
CustomEvent
- ***SetAction***设置新的HitBoxAction类以及Frame Id。
- SetActionClass()其中SetActionClass的逻辑会调用HitBoxAction的Initialize并且绑定ActionEvent。
- 调用Action类的SetActiveFrame()。
- NewAction依次调用DestoryAction、SetAction事件。
- DestoryAction将ChildActor置空。
## HitBoxFrame
HitBoxFrame => SceneComponent
CustomEvent
- InitializeFrame取得所有ChildrenComponent(HitBox)并且加入BodyList中。并且对每个HitBox调用InitializeHitBox()
- UpdateFrame判断FrameId销毁旧OldFrame创建新的。
- DestroyFrame
# AnimNotify
## FrameNotify
- RecivedNotify调用SetNewAction()
1. 通过SkeletalMeshComponent取得OwnerActor
2. 取得ActionComponent
3. 根据StartAction执行对应的逻辑
1. trueActionComponent->NewAction()
2. false, 判断ActionComponent中的Action类是否与AnimNotify的Action类相同如相同执行ActionComponent->SetAction()
## FrameState
- Recived_NotifyBegin逻辑与FrameNotify的逻辑相同。
- Recived_NotifyTick每帧判断ActionComponent的FrameId与Class是否与FrameState是否相同如果不相同就调用ActionComponent->SetNewAction()
## MovementModeState
用于设置角色的MovementMode
## RunMontageSection
用于让Montage跳转Section。

View File

@@ -0,0 +1,103 @@
# 阶段计划
1. [ ] 使用FightingGameTemplateProject的场景、动作资产、构建固定相机单角色进行各种Combo的Demo。
2. [ ] 细化各种攻击判断逻辑、细化GAS逻辑以及DataTable填表逻辑。
# 开发计划
1. 改进HitBoxBlueprint项目
1. 解决编辑器Actor中帧数与动画帧数不同步的问题
2.
2. Perforce & CI/CD 搭建
3. 使用FightingGameTemplateProject的场景、动作资产、构建固定相机单角色进行各种Combo。
4. 使用LogicDriver、GAS使用GASDocument构建基础逻辑。
1. 使用LogicDriver构建出招以及各种动作状态机。
2. 使用GAS构建技能与Buffer功能。
3. 使用增强输入定制出招表。
5. 将HitBoxBlueprint生成的HitBox数据改成DataAsset样式
6. 实现InputBuffer 输入缓存系统。可以参考商城的 Ninja Input插件
7.
# GAShooter移植计划
## c++
- [x] GSEngineSubsystem.h
- [x] GSBlueprintFunctionLibrary.h
- [x] ~~AI~~
- [ ] Characters
- [ ] Abilities
- [ ] AbilityTasks
- [x] GSAT_MoveSceneCompRelLocation.h
- [x] GSAT_PlayMontageAndWaitForEvent.h
- [x] GSAT_PlayMontageForMeshAndWaitForEvent.h
- [x] GSAT_ServerWaitForClientTargetData.h
- [ ] ~~GSAT_WaitChangeFOV.h~~
- [x] GSAT_WaitDelayOneFrame.h
- [x] GSAT_WaitInputPressWithTags.h
- [x] GSAT_WaitInteractableTarget.h
- [x] GSAT_WaitTargetDataUsingActor.h
- [x] AttributeSets
- [ ] ~~GSAmmoAttributeSet.h~~
- [x] **GSAttributeSetBase.h**
- [x] AsyncTaskAttributeChanged.h
- [x] AsyncTaskGameplayTagAddedRemoved.h
- [x] GSAbilitySystemComponent.h
- [x] GSAbilitySystemGlobals.h
- [x] GSAbilityTypes.h
- [x] GSDamageExecutionCalc.h
- [x] GSGA_CharacterJump.h
- [x] GSGameplayAbility.h
- [x] GSGameplayCueManager.h
- [x] GSGameplayEffectTypes.h
- [x] GSGATA_LineTrace.h
- [x] GSGATA_SphereTrace.h
- [x] GSGATA_Trace.h
- [x] GSInteractable.h
- [x] GSTargetType.h
- [x] ~~Animation~~
- [ ] Heroes
- [ ] ~~GSHeroCharacter.h~~
- [x] GSASCActorBase.h
- [ ] GSCharacterBase.h
- [ ] ~~GSCharacterMovementComponent.h~~
- [x] Items
- [x] GSPickup.h
- [ ] Player
- [x] GSPlayerState.h
- [x] GSPlayerController.h
- [ ] UI
- [ ] Weapons
- [x] GSProjectile.h
- [ ] ~~GSWeapon.h~~
## Content
- [ ] ~~FPWeapon~~
- [ ] GASShooter
- [ ] Blueprints
- [x] AnimNotifes
- [ ] BP_Chest
- [x] BP_DamageVolume
- [ ] ~~BP_GameMode~~
- [x] BP_HealthManaStaminaShieldRegenVolume
- [x] BP_HealthManaStaminaShieldVolume
- [ ] ~~BP_PlayerController~~
- [ ] ~~BP_SpectatorPawn~~
- [x] GE_ChestOpen
- [x] GE_DamageVolume
- [x] GE_DoorOpen
- [x] GE_HealthManaStaminaShieldRegenVolume
- [x] GE_HealthManaStaminaShieldVolume
- [ ] Characters
- [ ] Hero
- [ ] Abilities
- [x] GA_InteractActive
- [x] GA_InteractPassive
- [x] GE_BleedingOut
- [x] GE_Dead
- [x] GE_Interacting
- [x] GE_InteractingRemoval
- [x] GE_KnockedDown
- [x] Shared
- [ ] ~~Items~~
- [ ] ~~Maps~~
- [ ] ~~UI~~
- [ ] ~~Weapons~~
- [x] InfinityBladeFireLands
- [ ] ~~ShooterGame~~
## GameplayTags