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๋ ํ์ ๊ตฌ์ฑ ์์์ด๋ค.