๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ „์ฒด ๊ธ€ (1024)

KoreanFoodie's Study

์–ธ๋ฆฌ์–ผ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ(Unreal Smart Pointer) ์ •๋ฆฌ 2 : ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ๊ณผ ํŒ

์–ธ๋ฆฌ์–ผ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ๊ณผ ํŒ ํ•ต์‹ฌ : 1. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ คํ•  ๋•Œ๋Š” ํ•ญ์ƒ ํผํฌ๋จผ์Šค์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” ์ž์› ๊ด€๋ฆฌ์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ ์ผ๋ถ€ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ํƒ€์ž…์€ C++ ๊ธฐ๋ณธ ํฌ์ธํ„ฐ๋ณด๋‹ค ๋” ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 2. TSharedPtr ๋Š” ๋น„์นจ๋ฒ”ํ˜•(non-intrusive) ๋กœ, ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์˜ ์†Œ์œ  ํ•˜์— ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ์˜ค๋ธŒ์ ํŠธ๋ฅผ TSharedRef ๋˜๋Š” TSharedPtr ๋กœ ์ ‘๊ทผํ•˜๋ฉด, ์˜ค๋ธŒ์ ํŠธ ํด๋ž˜์Šค๋ฅผ TSharedFromThis ์—์„œ ํŒŒ์ƒ์‹œ์ผœ์•ผ ํ•œ๋‹ค. 3. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์Šค๋ ˆ๋“œ ์„ธ์ดํ”„ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์ž. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ ์–ธ๋ฆฌ์–ผ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ..

Game Dev/Unreal C++ : Study 2023. 3. 22. 11:44
[์–ธ๋ฆฌ์–ผ] TOptional ์‚ฌ์šฉํ•˜๊ธฐ + ์˜ˆ์ œ

TOptional ํ•ต์‹ฌ : 1. TOptional ์€ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ ๋…€์„์ด ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ์•„๋‹Œ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” Wrapper ํด๋ž˜์Šค์ด๋‹ค. 2. Optional.h ์— ๋ณด๋ฉด Value ์™€ bIsSet ์ด ์žˆ๋Š”๋ฐ, Value ๊ฐ€ ์‹ค์ œ ๋„˜๊ธฐ๋Š” ๋ฐ์ดํ„ฐ์ด๊ณ , bIsSet ์ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋…€์„์ด๋‹ค. IsSet, Emplace, GetValue ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 3. TOptional ์„ ์‚ฌ์šฉํ•˜๋Š” ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š”, ํŠน์ • ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์—ˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด 'Magic Number' ๋ฅผ ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค! TOptional ๊ตฌ์กฐ์ฒด ์ผ๋‹จ, Optional.h ์— ์ •์˜๋œ TOptional ๊ตฌ์กฐ์ฒด์˜ ๋Œ€๋žต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ž..

Game Dev/Unreal C++ : Study 2023. 3. 21. 23:45
[์–ธ๋ฆฌ์–ผ] ENUM_CLASS_FLAGS ์‚ฌ์šฉํ•˜๊ธฐ (์–ธ๋ฆฌ์–ผ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ๋ฒ•)

ENUM_CLASS_FLAGS ์‚ฌ์šฉํ•˜๊ธฐ (์–ธ๋ฆฌ์–ผ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ๋ฒ•) ํ•ต์‹ฌ : 1. ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ๋™์‹œ์— ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ๋‹ค๋ฅผ ๋•Œ๋Š”, Enum Class ์˜ ๊ฐ’์„ Shift ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•ด Bit Flag ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 2. EnumClassFlags ํŒŒ์ผ์— ์ •์˜๋œ ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜๋“ค(e.g. EnumHasAnyFlags)์„ ํ™œ์šฉํ•˜๋ฉด, Enum Class ์— ์ •์˜๋œ ํ”Œ๋ž˜๊ทธ๋“ค์„ ์ด์šฉํ•ด ์ผ€์ด์Šค๋“ค์˜ ์ค‘์ฒฉ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค. 3. ์ผ๋ฐ˜์ ์œผ๋กœ Enum Class ๋‚ด์˜ ๊ฐ’๋“ค์„ Flag ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” UI ๋‚˜ ํ™˜๊ฒฝ์„ค์ • ์„ธํŒ… ๋“ฑ์ด ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Enum Class ๋Š” ๊ฐ™์€ ์ฃผ์ œ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์กฐ๊ฑด๋“ค์„ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์ผ ์—ฌ๋Ÿฌ ๋ณตํ•ฉ์ ์ธ ์ƒํ™ฉ์„ ๋™์‹œ์— ๋‹ค๋ค„์•ผ ํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด ..

Game Dev/Unreal C++ : Dev Log 2023. 3. 14. 21:29
[์–ธ๋ฆฌ์–ผ] ๋™์ ์œผ๋กœ ์•กํ„ฐ ์ปดํฌํ„ดํŠธ ์ƒ์„ฑํ•˜๊ธฐ (Dynamically create ActorComponent)

๋™์ ์œผ๋กœ ์ปดํฌํ„ดํŠธ ์ƒ์„ฑํ•˜๊ธฐ (Dynamically create ActorComponent) ํ•ต์‹ฌ : 1. ์ผ๋ฐ˜์ ์œผ๋กœ ActorComponent ๋Š” ์ƒ์„ฑ์ž์—์„œ CreateDefaultSubobject ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด CDO ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. 2. ๋™์ ์œผ๋กœ ์•กํ„ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์—์„œ๋Š” AddComponent ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋ฉฐ, C++ ์—์„œ๋Š” NewObject ๋กœ ActorComponent ๋ฅผ ์ƒ์„ฑ ํ›„, ๊ธฐ์กด RootComponent ์— Attach ํ•˜๋Š” ๋ฐฉ์‹์„ ํ™œ์šฉํ•œ๋‹ค. 3. ์ปค์Šคํ…€ AddComponent ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ํŽธํ•˜๊ฒŒ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์—์„œ AActor ํด๋ž˜์Šค์—๋Š” AddComponent ๋ผ๋Š”, ๋‚ด๋ถ€์ ์œผ๋กœ NewObj..

Game Dev/Unreal C++ : Dev Log 2023. 3. 10. 16:20
SetTimer ์— ํ•จ์ˆ˜ ๋ฐ ๋žŒ๋‹ค(Lambda) ์—ฐ๊ฒฐํ•˜๊ธฐ

SetTimer ์— ํ•จ์ˆ˜ ๋ฐ ๋žŒ๋‹ค(Lambda) ์—ฐ๊ฒฐํ•˜๊ธฐ ํ•ต์‹ฌ : 1. UObject ์ƒ์† ํด๋ž˜์Šค์—์„œ๋Š” ๊ธฐ์กด ํ•จ์ˆ˜๋ฅผ SetTimer ํ•จ์ˆ˜์—์„œ ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. 2. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” FTimerDelegate ์— Lamda ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ, UObject ๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค์—์„œ๋„ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 3. FTimerHandle ์€ ์ „์—ญ์ด๋ฉฐ, ์‚ฌ์šฉ ์™„๋ฃŒ ํ›„์—๋Š” ClearTimer ๋ฅผ ์ด์šฉํ•ด ํƒ€์ด๋จธ๋ฅผ ํ•ด์ œํ•ด ์ฃผ๋„๋ก ํ•˜์ž! ์ด์ „ ๊ธ€์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฐ” ์žˆ์ง€๋งŒ, ์ผ์ • ์‹œ๊ฐ„ ์ดํ›„ ํŠน์ • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ๊ธฐ๋กํ•ด๋ณด๋ ค ํ•œ๋‹ค. SetTimer ์— ํ•จ์ˆ˜์™€ ๋žŒ๋‹ค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€๋กœ ์†Œ๊ฐœํ•œ๋‹ค! 1. ๊ธฐ์กด ํ•จ์ˆ˜์— ๊ทธ๋Œ€๋กœ ์—ฐ๊ฒฐ (UObject ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ) FTimer..

Game Dev/Unreal C++ : Dev Log 2023. 2. 20. 20:35
[์–ธ๋ฆฌ์–ผ] SafeZone ์œ„์ ฏ

SafeZone ์œ„์ ฏ ํ•ต์‹ฌ : 1. SafeZone ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ฝ˜์†”/PC/๋ชจ๋ฐ”์ผ ๋“ฑ ์—์„œ ํŒจ๋„ ๊ฐ€์žฅ์ž๋ฆฌ์— UI ๋ฐ ์ปจํ…์ธ ๊ฐ€ ์ œ๋Œ€๋กœ ์ถœ๋ ฅ์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋จผ์ €, SafeZone ํŒจ๋„์— ๋Œ€ํ•œ ์–ธ๋ฆฌ์–ผ ์—”์ง„์˜ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค : ์–ธ๋ฆฌ์–ผ ๊ณต์‹ ๋ฌธ์„œ์— ์žˆ๋Š” ์„ธ์ดํ”„ ์กด์— ๋Œ€ํ•œ ๊ทธ๋ฆผ์„ ๋ณด์ž. ์™ผ์ชฝ์€ SafeZone ์œ„์ ฏ์ด ์—†๋Š” ๊ฒฝ์šฐ์ด๊ณ , ์˜ค๋ฅธ์ชฝ์€ SafeZone ์œ„์ ฏ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์˜ค๋ฅธ์ชฝ์˜ ๊ฒฝ์šฐ, Uniform Safe Zone (๊ท ๋“ฑ ์„ธ์ดํ”„ ์กด) ์˜์—ญ์„ 0.9(๋นจ๊ฐ•) ์œผ๋กœ ์„ค์ •ํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ธ์ดํ”„ ์กด์„ ํ™œ์šฉํ•˜๋ฉด, ๊ฐ€์žฅ์ž๋ฆฌ์˜ "Unsafe" ํ•œ ์กด์— ์œ„์ ฏ์ด ์ž˜๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค! ์ฐธ๊ณ  : ์–ธ๋ฆฌ์–ผ ๊ณต์‹ ๋ฌธ์„œ

Game Dev/Unreal C++ : Dev Log 2023. 1. 16. 21:21