Anim Graph ์‹œ์ž‘์ 


๐Ÿ“˜ FAnimNode_Root โ€” Cheat Sheet


๐ŸŸฆ 1. ํ—ค๋” ํŒŒ์ผ ์˜์‚ฌ ์ฝ”๋“œ (ํ•ต์‹ฌ ๋ฉค๋ฒ„ + ์ฃผ์š” ๋ฉ”์„œ๋“œ๋งŒ ์ •์ œ)

// ============================================================================
// FAnimNode_Root (์˜์‚ฌ ์ฝ”๋“œ)
// AnimGraph์˜ "๋ฃจํŠธ ๋…ธ๋“œ" ์—ญํ• .
// AnimInstance โ†’ AnimGraph Evaluate ๊ฒฝ๋กœ์˜ ์‹œ์ž‘์ ์ด๋ฉฐ,
// ๋‚ด๋ถ€์— ๋ณด์œ ํ•œ ํ•˜๋‚˜์˜ Child ๋…ธ๋“œ์˜ Pose๋ฅผ ์ตœ์ข… ํฌ์ฆˆ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
// ============================================================================
 
struct FAnimNode_Root : public FAnimNode_Base
{
public:
 
    // ------------------------------------------------------------------------
    // 1. Initialize
    // void Initialize(const FAnimationInitializeContext& Context)
    // โ†’ Child ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•ด ์ „์ฒด ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”
    // ------------------------------------------------------------------------
    virtual void Initialize(const FAnimationInitializeContext& Context) override;
 
    // ------------------------------------------------------------------------
    // 2. CacheBones
    // void CacheBones(const FAnimationCacheBonesContext& Context)
    // โ†’ Child์˜ BoneIndex ์บ์‹œ ์ฒ˜๋ฆฌ
    // ------------------------------------------------------------------------
    virtual void CacheBones(const FAnimationCacheBonesContext& Context) override;
 
    // ------------------------------------------------------------------------
    // 3. Update
    // void Update(const FAnimationUpdateContext& Context)
    // โ†’ Child Update ํ˜ธ์ถœ (๋ฃจํŠธ ์ž์ฒด๋Š” ๋ณ„๋„ ์ƒํƒœ ์—†์Œ)
    // ------------------------------------------------------------------------
    virtual void Update(const FAnimationUpdateContext& Context) override;
 
    // ------------------------------------------------------------------------
    // 4. Evaluate
    // void Evaluate(FPoseContext& Output)
    // โ†’ Root = Child Pose
    //   Child Evaluate ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ Output์— ๋„˜๊ธด๋‹ค.
    // ------------------------------------------------------------------------
    virtual void Evaluate(FPoseContext& Output) override;
 
    // ------------------------------------------------------------------------
    // 5. GatherDebugData
    // void GatherDebugData(FNodeDebugData& DebugData)
    // โ†’ ๋””๋ฒ„๊ทธ ํŠธ๋ฆฌ์— Child์˜ ๋””๋ฒ„๊ทธ ์ •๋ณด ์ถ”๊ฐ€
    // ------------------------------------------------------------------------
    virtual void GatherDebugData(FNodeDebugData& DebugData) override;
 
public:
 
    // Child ๋…ธ๋“œ โ€“ AnimGraph ์ „์ฒด์˜ ์ถœ๋ ฅ ๋…ธ๋“œ (๋ณดํ†ต StateMachine ๋˜๋Š” Blend)
    FPoseLink Result;
};

๐ŸŸฆ 2. ํ•ต์‹ฌ ์—ญํ•  ์š”์•ฝ

์—ญํ• ์„ค๋ช…
AnimGraph์˜ Entry Point ๋…ธ๋“œAnimInstance๋Š” Evaluate ์‹œ Root ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์ ์œผ๋กœ ์‚ผ๋Š”๋‹ค
Child ๋…ธ๋“œ์˜ Pose๋ฅผ ์ตœ์ข… ๊ฒฐ๊ณผ๋กœ ๋ฐ˜ํ™˜StateMachine/Blend/SequencePlayer ๋“ฑ ์ตœ์ข… Pose๊ฐ€ ์—ฌ๊ธฐ๋กœ ํ˜๋Ÿฌ๋“ค์–ด์˜ด
์ „์ฒด AnimGraph ํŠธ๋ฆฌ๋ฅผ ํ•˜ํ–ฅ์‹์œผ๋กœ ์‹คํ–‰Root โ†’ Child โ†’ Grandchild ์ˆœ์œผ๋กœ Evaluate ํ˜ธ์ถœ
Update, CacheBones ํ˜ธ์ถœ ์ฒด์ธ ์‹œ์ž‘์ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํŒŒ์ดํ”„๋ผ์ธ ์ „์ฒด ์‹คํ–‰์„ ๋‹ด๋‹น
AnimBlueprint์˜ ์ตœ์ข… ์ถœ๋ ฅ๊ณผ ๋™์ผAnimGraph(AnimBP)์˜ Output Pose ๋…ธ๋“œ์™€ 1:1 ๋Œ€์‘

๐ŸŸฆ 3. ๊ธฐ๋Šฅ๋ณ„ ์ƒ์„ธ ์„ค๋ช… (๋ฉ”์„œ๋“œ + ๋ฐ˜ํ™˜ํ˜• + ์—ญํ• )


๐Ÿ”ท A. Initialize

โœ” virtual void Initialize(const FAnimationInitializeContext& Context)

๋ฐ˜ํ™˜ํ˜•: void
์—ญํ• :

  • Root ์ž์ฒด๋Š” ์ƒํƒœ ์—†์Œ

  • ์ฃผ์š” ๋™์ž‘ = Result.Initialize(Context)

  • ์ฆ‰, AnimGraph ํŠธ๋ฆฌ ์ „์ฒด์˜ Initialize๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์ฒซ ๋‹จ๊ณ„


๐Ÿ”ท B. CacheBones

โœ” virtual void CacheBones(const FAnimationCacheBonesContext& Context)

๋ฐ˜ํ™˜ํ˜•: void
์—ญํ• :

  • Child ๋…ธ๋“œ์˜ ๋ณธ ์บ์‹ฑ ์‹คํ–‰

  • Root ์ž์ฒด๋Š” ๋ณธ ๊ตฌ์กฐ๊ฐ€ ์—†์Œ

  • ๋‹จ์ˆœํžˆ Child์—๊ฒŒ CacheBones ์œ„์ž„


๐Ÿ”ท C. Update

โœ” virtual void Update(const FAnimationUpdateContext& Context)

๋ฐ˜ํ™˜ํ˜•: void
์—ญํ• :

  • Child Update ํ˜ธ์ถœ

  • BlendWeight ๊ณ„์‚ฐ (AnimGraph ์ „์ฒด Weight = 1.0f)

  • StateMachine์˜ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋„ ์—ฌ๊ธฐ์„œ ์‹œ์ž‘๋จ


๐Ÿ”ท D. Evaluate

โœ” virtual void Evaluate(FPoseContext& Output)

๋ฐ˜ํ™˜ํ˜•: void
์—ญํ• :

  • Root์˜ ์กด์žฌ ์ด์œ 

  • Child ๋…ธ๋“œ์˜ Evaluate ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ Output์— ๋ณต์‚ฌ

  • ์ด Output์ด SkeletalMeshComponent๋กœ ์ „๋‹ฌ๋จ

์ฆ‰:

ChildPose = Result.Evaluate()
Output = ChildPose

๐Ÿ”ท E. GatherDebugData

โœ” virtual void GatherDebugData(FNodeDebugData& DebugData)

๋ฐ˜ํ™˜ํ˜•: void
์—ญํ• :

  • ๋””๋ฒ„๊ทธ ๋ Œ๋”๋ง ์‹œ โ€œRootโ€ ๋…ธ๋“œ ํ‘œ์‹œ

  • Child ๋…ธ๋“œ์˜ ๋””๋ฒ„๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ์— ์ถ”๊ฐ€


๐ŸŸฆ 4. AnimGraph ์‹คํ–‰ ํ๋ฆ„์—์„œ์˜ ์œ„์น˜

UAnimInstance
   โ†“
Root (FAnimNode_Root)
   โ†“
StateMachine / Blend / SequencePlayer
   โ†“
UAnimSequence

Root๋Š” ๋‹จ ํ•˜๋‚˜ ์กด์žฌํ•˜๋Š” โ€œ์• ๋‹ˆ๋ฉ”์ด์…˜ ํŠธ๋ฆฌ์˜ Entry Pointโ€์ด๋‹ค.


๐ŸŸฆ 5. ๋‹ค๋ฅธ ๋…ธ๋“œ์™€์˜ ๊ด€๊ณ„

  • FAnimNode_Base์˜ ์ง์ ‘ ํŒŒ์ƒ ํด๋ž˜์Šค

  • FAnimNode_StateMachine, FAnimNode_BlendList, FAnimNode_SequencePlayer ๋“ฑ
    ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ Root๋กœ๋ถ€ํ„ฐ Evaluate ํ˜ธ์ถœ์„ ์‹œ์ž‘

  • AnimGraph ์ „์ฒด์˜ ์ตœ์ข… Pose๋Š” ๋ฐ˜๋“œ์‹œ Root๋กœ ๊ท€๊ฒฐ๋œ๋‹ค.


๐ŸŸฆ 6. ์—”์ง„ ๊ตฌํ˜„ ์‹œ ์™œ ํ•„์š”ํ•œ๊ฐ€?

StateMachine์„ ๊ตฌํ˜„ํ•˜๋”๋ผ๋„
Root๊ฐ€ ์—†์œผ๋ฉด Evaluate๋ฅผ ์‹œ์ž‘ํ•  ์ง€์ ์„ ์—”์ง„์ด ์•Œ ์ˆ˜ ์—†๋‹ค.

๊ทธ๋ž˜์„œ ์ตœ์†Œ AnimGraph ๊ตฌ์„ฑ์€ ๋‹ค์Œ์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค:

FAnimNode_Root
    โ””โ”€ FAnimNode_StateMachine
           โ””โ”€ Active State Node
                 โ””โ”€ SequencePlayer
                       โ””โ”€ UAnimSequence

Root ์—†์œผ๋ฉด ์—”์ง„์€ StateMachine์„ ์žฌ์ƒํ•  ์ˆ˜ ์—†์Œ.


๐ŸŸฆ 7. 5์ค„ ์š”์•ฝ

  • FAnimNode_Root๋Š” AnimGraph์˜ ์‹œ์ž‘์ ์ด๋‹ค.

  • Update/Evaluate ํ˜ธ์ถœ ์ฒด์ธ์˜ ์ตœ์ดˆ ๋…ธ๋“œ์ด๋‹ค.

  • ๋‚ด๋ถ€ Child(Result)์˜ Evaluate ๊ฒฐ๊ณผ๋ฅผ ์ตœ์ข… Pose๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • AnimInstance๋Š” ํ•ญ์ƒ Root Evaluate๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

  • AnimGraph๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด Root๋Š” ํ•„์ˆ˜ ๊ตฌ์„ฑ ์š”์†Œ์ด๋‹ค.