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

3.3 KiB
Raw Blame History

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。