ํด๋ž˜์Šค๊ฐ„ ํ†ต์‹ ์€ ์•ž์œผ๋กœ ์ˆ˜์—†์ด ๋งŽ์ด ์‚ฌ์šฉ๋ ๊ฑฐ๋ผ ์ด๋ฒˆ๊ธฐํšŒ์— ๊ธฐ์ดˆ๋ฅผย ๋ฐฐ์›Œ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค



https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ActorCommunication/


๋‹ค์ด๋ ‰ํŠธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์€ ๋ ˆ๋ฒจ์ƒ์— ์กด์žฌํ•˜๋Š” ๋ฒ„ํŠผ์ด๋ผ๋˜์ง€ ํด๋ž˜์Šค ๋””ํดํŠธ์—์„œ ํ•˜๋“œ๋ ˆํผ๋Ÿฐ์Šค๋กœ ์„ค์ •๋œ๊ฒƒ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ

๋™์  ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์บ์ŠคํŒ…๋ถ€ํ„ฐ ๋ณด๋ฉด ๋ ๊ฑฐ๊ฐ™๋‹ค


1. ์บ์ŠคํŒ…




๋ผ์ธํŠธ๋ ˆ์ด์Šค๋Š” ์‚ฌ์šฉ๋ฅ ์ด ๋†’์„๊ฑฐ๊ฐ™์•„์„œ C++๊ณต๋ถ€ํ• ๊ฒธ ๋งŒ๋“ค์–ด๋ณด์•˜๋”ฐ




์ฝ”๋“œ๋ชฝํ‚ค์‹์œผ๋กœ ๋”ฐ๋ผํ•œ๊ฑฐ์ง€๋งŒ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๋‹ค๋‹ˆ ๊ฐ๊ฐœ๋ฌด๋Ÿ‰ํ•˜๋‹ค

C#์— ์žˆ๋Š” OUT ํŒŒ๋ผ๋ฉ”ํ„ฐ ์—†์ด ๋ฆฌํ„ด๋…ธ๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฝ‘๋‚˜ ํ–ˆ๋”๋‹ˆ ์–ธ๋ฆฌ์–ผ์—์„œ๋Š” ํŒŒ๋ผ๋ฉ”ํ„ฐ๊ฐ€ ๋ ˆํผ๋Ÿฐ์Šค์ผ๊ฒฝ์šฐ ์•„์›ƒํ’‹์œผ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ์‹์œผ๋กœ ํ•˜๋”๋ผ

Input ๋…ธ๋“œ๋Š” ๊ธฐ๋ณธ์‹(float foo, int bar.....) ํ˜•์‹์œผ๋กœ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ ˆํผ๋Ÿฐ์Šค์˜ ๊ฒฝ์šฐ์—” UPARAM(ref) ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค


์ด์ œ ์ด๋…€์„์„ ๊ฐ€์ง€๊ณ  ๋ง˜๊ป ์š”๋ฆฌ๋ฅผ ํ•ด๋ณด์ž




๋ผ์ธํŠธ๋ ˆ์ด์Šค ํžˆํŠธ์‹œ ์•กํ„ฐ ๋ฐ˜ํ™˜ -> ์บ์ŠคํŒ… -> ํ•จ์ˆ˜์‹คํ–‰



์ž˜ ๋€๋‹น







๋ธ”ํ”„ ๋กœ์ง๊ณผ ์ •ํ™•ํžˆ ๊ฐ™์€ C++ ๋ฒ„์ „ DoSomething.



์ž˜ ๋€๋‹ค


ํ€˜์ŠคํŠธ1 ํด๋ฆฌ์–ด




2. ์ธํ„ฐํŽ˜์ด์Šค




์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ณ„๋„์˜ ๊ฐ์ฒด๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜๋‹ค




ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ํœ‘ํ•˜๋‹ˆ ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค. ๋ฆฌํ„ด๋…ธ๋“œ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  ์ด๋ฆ„ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š”๊ฒŒ ์ „๋ถ€.




์บ์ŠคํŒ…๊ณผ ๋‹ค๋ฅธ์ ์€ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ์š”๊ตฌํ•˜์ง€๋งŒ ํƒ€์ž…์— ๋ฌด๊ด€ํ•˜๊ฒŒ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค




๋Œ€์‹  ๋ฆฌ์‹œ๋ฒ„์ธก์—์„œ ์•„๊นŒ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ . ๊ตฌํ˜„์„ ํ•ด์ค˜์•ผํ•œ๋‹ค

์ข‹์€์ ์ด๋ผ๋ฉด ํ˜ธ์ถœ๋งŒ ํ• ๋ฟ์ด๊ณ  ๋ฐ›์€์ชฝ์—์„œ ๊ตฌํ˜„์€ ์ œ๊ฐ๊ฐ์ด๋ฏ€๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ–‰๋™์„ ๋งŒ๋“ค์ˆ˜์žˆ๋‹ค



์„ฑ๊ณต.




์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ์‹œ ๋ฆฌํ„ด๋…ธ๋“œ๊ฐ€ ์—†๋Š”์ƒํƒœ๋ฉด ์ด๋ฒคํŠธ๋กœ ์ทจ๊ธ‰๋˜์–ด. ๊ธฐ๋ณธ ์ด๋ฒคํŠธ๊ทธ๋ž˜ํ”„์—์„œ ๊ตฌํ˜„ํ• ์ˆ˜์žˆ๋‹ค (๋ฆฌํ„ด๋…ธ๋“œ๋Š” ํ•จ์ˆ˜์ทจ๊ธ‰)


https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayArchitecture/Interfaces/

C++ ์ธํ„ฐํŽ˜์ด์Šค


ํ—ค๋”๋Š” ์–ธ๋ฆฌ์–ผ์—์„œ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค




Iinteractable.h ์„ ์–ธ๋ถ€

C++๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์—์„œ ์ž„ํ”Œ๋ ˆ๋ฉ˜ํŠธ ํ• ์ˆ˜๋„ ์žˆ๋‹ค



๋ฆฌ์‹œ๋ฒ„์ธ MyActor.h ํ—ค๋”์—์„œ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†ํ›„ ํ•จ์ˆ˜์„ ์–ธ



MyActor.Cpp ๊ตฌํ˜„๋ถ€. ๋‚ด์šฉ์€ ๋˜‘๊ฐ™๋‹ค ์ฝ˜์†”๋ฉ”์„ธ์ง€ ํ•œ์ค„ ์ถœ๋ ฅ



ํ€˜์ŠคํŠธ2 ํด๋ฆฌ์–ด!



3. ์ด๋ฒคํŠธ ๋””์ŠคํŒจ์ณ


https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ActorCommunication/EventDispatcherQuickStart/




์œ„์˜ ๋‘๊ฒฝ์šฐ์—๋น„ํ•ด ์†ก์‹ ์ž๊ฐ€ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ตฌํ• ํ•„์š”๊ฐ€ ์—†๋‹ค ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฝœ ์ด๋ฒคํŠธ ์ƒ์„ฑํ•ด์ฃผ๊ณ  ํ˜ธ์ถœํ•˜๋ฉด ๋




๋Œ€์‹  ์ˆ˜์‹ ์ž๋Š” ํ• ์ผ์ด ์ข€ ์žˆ๋‹ค

์†ก์‹ ์ž ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ตฌํ•ด๋†“๊ณ  ์ปค์Šคํ…€ ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“ ํ›„. ๋ฐ”์ธ๋“œ๋ฅผ ํ•˜๋ฉด ํ˜ธ์ถœ์‹œ๋งˆ๋‹ค ์‹คํ–‰๋œ๋‹ค



์„ฑ๊ณต




C++๋ฒ„์ „ (๋ธ๋ฆฌ๊ฒŒ์ดํŠธ)

์†ก์‹ ์ž ํ—ค๋”์—์„œ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์„ ์–ธ์„ ํ•œ๋‹ค




๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์™€ ๊ทธ๊ฒƒ์„ ํ˜ธ์ถœํ•  ํ•ธ๋“ค๋Ÿฌ




์†ก์‹ ์ž .Cpp


๊ฐ„๋‹จํžˆ Eํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•˜๋„๋ก ์„ค์ • ์ด๊ฒƒ์œผ๋กœ ์บ๋ฆญํ„ฐ ํŒŒํŠธ๋Š” ์™„๋ฃŒ




ํ”Œ๋ ˆ์ด์–ด ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธํ•ด์ฃผ๊ณ 

๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฒŒ UPROPERTY ๋ถ™์—ฌ์ค€๋‹ค

์‹ค์ œ ์‹คํ–‰ํ•˜๊ณ ์‹ถ์€ ํ•จ์ˆ˜ ์ถ”๊ฐ€




ํ”Œ๋ ˆ์ด์–ด ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋‹น์—ฐํžˆ ์›”๋“œ๊ฐ€ ์žˆ์–ด์•ผ ๊ตฌํ•ด์ง€๋ฏ€๋กœ ๋น„๊ธดํ”Œ๋ ˆ์ด์—์„œ ์–ป๋Š”๋‹ค

์†ก์‹ ์ž(ํ”Œ๋ ˆ์ด์–ด)์—์„œ ์„ ์–ธํ•œ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์— ์ถœ๋ ฅํ•จ์ˆ˜๋ฅผ ๋ฐ”์ธ๋”ฉ. ์‹คํ–‰์€ ํ”Œ๋ ˆ์ด์–ด์ชฝ์—์„œ Eํ‚ค๋ฅผ ๋ˆ„๋ฅผ๋•Œ๋งˆ๋‹ค ๋ฐœ๋™




ํ€˜์ŠคํŠธ3 ํด๋ฆฌ์–ด!



์ธํ„ฐํŽ˜์ด์Šค๋Š” C++์ชฝ์ด ์ข€๋” ๊ฐ„๊ฒฐํ•œ๊ฑฐ๊ฐ™๋‹ค ์ž์ฃผ ์• ์šฉํ•˜๊ฒŒ ๋ ๊ฑฐ๊ฐ™๋„ค

๊ธ€๋กœ๋ฒŒ ํ˜ธ์ถœ์˜๊ฒฝ์šฐ ๋””์ŠคํŒจ์ณ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ ๊ฑฐ๊ฐ™๋‹ค

๊ฑธ์Œ๋งˆ ๋‹จ๊ณ„์ง€๋งŒ ์˜ˆ์Šต์€ ํ•ด๋’€์œผ๋‹ˆ ๋‚ด์ผ์€ ์ด๊ฒƒ๋“ค์„ ๊ฐ€์ง€๊ณ  ๋ณธ๊ฒฉ์ ์œผ๋กœ ์กฐ์ ธ๋ด์•ผ๊ฒ ๋‹ค