자료ꡬ쑰 κ·Έκ±° 걍 라이브러리 μ“°λ©΄ λ˜λŠ”κ±° μ•„λ‹ˆλƒ

Β -> λŒ€λΆ€λΆ„μ˜ κ²½μš°μ—λŠ” μ •λ‹΅μ΄μ§€λ§Œ, 슀슀둜 섀계할쀄 μ•Œμ•„μ•Ό λ°œμ „ν• μˆ˜ μžˆμŠ΅λ‹ˆλ‹€...

λͺ¨λ“  κ²½μš°μ— λŒ€ν•΄ μ™Έμ£Ό λ§‘κΈΈμˆ˜μžˆλŠ”κ²ƒλ„ μ•„λ‹ˆκ³ , 에셋 μŠ€ν† μ–΄μ— λ‚΄ λ§ˆμŒμ— λ“œλŠ” 에셋이 μ—†λ‹€λ©΄,Β 

직접 λ§Œλ“œλŠ” 수 밖에 μ—†κ² μ£ ?


본둠으둜 λ“€μ–΄κ°€μ„œ 벌써 λ˜₯κΈ€ μ‹œλ¦¬μ¦ˆλ„ 4νŽΈμ΄λ‚˜ λ˜μ—ˆλ‹€μ•Ό....

읽닀가 γ…ˆκ°™μœΌλ©΄ μƒμ½€ν•˜κ²Œ λ’€λ‘œκ°€κΈ° λˆŒλŸ¬μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.


자료ꡬ쑰 자료ꡬ쑰 말은 많이 λ“€μ–΄λ³΄λŠ”λ° 이게 λ­”μ§€ λͺ¨λ₯΄λŠ” μ‚¬λžŒλ“€λ„ μžˆμ„ κ±°μž„.Β 

μ˜μ–΄λ‘œλŠ” Data Structure 라고 함.


맨 μ²˜μŒμ— 코딩을 λ°°μšΈλ•Œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄ λ‘λŠ”λ°, μ–˜λ„€λ“€λ‘œ 코딩을 ν•˜λ €λ©΄ νž˜λ“€λ‹€λŠ”κ±Έ λŠλ‚„μˆ˜ 있음.

이게 막 μ„ μ–Έ 해두면 이름이 λ§žλŠ”κ±΄μ§€, νƒ€μž…μ΄ λ§žλŠ”κ±΄μ§€, μ œλŒ€λ‘œ μ΄ˆκΈ°ν™”λŠ” λœκ±΄μ§€, λ‹€λ₯Έ κ³³μ—μ„œ μ‚¬μš©μ€‘μΈκ±΄ μ•„λ‹Œμ§€...


κ·Έλ ‡κ²Œ λ‹€μŒ 단계가 되면 λ°°μš°λŠ”κ²Œ arrayμž„. λ°”λ‘œ μ „μ—λŠ” int 10개λ₯Ό μ„ μ–Έν•˜λ €λ©΄ int a1, a2, a3 ... a10; μ΄λ ‡κ²Œ μ„ μ–Έ ν–ˆλŠ”λ°

μ΄μ œλŠ” int a[10]; μ΄λ ‡κ²Œ ν•˜λ©΄ λ˜λ„€ ? κ°œκΏ€ ν•˜λŠ”κ²Œ 이거고, μ΄λ ‡κ²Œ 기본적인 자료ꡬ쑰λ₯Ό 배우기 μ‹œμž‘ ν•œκ±°μž„.

μ•„λ§ˆ 학ꡐ μ—μ„œ 배우면 별에 별 자료ꡬ쑰λ₯Ό λ°°μš°λŠ”λ°, λ‚΄κ°€ λ©μ²­ν•œκ±΄μ§€ 말만 λ“£κ³  κ΅¬ν˜„ν•˜λΌκ³  ν•˜λ©΄ λ‹€μ‹œλŠ” λͺ»ν• κ±° κ°™μŒ...

2-3-4 트리 λΌλ˜μ§€... 이진 트리 λ°°μ—΄μ΄λΌλ˜μ§€... 이런건 ν•™κ΅μ—μ„œ 배우던, μ±…μœΌλ‘œ 배우던 ν•œλ²ˆμ―€μ€ 보고 κ°€λŠ”κ²ƒλ„ 쒋은듯.

C++ μ—μ„œλŠ” STL μ΄λΌλŠ” κ°œμ©ŒλŠ” μžλ£Œκ΅¬μ‘°κ°€ 있기 λ•Œλ¬Έμ— λ§Žμ΄λ“€ μ“΄λ‹€κ³  ν•˜μ§€. (근데 μ˜μ™Έλ‘œ ν˜„μ—…μ—μ„  μ•ˆμ“΄λ‹€κ³  ν•˜λ”λΌ...)


그럼 본둠으둜 λ„˜μ–΄κ°€μ„œ μ•‘μ…˜ λ¦¬μŠ€νŠΈμ— λŒ€ν•΄ 이야기 ν•΄λ“œλ¦Ό.


μ €κ²Œ λ­ν•˜λŠ” λ¦¬μŠ€νŠΈλƒΒ ν•˜μ‹œλŠ” 뢄듀도 μžˆμ„ν…λ°, STL의 λ¦¬μŠ€νŠΈλ‚˜ 뭐 ν”νžˆλ“€ λ§ν•˜λŠ” linked listλŠ” μ•„λ‹˜.

이름은 μ•‘μ…˜λ¦¬μŠ€νŠΈμ§€λ§Œ κ΅¬ν˜„μ€ 큐에 가깝기 λ•Œλ¬Έ. 그럼 μ•‘μ…˜ 큐라고 ν•˜λ©΄ λ˜μ§€ μ•Šλƒ? 라고 ν• μˆ˜ μžˆμ§€λ§Œ


λ‹€λ“€ μ•‘μ…˜ 리슀트라 λΆ€λ₯΄λŠ”λ° μ–΄μ©”κ±°...


skip listλ‚˜ 뭐더라 hash table 처럼 κ΅¬ν˜„ν•˜λŠ” λ¦¬μŠ€νŠΈλ„ μžˆμ§€λ§Œ 그런 애듀은 μˆœμˆ˜ν•œ μžλ£Œκ΅¬μ‘°μ— 가깝닀면,

μ•‘μ…˜λ¦¬μŠ€νŠΈλŠ” AI κ΅¬ν˜„μ„ μœ„ν•œ κ°„λ‹¨ν•œ 자료 κ΅¬μ‘°μž„.


FSM의 λ°œμ „λœ λ²„μ ΌμœΌλ‘œ 볼수 μžˆλŠ”λ°, FSM으둜 κ΅¬ν˜„κ°€λŠ₯ν•˜λ©΄ Action Listλ‘œλ„ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€κ³  보면 됨.

λ¬Όλ‘  μ§œλŠ” 방식따라 λͺ»ν• μˆ˜λ„ μžˆμ§€λ§Œ μ•ˆλ˜λ©΄ λ˜κ²Œν•˜λŠ”κ²Œ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ 의무라 볼수 μžˆμœΌλ‹ˆ... (κ·Έλž˜λ„ μžλ°”λ‘œ C보닀 λΉ λ₯Έκ±° 짜기 이런건 μ•ˆλ¨;)


μ•‘μ…˜λ¦¬μŠ€νŠΈμ— μ•‘μ…˜μ΄λΌλŠ” 것듀을 λ„£μ–΄μ£Όκ³  λ‚˜μ„œ,

λ§€ κ²Œμž„ λ£¨ν”„λ§ˆλ‹€Β μˆœμ„œμ— 맞게 리슀트 μ•ˆμ— μžˆλŠ” μ•‘μ…˜μ„ μ—…λ°μ΄νŠΈν•΄ μ£ΌλŠ”κ²Œ μ•‘μ…˜λ¦¬μŠ€νŠΈλΌ 보면 됨.

λŒ€μΆ© μŒμ•… μ•±μ—μ„œ ν”Œλ ˆμ΄ 리슀트 κ°™μ€κ±°λ‘œ μ΄ν•΄ν•˜λ©΄ 될듯.


κ·Έλž˜μ„œ 주둜 μ“°λŠ” 곳은 UI, AI, Behavior, Animation, Audio 등등에 μ“Έμˆ˜ 있음.

쓰기에 λΆˆνŽΈν•œκ±΄ 계산이 많이 ν•„μš”ν•œ νŒ¨μŠ€νŒŒμΈλ”©κ°™μ€ μ•Œκ³ λ¦¬μ¦˜λ“€μ΄ 있음.


μ•‘μ…˜ 리슀트 μΈν„°νŽ˜μ΄μŠ€

void Update(float dt); // Β κ²Œμž„ λ£¨ν”„μ—μ„œ λΆ€λ₯΄λŠ” ν•¨μˆ˜.


void PushBack(Action* action);

void PushFront(Action* action)Β 

void Insert(Action* action);

void Remove(Action* action);


Action* Begin();

Action* End();


bool Size() const;

float TimeLeft() const;


데이터

float duration;

float time;

Action** actions. //벑터, 리슀트 λ“±λ“± μ“°κ³  싢은 자료ꡬ쑰둜 바꿔도 됨. μ•„λ‹ˆλ©΄ 걍 μ΄λ ‡κ²Œ 동적 할당해도 되고.


μ•‘μ…˜ μΈν„°νŽ˜μ΄μŠ€

Update(float dt); //μ•‘μ…˜λ¦¬μŠ€νŠΈ μ—…λ°μ΄νŠΈμ—μ„œ 콜 ν•˜λŠ” ν•¨μˆ˜

OnStart(); //μ‹œμž‘ν• λ•Œ ν•œλ²ˆ λΆ€λ₯΄λŠ” ν•¨μˆ˜

OnEnd(); //λλ‚ λ•Œ ν•œλ²ˆ 뢀름.


bool IsFin(); //λλ‚œμ§€ 체크

float Elapsed(); //κ²½κ³Ό μ‹œκ°„

float Duration();//μ•‘μ…˜ μ‹œκ°„


ActionList* Owner; //리슀트



λŒ€μΆ© 이런 ꡬ쑰λ₯Ό ν•˜κ³  μžˆλŠ” μžλ£Œκ΅¬μ‘°μž„. μ•‘μ…˜μ„ μƒμ†λ°›λŠ” μ»€μŠ€ν…€ μ•‘μ…˜λ“€μ„ λ§Œλ“€μ–΄λ‘κ³ ,

걔넀듀을 μ•‘μ…˜λ¦¬μŠ€νŠΈμ— λ„£μœΌλ©΄ λ©λ‹ˆλ‹€.

μ„ΈλΆ€ κ΅¬ν˜„μ€ κ°„λ‹¨ν•œ μžλ£Œκ΅¬μ‘°λ‹ˆ μ•Œμ•„μ„œ ν•˜μ‹€μˆ˜ μžˆμ„λ“― μ‹œν¬μš”...


여기에 laneμ΄λ‚˜ blocking, loopΒ λ“±λ“±μ˜ 좔가적인 λ©”μ†Œλ“œλ₯Ό λ„£μ–΄μ„œ 더 λ‹€μ–‘ν•˜κ²Œ μ‚¬μš©ν• μˆ˜ 있음.

μΆ”κ°€μ μœΌλ‘œ 엔진에 μžˆλŠ” λ©”μ„Έμ§€ μ‹œμŠ€ν…œμ΄λž‘ μ—°λ™μ‹œν‚€λ©΄ λŒ€λ‹¨νžˆ 효율적으둜 μ‚¬μš©ν• μˆ˜ 있음.



Q. μ™œ ν¬μΈν„°μ“°λŠ” 거지같은 μ–Έμ–΄ μ“°μ£ ?

A. γ…ˆγ……ν•©λ‹ˆλ‹€. 배움이 μ§§μ•„μ„œ C/C++ 문법 쑰금 밖에 λͺ°λΌμš”...


Q. μ™œ 슀마트 포인터 μ•ˆμ“°μ£ ?

A. γ…ˆγ……ν•©λ‹ˆλ‹€ 22. 걍 λŒ€μΆ© μΈν„°νŽ˜μ΄μŠ€λ§Œ μ“°κ³  μ‹Άμ–΄μ„œ κ·Έλž¬μλ‹ˆλ‹€...