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

94 lines
3.3 KiB
Markdown
Raw Normal View History

2025-01-26 13:44:50 +08:00
# 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
2025-01-28 23:35:13 +08:00
1. InitializeEditor**根据FrameSlider的Location来设置HitBoxFrame**该逻辑会在ConstructScript中被调用每移动一次就会被调用一次。
2025-01-26 13:44:50 +08:00
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**。
2025-01-27 21:18:10 +08:00
## 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置空。
2025-01-26 13:44:50 +08:00
## HitBoxFrame
2025-01-27 21:18:10 +08:00
HitBoxFrame => SceneComponent
CustomEvent
2025-01-27 21:56:04 +08:00
- InitializeFrame取得所有ChildrenComponent(HitBox)并且加入BodyList中。并且对每个HitBox调用InitializeHitBox()
- UpdateFrame判断FrameId销毁旧OldFrame创建新的。
2025-01-28 23:35:13 +08:00
- 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。