BlueRoseNote/02-Note/DAWA/2025.1.26格斗游戏笔记.md

94 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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。