์›๋ž˜ 2๋กœ ํ•ต์‹ฌ ํƒ€์›Œ ๊ธฐ๋ฌผ๋“ค ์„ค๋ช… ๊ฒธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ณด์—ฌ์ค„๋ผํ–ˆ๋Š”๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ชจ๋“ˆ ๋งŒ๋“ ๊ฑฐ๋ถ€ํ„ฐ ์จ๋ณด๋ คํ•จ

์• ๋‹ˆ๋ฉ”์ดํ„ฐ ์•ˆ์“ฐ๊ณ  ์Šคํฌ๋ฆฝํŠธ๋กœ ๊ตฌํ˜„ํ•˜์‹œ๋Š” ๋Šฅ๋ ฅ์ž๋ถ„๋“ค์€ ์ด๋ฏธ ๋งŽ๊ฒ ์ง€๋งŒ, ๋‚˜๋ฅผ ๋น„๋กฏํ•œ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด๋Ÿฐ๊ฑธ ์ž˜ ๋ชจ๋ฅผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€์‹ ๊ณต์œ  ๊ฒธ ์จ๋ด…๋‹ˆ๋‹ค.

์ €๋„ ์–ด๋””์„œ ๋ฐฐ์šด๊ฑฐ์ž„ ใ…‡ใ…‡


๊ฐœ๋ฐœ์–ธ์–ด: C#

๊ฐœ๋ฐœํˆด: Unity 2021 LTS

์ด๊ฑด ๋ฐฉ๊ธˆ ์˜ฌ๋ฆฐ ๊ฐœ๋ฐœ์ผ์ง€ 1

https://gall.dcinside.com/m/game_dev/116598

[์— ์—์Šค๊ฒŒ์ž„์ฆˆ] ํ”ฝ์…€ ํฌ์ปค ๋””ํŽœ์Šค ๊ฐœ๋ฐœ์ผ์ง€ #1 - ๊ฒŒ์ž„ ๊ฐœ์š”2022๋…„ 7์›”๋ถ€ํ„ฐ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•œ ๋ชจ๋ฐ”์ผ ๊ฒŒ์ž„์ธ๋ฐ ์จ์•ผ์ง€ ์จ์•ผ์ง€ ํ•˜๋‹ค๊ฐ€ ๊ณ„์† ๋ฏธ๋ฃจ๊ณ  ์˜ฌํ•ด ์”๋‹ˆ๋‹ค์‹ค์ œ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•œ๊ฑด 9์›”๋ถ€ํ„ฐ๋ผ ์ฒ˜์Œ ์˜ฌ๋ฆฌ๋Š”๊ฑฐ์น˜๊ณ  ์–‘์ด ๋งŽ์œผ๋‹ˆ ์ดํ•ดํ•ด์ฃผ์‹ญ์‡ผ์šฐ์„  ํ”ฝํฌ๋””๋Š” ์Šคํƒ€ ์œ ์ฆˆ๋งต "ํ—ฌ ํฌ์ปค ๋””ํŽœ์Šคgall.dcinside.com





1. ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ชจ๋“ˆ์ด ๋ญ์ž„?

์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ชจ๋“ˆ์€ ์œ ๋‹ˆํ‹ฐ์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ดํ„ฐ๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ์Šคํฌ๋ฆฝํŠธ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“ˆ์ž„

์šฐ๋ฆฌ ๊ฒŒ์ž„์€ ์ผ๋‹จ ํƒ€์›Œ์—๋Š” ์• ๋‹ˆ๋ฉ”์ดํ„ฐ๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ๋ชจ๋“ˆ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Œ.

Enemy๋Š” ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋กœ ์ผ๋‹จ ๋ณด๋ฅ˜ํ•˜๊ณ  ์• ๋‹ˆ๋ฉ”์ดํ„ฐ ์‚ฌ์šฉ์ค‘



2. ๊ทธ๋ž˜์„œ ์• ๋‹ˆ๋ฉ”์ดํ„ฐ๋Š” ์™œ ์•ˆ์”€?



์• ๋‹ˆ๋ฉ”์ดํ„ฐ์˜ ์žฅ๋‹จ์ ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด


์žฅ์ ์œผ๋กœ๋Š”

๋งŒ๋“ค๊ธฐ ์‰ฝ๋‹ค.

์†๋„ ์กฐ์ ˆ

ํŠธ๋ฆฌ๊ฑฐ๋‚˜ ๋ถˆ๋ฆฌ์–ธ์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋™์ž‘ ์ปจํŠธ๋กค

ํ”Œ๋ ˆ์ด ํ•˜๋ฉด์„œ ์• ๋‹ˆ๋ฉ”์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋ฉด ์–ด๋–ค๊ฒŒ ์žฌ์ƒ๋˜๊ณ  ์žˆ๋Š”์ง€ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ

๋“ฑ์ด ์žˆ๊ณ 


๋‹จ์ ์œผ๋กœ๋Š”

๋งŒ๋“ค๊ธฐ ๊ท€์ฐฎ๋‹ค(์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉํ•˜๋Š” ๊ธฐ๋ฌผ๋งˆ๋‹ค ๋งŒ๋“ค์–ด์ค˜์•ผ๋จ)

๋‚ด ์ž…๋ง›๋Œ€๋กœ ์ปจํŠธ๋กคํ•˜๊ธฐ ํž˜๋“ค๋‹ค -> ์˜ˆ๋ฅผ๋“ค๋ฉด ์„ธ๋ฐ€ํ•œ ์†๋„ ์กฐ์ ˆ


๋“ฑ์ด ์žˆ๋Š”๋ฐ ๋งŒ๋“ค๊ธฐ ๊ท€์ฐฎ๋‹ค๋Š”๊ฒŒ ์ œ์ผ ํฐ ๋ฌธ์ œ์ž„

์ผ๋‹จ ์• ๋‹ˆ๋ฉ”์ดํ„ฐ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋‚˜๋Š” ๋‹ค์Œ ๊ณผ์ •์„ ๊ฑฐ์นจ


1. ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ์ด๋ฏธ์ง€๋“ค์„ ๋™์ž‘๋ณ„๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ™” ํ•œ๋‹ค

2. ๋นˆ ์• ๋‹ˆ๋ฉ”์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด์„œ State๋ฅผ ๋งŒ๋“ ๋‹ค

3. Trigger๋‚˜ Boolean์„ ์ด์šฉํ•ด ์ปจํŠธ๋กคํ•˜๋Š” ๊ฒฝ์šฐ Parameter๋ฅผ ์ง€์ •ํ•ด์ค€๋‹ค

4. State์— 1์—์„œ ๋งŒ๋“  ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„ฃ๋Š”๋‹ค

5. ์ฝ”๋“œ์— ์ ์šฉํ•œ๋‹ค


์ •๋„์ธ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜๋ฉด 1, 2, 3, 4 ๊ณผ์ •์ด ์‚ฌ๋ผ์ง€๊ณ  ์ฝ”๋“œ์— ์ ์šฉ๋งŒ ํ•˜๋ฉด ๋จ


3. ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋ƒ

์ผ๋‹จ Resources ๋ผ๋Š” ํด๋”๋ฅผ Assets ํด๋”์— ๋งŒ๋“ค๊ณ  ์›ํ•˜๋Š” ๊ฒฝ๋กœ์— ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ชจ๋‘ ๋„ฃ์–ด์คŒ

์ผ๋‹จ ์˜ค๋Š˜ ์„ค๋ช…์„ ์œ„ํ•œ ๊ธฐ๋ฌผ๋กœ


์–˜๊ฐ€ ๊ณ ์ƒํ•ด์ค„๊ฑฐ์ž„


Archer๋ผ๋Š” ๊ธฐ๋ฌผ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•„์ณ ์ด๋ฏธ์ง€๋ฅผ Resources/unit/Tower/Archer ํด๋”์— ๋„ฃ์–ด์ฃผ๊ฒ ์Œ


์ด๋ ‡๊ฒŒ ๋„ฃ์–ด๋งŒ ์ฃผ๊ณ  ์ฝ”๋“œ ์ ์šฉํ•˜๋ฉด ์‚ฌ์‹ค ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ์€ ๋์ž„

๊ทผ๋ฐ ์šฐ๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ๊ฑด ์ฝ”๋“œ ๋™์ž‘ ๊ณผ์ •์ด์ž–์•„? ์–ด๋–ป๊ฒŒ path๋งŒ ์ง€์ •ํ•ด์คฌ๋Š”๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ์ด ๋๋‚œ๊ฑด์ง€ ์•Œ์•„๋ณด์ž


๋จผ์ € ์šฐ๋ฆฌ tower prefab์—๋Š”


์ด๋Ÿฐ ์š”์†Œ๋“ค์ด ์žˆ์Œ

์ด ์ค‘์— Atk Projectile์ด๋ผ ์ ์ธ ๊ณณ์ด ํƒ€์›Œ์˜ ๊ณต๊ฒฉ๋งˆ๋‹ค ์žˆ๋Š” ๊ณ ์œ  Projectile์ž„ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ํˆฌ์‚ฌ์ฒด ์˜ค๋ธŒ์ ํŠธ๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋จ

ํˆฌ์‚ฌ์ฒด ์˜ค๋ธŒ์ ํŠธ Enum์œผ๋กœ ์ด๋ฆ„์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๊ทธ๊ฑธ ์ด์šฉํ•ด์„œ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„๊ฐ€๋Š”๊ฑฐ์ž„



๋ชจ๋“ˆ์˜ Setupํ•จ์ˆ˜

ํƒ€์›Œ ์ƒ์„ฑ์‹œ component์— ์žˆ๋Š” animation module ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฝœํ•˜๋Š” ํ•จ์ˆ˜์ž„

์œ„์— ๊ณ ์œ  ํˆฌ์‚ฌ์ฒด ์ด๋ฆ„์ด ๋ณดํ†ต ํƒ€์›Œ์˜ ์ด๋ฆ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ idle, attack, skill๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์„ธ๊ฐ€์ง€ ๊ธฐ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜ path๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ 

sub attack์ด๋‚˜ ์Šคํ‚ฌ ์‚ฌ์šฉ ํ›„ ๋ชจ์…˜ ๋“ฑ ์ถ”๊ฐ€์ ์ธ ๋ชจ์…˜์€ ๊ทธ๋•Œ๊ทธ๋•Œ ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ๋งŒ๋“ค์–ด์„œ ์ ์šฉํ•˜๋Š” ์ค‘์ž„

๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ setup๋งŒ ํ•˜๋ฉด ์ด๋ฏธ์ง€๋“ค์ด ์˜ค๋ธŒ์ ํŠธ์— ์ €์žฅ๋ผ์„œ ๋”ฐ๋กœ ๋ญ ํ•  ํ•„์š” ์—†์ด prefab๋งŒ ๋งŒ๋“ค๋ฉด ๊ธฐ๋ณธ์ ์ธ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ๋‹ค ์ง€์›๋œ๋‹ค๋Š” ํŠน์žฅ์ ์ด ์žˆ๋‹ค



๋จผ์ € ์• ๋‹ˆ๋ฉ”์ด์…˜ playํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค„๊ฑด๋ฐ string์„ ๋ฐ›์•„์„œ ํผ ์ฒด์ธ์ง€๋ฅผ ํ•ด์ค„๊ฑฐ๊ณ , delayํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์ฝ”๋ฃจํ‹ดํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•ด์คŒ

์•„๊นŒ ์ €์žฅํ•ด๋†“์€ ์ด๋ฏธ์ง€ array์—์„œ ์ˆœ์„œ๋Œ€๋กœ renderer์— ๋„ฃ์–ด์ฃผ๋ฉด์„œ ์‚ฌ์ด์‚ฌ์ด ์ง€์—ฐ์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์žฌ์ƒ๋˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํƒ„์ƒํ•˜๋Š”๊ฑฐ์ž„

๊ทผ๋ฐ ๋ณดํ†ต ๊ฒŒ์ž„์ด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ•œ๋ฒˆ์”ฉ๋งŒ ์žฌ์ƒํ•˜๋Š”๊ฑด ์•„๋‹ˆ์ž–์•„? ๊ฐ€๋งŒ์žˆ์œผ๋ฉด ๋“ค์ฉ๋“ค์ฉํ•˜๋‹ค๊ฐ€ ๊ณต๊ฒฉํ• ๋•Œ๋งŒ ๊ณต๊ฒฉ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถœ๋ ฅํ•ด์•ผ๋œ๋‹ค.

๊ทธ๋ž˜์„œ Updateํ•จ์ˆ˜๋กœ ๊ณ„์†ํ•ด์„œ ์ฝ”๋ฃจํ‹ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์ค„๊ฑฐ์ž„

๊ทผ๋ฐ ์šฐ๋ฆฌ ์œ ๋‹ˆํ‹ฐ C#์€ ๋”ฐ๋กœ ๋‚ด๊ฐ€ ์›ํ•˜์ง€ ์•Š์•„๋„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„๋จ

์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๊ฐ€ C์—์„œ๋Š” while๋ฌธ์„ ๋Œ๋ฉด์„œ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต์‹คํ–‰์‹œํ‚ค๋ฉด ํ•จ์ˆ˜๊ฐ€ ์™„์ „ํžˆ ๋๋‚˜๊ณ  ๋‹ค์‹œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค

while(1){

printnum(num);

num++;

}

์ด๋ผ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๊ณ  printnum ์•ˆ์— 1์ดˆ๋งˆ๋‹ค ์ง€์—ฐ์ด ์žˆ๋‹ค ์น˜๋ฉด C์—์„œ๋Š” 1 2 3 4 5 ... ์ด๋Ÿฐ์‹์œผ๋กœ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋ฉฐ ์ถœ๋ ฅ๋˜์ง€๋งŒ

๋น„๋™๊ธฐ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” C# ์œ ๋‹ˆํ‹ฐ์—์„œ๋Š” 1 1 1 1 1 1 1 1 1 .... (1์ดˆ๋’ค) 112412 112412 112412 112412 112412 ... ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐœ ์–ด์ง€๋Ÿฝ๊ฒŒ ๋Œ์•„๊ฐ

๊ทธ๋ž˜์„œ ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ check๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ง€๊ธˆ ๋‚ด ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€๋ฅผ ํŒ๋ณ„ํ•ด์ค˜์•ผ๋จ

idle์ด ์ด๋ฏธ ์žฌ์ƒ๋˜๊ณ  ์žˆ์œผ๋ฉด idle์„ ์žฌ์ƒํ•˜๋Š” ์ฝ”๋ฃจํ‹ดํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•œ ๋‹ค๋ฅธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ฒŒ ใ…‡ใ…‡

๊ทผ๋ฐ ์•„์˜ˆ ์ค‘๊ฐ„์— ์•ˆ๋ฉˆ์ถ”๋ฉด idle ์ƒํƒœ์—์„œ ๊ณต๊ฒฉ์œผ๋กœ ์ „ํ™˜๋  ๋•Œ ๋“ค์ฉ์„ ๋‹ค ํ•˜๊ณ  ๊ณต๊ฒฉ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ถœ๋ ฅ๋˜๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•จ

๊ทธ๋ž˜์„œ if (!state.Equals("PlayIdle")) break; ๋ถ€๋ถ„์„ ์ถ”๊ฐ€ํ•ด์„œ change animation์ด ํ˜ธ์ถœ๋˜์–ด ๋ชจ์…˜์ด ๋ฐ”๋€Œ์–ด์•ผ ๋˜๋ฉด ์ค‘๊ฐ„์— ๋ฉˆ์ถ”๋Š” ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด๋†“์Œ


์ด์ œ ํƒ€์›Œ์— ์ ์šฉํ•ด๋ณด์ž



์ด๊ฑด TowerWeapon ์Šคํฌ๋ฆฝํŠธ ์ผ๋ถ€๋ถ„์ธ๋ฐ ์•„์ณ ๊ณต๊ฒฉ ๊ณผ์ •์ž„

animator.SetTrigger("Attack") ๋ถ€๋ถ„์ด gameObject.GetComponent<AnimatorModule>().ChangeAnimation("PlayAttack"); ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค

๋‚˜๋Š” ์• ๋‹ˆ๋ฉ”์ดํ„ฐ ์“ธ ๋•Œ๋Š” 4ํ”„๋ ˆ์ž„์งธ์— ๊ณต๊ฒฉ์ด ๋‚˜๊ฐ€์•ผ๋˜๋ฉด ์ง€์—ฐ์„ ์–ผ๋งˆ์ค˜์•ผ๋˜๋Š”์ง€ ๋Œ€์ถฉ ๊ฐ์œผ๋กœ ๋•Œ๋ ค๋ฐ•์•˜๋Š”๋ฐ

์ด์ œ 4ํ”„๋ ˆ์ž„์งธ ๊ณต๊ฒฉ์ด ๋‚˜๊ฐ€๋Š”๊ฑธ ์•Œ๋ฉด 0.3์ดˆ ์ง€์—ฐ ํ›„ ํˆฌ์‚ฌ์ฒด ์ƒ์„ฑ ๋ฐ ๋ฐœ์‚ฌ๋ฅผ ํ•˜๋ฉด ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์Šคํ”ผ๋“œ๋ฅผ ์กฐ์ ˆํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์ฐจ์›์—์„œ ํ•œ ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๊ธฐ๋„ ์šฉ์ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€ ๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ๋„ ํŠน์žฅ์ ์ด ์žˆ๋‹ค ์ƒ๊ฐํ•จ


๋งˆ์ง€๋ง‰์œผ๋กœ ์•„์ณ ํ”Œ๋ ˆ์ด ์˜์ƒ ๋ณด๊ณ  ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒ ์Œ