์ด๋ฒ ์ฝ๋ ๋ฆฌ๋ทฐ์์๋ ๋จ์ํ โ๊ธฐ๋ฅ์ด ๋์ํ๋๊ฐโ๋ณด๋ค,
ํ์
ํ๊ฒฝ์์ ์ฝ๋๊ฐ ์ผ๋ง๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ์ง์ ๋ํ ํผ๋๋ฐฑ์ ๋ง์ด ๋ฐ์๋ค.
ํนํ ์ธ๋ฆฌ์ผ ๋ฉํฐํ๋ ์ด ํ๋ก์ ํธ๋ ์์คํ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก:
๊ฐ์ ์์๋ค์ด ๊ณ์ ์ฝํ๊ธฐ ๋๋ฌธ์,
๊ตฌํ ์์ฒด๋ณด๋ค ์ฝ๋ ์คํ์ผ๊ณผ ๊ตฌ์กฐ๊ฐ ๋ ์ค์ํด์ง ์ ์๋ค๋ ์ด์ผ๊ธฐ๊ฐ ์ธ์์ ์ด์๋ค.
์ด๋ฒ ํผ๋๋ฐฑ๋ค์ ๋ค์ ํ๋ก์ ํธ์์๋ ์ค์ ์ฝ๋ฉ ์ต๊ด ์์ฒด๋ก ๋ฐ์ํ๋ ๊ฑธ ๋ชฉํ๋ก ์ก๊ฒ ๋๋ค.
์ด๋ฒ ๋ฆฌ๋ทฐ์์ ๊ฐ์ฅ ํฌ๊ฒ ๋ค์๋ ์ด์ผ๊ธฐ๋
โ๊ตฌ์กฐ๋ ๋ฆฌํฉํ ๋ง ์ด์ ์ ์ฝ๋ ์์ฒด๊ฐ ์ง์ ๋ถํ๋ฉด ์ ๋๋คโ๋ ๋ถ๋ถ์ด์๋ค.
์ถฉ๋ถํ ๋ ๊น๋ํ๊ฒ ์์ฑํ ์ ์๋ ์ฝ๋์ธ๋ฐ๋:
์ฝ๋๋ง ๋ดค์ ๋:
โ์ค๋ฌด์์๋ ์ด๋ฐ ์์ผ๋ก ์์ฑํ๊ฒ ๊ตฌ๋โ
๋ผ๋ ์ธ์์ ๋จ๊ธฐ๊ฒ ๋๋ค๊ณ ํ์ จ๋ค.
๋ฐ๋๋ก ์ฝ๋ ํ์ง์ด ์ฌ๋ผ๊ฐ์๋ก:
๊ฐ์ ๋ถ๋ถ๋ค์ด ๊ฐ์ด ์ฌ๋ผ๊ฐ๋ค๊ณ ํ์ จ๋ค.
๊ทธ๋์ ๋ค์ ํ๋ก์ ํธ์์๋ ์ ์ด๋ ํ๋ ์ ๋๋:
๊น์ง ์ ๋ง ๊น๋ํ๊ฒ ๊ด๋ฆฌํ ์์คํ ์ ๋ง๋ค์ด๋ณด๋ ๊ฑธ ๋ชฉํ๋ก ์ก์๋ณด๊ธฐ๋ก ํ๋ค.
์ธ๋ฆฌ์ผ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ฒ๋ผ:
ํด๋๋ฅผ ๋๋๊ธด ํ์ง๋ง,
๋ฆฌ๋ทฐ์์๋ ์ด ๊ตฌ์กฐ๋ ๋ชจ๋ dependency๋ฅผ ๊ฐํ๊ฒ ๊ด๋ฆฌํด์ผ ํ๋ ๋๊ท๋ชจ ๊ตฌ์กฐ์์ ์๋ฏธ๊ฐ ํฌ๋ค๊ณ ํ์
จ๋ค.
ํ์ฌ ํ๋ก์ ํธ ๊ท๋ชจ์์๋ ์คํ๋ ค:
๊ฐ์ ๋ฌธ์ ๊ฐ ๋ ์ปค์ง ์ ์๋ค๊ณ ํ์ จ๋ค.
๊ทธ๋์ ๋ฌด์กฐ๊ฑด ์์ง ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ๊ฐ๊ธฐ๋ณด๋ค๋:
๋ก ํด๋๋ฅผ ์ ๋ฆฌํ๋ ๋ฐฉํฅ๋ ์ถฉ๋ถํ ๊ด์ฐฎ๋ค๋ ๊ฑธ ๋๊ผ๋ค.
BeginPlay, Tick, EndPlay ๊ฐ์ ๋ผ์ดํ์ฌ์ดํด ํจ์๋ค์ด
ํธ์ถ ํ๋ฆ ์์๋๋ก ์ ๋ฆฌ๋์ด ์์ผ๋ฉด ์ฝ๋ ๋ฆฌ๋ฉ์ด ํจ์ฌ ํธํ๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์๋ค.
์๋ฅผ ๋ค๋ฉด:
public:
protected:
private:
์ ๊ทผ ์ง์ ์ ์์ฒด๋ณด๋ค๋:
์์ ํ๋ฆ์ด ์ค์ํ๋ค๊ณ ํ์ จ๋ค.
ํนํ BeginPlay๋ Protected: ์์ญ์ ๋๋ ์์ผ๋ก
์ธ๋ฆฌ์ผ ์คํ์ผ์ ๋ง์ถ๋ ๊ฒ๋ ์ด์ผ๊ธฐ ๋์๋ค.
์ธ๋ฆฌ์ผ ์ฝ๋ ํน์ฑ์:
๊ฐ ์์ด๋ฉด์ ํด๋์ค๊ฐ ๋น๋ํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๊ทธ๋ฐ๋ฐ ๋ฆฌ๋ทฐ์์๋:
region์ผ๋ก ์ ์ด์ผ ํ ์ ๋๋ฉด ์ด๋ฏธ ๋ถ๋ฆฌ ์์ ์ด๋ค
๋ผ๋ ์ด์ผ๊ธฐ๊ฐ ์ธ์์ ์ด์๋ค.
ํนํ:
๋ค์ด ๋ง๋ฅ ํด๋์ค๊ฐ ๋๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์:
๋ฅผ ์ด๋ฐ๋ถํฐ ์์ํ๋ ๊ฒ ์ค์ํ๋ค๊ณ ๋๊ผ๋ค.
๊ธฐ์กด์๋:
ResolveCommandMeta()
๊ฐ์ ์ด๋ฆ์ ์์ฃผ ์ฌ์ฉํ๋๋ฐ,
๋ฆฌ๋ทฐ์์๋ Resolve๋:
๊ฐ์ ์ํฉ์์๋ง ์ฐ๋ ๊ฒ ์์ฐ์ค๋ฝ๋ค๊ณ ํ์ จ๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋:
์ ๋๊ฐ ๋ ๋ช ํํ๋ค๊ณ ํ์ จ๋ค.
์๋ฅผ ๋ค์ด:
UTWPlayerSelectionVisualComponent::GetSelectionVisualData()
๋ณด๋ค๋:
GetVisualData()
์ฒ๋ผ ํด๋์ค ์ปจํ
์คํธ์์ ์ด๋ฏธ ์๋ฏธ๊ฐ ๋๋ฌ๋๋ฉด
ํจ์๋ช
์ ์ค์ฌ๋ ์ถฉ๋ถํ๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ๋ค์๋ค.
์ธ๋ฆฌ์ผ์์๋ ์ด๋ฏธ b ์ ๋๊ฐ bool ์๋ฏธ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์:
bIsVisible
๋ณด๋ค๋:
bVisible
ํํ๊ฐ ๋ ์์ฐ์ค๋ฝ๋ค๊ณ ํ์ จ๋ค.
์ฌ์ํด ๋ณด์ด์ง๋ง ์ด๋ฐ ๋ค์ด๋ฐ ํต์ผ์ด
ํ๋ก์ ํธ ์ ์ฒด ์ธ์์ ๊ฝค ๋ง์ด ๋ฐ๊พผ๋ค๋ ๊ฑธ ๋๊ผ๋ค.
์์ฑ์์์:
if (GetRootComponent())
๊ฐ์ ๋ถ๊ธฐ๋ฅผ ํ๋ ์ฝ๋์ ๋ํ ํผ๋๋ฐฑ๋ ๋ฐ์๋ค.
์์ฑ์๋:
์ด ๊ต์ฅํ ์ค์ํ๊ธฐ ๋๋ฌธ์
๊ฐ๋ฅํ๋ฉด ๋จ์ํ ์ด๊ธฐํ๋ง ์ํํ๋ ๊ฒ ์ข๋ค๊ณ ํ์
จ๋ค.
ํนํ ์์ฑ์์์:
์ ์ํํ ์ ์๋ค๊ณ ํ์ จ๋ค.
๊ฐ์ฒด ์์ฑ ์์ ์:
์์์ด๊ธฐ ๋๋ฌธ์,
๋ถ๋ชจ ์์ฑ์์์ Virtual ํจ์ ํธ์ถ ์
์์ ์ํ๊ฐ ์์ง ์ด๊ธฐํ๋์ง ์์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค๊ณ ํ์
จ๋ค.
๊ทธ๋์ ์์ง ๋ด๋ถ๋:
๊ฐ์ ์ ์ฉ ์ด๊ธฐํ ํ์ด๋ฐ์ ๋ฐ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ํ์ จ๋ค.
๊ธฐ์กด์๋ ์ต๊ด์ ์ผ๋ก:
if (!GetWorld())
{
return;
}
๋ฅผ ๋ฃ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋๋ฐ,
BeginPlay ์์ ์ ์๋๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ์ํฉ์ด๋ผ
๋ณดํต์ ๋ถํ์ํ ์ฝ๋๋ผ๊ณ ํ์
จ๋ค.
์คํ๋ ค ์น๋ช ์ ์ธ ๋ฌธ์ ๋ฉด:
check(GetWorld());
์ฒ๋ผ ์ฆ์ ํฐ๋จ๋ฆฌ๋ ๊ฒ ๋๋ฒ๊น ์ ๋ ๋์์ด ๋๋ค๊ณ ํ์ จ๋ค.
์ด ๋ถ๋ถ์ ๊ฝค ์๋กญ๊ฒ ๋๊ปด์ก๋ค.
๊ธฐ์กด์๋ ์ ๋ฆฌ ์ฝ๋๋ฅผ Destroy์ ๋ฃ๋ ๊ฒฝ์ฐ๊ฐ ์์๋๋ฐ:
๊ฐ๋ ์ผ๋ก ๋๋ ์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ํ์ จ๋ค.
์ฆ:
ํจํด์ด ๊ธฐ๋ณธ์ด๋ผ๋ ๋๋์ด์๋ค.
MassEntity Fragment ์ ๊ทผ์ ๋งค๋ฒ ์ง์ ์ฐ๊ธฐ๋ณด๋ค:
UTWMassUtility::GetHealthFragment()
๊ฐ์ Utility ํจ์๋ก ๊ฐ์ธ๋ ๋ฐฉํฅ์ ์ถ์ฒ๋ฐ์๋ค.
ํนํ ํ ํ๋ก์ ํธ์์๋:
ํจ๊ณผ๊ฐ ํฌ๋ค๊ณ ํ์ จ๋ค.
๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ๋ค์:
ํํ๋ก ๋ชจ์์ ๊ด๋ฆฌํ๋ ๊ฒ ์ข๋ค๊ณ ํ์ จ๋ค.
ํนํ:
๊ฐ์ ๋ถ๋ถ๋ค์ ๊ณตํตํ ๊ฐ์น๊ฐ ๋๋ค๊ณ ๋๊ผ๋ค.
๊ธฐ์กด์๋:
FName("Enemy")
ํํ๋ฅผ ์์ฃผ ์ฌ์ฉํ๋๋ฐ,
ํ๊ทธ๋ค์ ๋ณ๋ ํค๋๋ ํด๋์ค์ ๋ชจ์๋๊ณ ์ฐ๋ ๊ฒ ์ข๋ค๊ณ ํ์
จ๋ค.
์์ ๋๋:
namespace TWTags
{
static const FName Enemy;
}
์ค์๋ ์ค๊ณ ์ ์ง๋ณด์๋ ์ฌ์์ง๋ค๊ณ ํ์ จ๋ค.
์กํฐ ํ๊ทธ ๊ธฐ๋ฐ ์กฐํ๋ ์ด์ฉ ์ ์๋ ์ํฉ์ด ์๋๋ฉด ์ง์ํ๋ ๊ฒ ์ข๋ค๊ณ ํ์ จ๋ค.
๋ฐ๋ฉด GameplayTag๋:
ํด์ ์ถฉ๋ถํ ๊ด์ฐฎ์ ๋ฐฉ์์ด๋ผ๊ณ ํ์ จ๋ค.
์ํ๋ ์ด์ ๋ฅผ ๋ฌธ์์ด๋ก ์ง์ ๊ด๋ฆฌํ๊ธฐ๋ณด๋ค:
enum class EEnqueueUnitResult
ํํ๋ก ์ ์ํ๊ณ ,
UI์์๋ Enum์ ๋ง๋ Text๋ฅผ ๋งคํํ๋ ๋ฐฉ์์ด ๋ ์ข๋ค๊ณ ํ์
จ๋ค.
ํนํ:
์ธก๋ฉด์์ ์ฅ์ ์ด ํฌ๋ค๊ณ ๋๊ผ๋ค.
๊ธฐ์กด์๋ ๋จ์ํ:
bool CanEnqueue(...);
ํํ ๋์ Enum์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ฐฉํฅ์ ๋ํ ์ด์ผ๊ธฐ๋ก ์ดํดํ๋๋ฐ,
์ค์ ํผ๋๋ฐฑ ์๋๋ Unreal์์ ์์ฃผ ์ฌ์ฉํ๋ Enum ๊ตฌ์ฑ ์คํ์ผ์ ๋ง์ถ์๋ ์ชฝ์ ๊ฐ๊น์ ๋ค.
ํนํ ์ธ๋ฆฌ์ผ์์๋ ๋ณดํต:
enum class EEnqueueUnitResult : uint8
{
None = 0,
Success,
QueueFull,
InvalidUnit,
Max
};
ํํ์ฒ๋ผ:
None = 0Max ์ถ๊ฐํจํด์ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ์ จ๋ค.
์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ฉด:
UEnum::GetValueAsStringStaticEnum<>()๊ฐ์ ์ธ๋ฆฌ์ผ ๋ด๋ถ ๊ธฐ๋ฅ๋ค๊ณผ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ง์ถ ์ ์๋ค๊ณ ํ์ จ๋ค.
ํนํ Max๋ฅผ ํตํด:
static_cast<int32>(EEnqueueUnitResult::Max)
ํํ๋ก ์ ์ฒด ๊ฐ์๋ฅผ ๊ด๋ฆฌํ๋ ํจํด๋ ์ธ๋ฆฌ์ผ์์ ์์ฃผ ์ฌ์ฉํ๋ ์คํ์ผ์ด๋ผ๋ ์ ์ด ์ธ์์ ์ด์๋ค.
์
๊ทธ๋ ์ด๋ Row ๊ฐ์ ๊ฒฝ์ฐ
๋งค๋ฒ GetAllRows() ํ๋ ๊ฒ๋ณด๋ค:
ํํ๊ฐ ๋ ์ข๋ค๊ณ ํ์ จ๋ค.
๊ฒ์ ์ค ๋ฐ๋ณต ์กฐํ๋
์บ์ฑ ๊ตฌ์กฐ๋ฅผ ๋จผ์ ๊ณ ๋ฏผํ๋ ์ต๊ด์ด ์ค์ํ๋ค๊ณ ๋๊ผ๋ค.
ํนํ:
GetAllActorsOfClass
GetAllActorsWithInterface
๊ฐ์ ํจ์๋ค์ ๋ด๋ถ์ ์ผ๋ก ์ ์ฒด ์กํฐ ์ํ๋ฅผ ํ๊ธฐ ๋๋ฌธ์
Tick์ด๋ ๋ฐ๋ณต ํธ์ถ์์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์ปค์ง ์ ์๋ค๊ณ ํ์
จ๋ค.
๊ฐ๋ฅํ๋ฉด:
๋ฐฉ์์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ ์ข๋ค๊ณ ํ์ จ๋ค.
์ ํ ๋ง ๊ฐ์ ์๋ UI ์์คํ ์์:
ํ๋ ๊ตฌ์กฐ๋ณด๋ค:
์ค์ฌ ๊ตฌ์กฐ๊ฐ ๋ ์์ ์ ์ด๋ผ๊ณ ํ์ จ๋ค.
ํนํ InstanceIndex๋ฅผ ๊ตฌ์กฐ์ฒด๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด ์ค์ํ๋ค๊ณ ๋๊ผ๋ค.
ํ์ฌ๋:
๋ฅผ ๋๋ ์ ์ฌ์ฉํ๋๋ฐ,
HandleStartingNewPlayer ๊ธฐ์ค์ผ๋ก ํตํฉํ๋ ๋ฐฉํฅ์ด ์ข๋ค๊ณ ํ์
จ๋ค.
๋ฉํฐํ๋ ์ด๋ ์ด๊ธฐํ ํ์ด๋ฐ์ด ๊ฐ์ฅ ์ํํ ์์ญ์ด๋ผ๋ ๊ฑธ ๋ค์ ๋๊ผ๋ค.
PlayerState๋:
๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋ค๊ณ ํ์ จ๋ค.
ํนํ:
DOREPLIFETIME_CONDITION
์ ํ์ฉํ๋ฉด:
๊ฐ์ ์ธ๋ถ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ ๋ ๋ค์ ์ ๋ฆฌํ๊ฒ ๋๋ค.
FogManager ๊ฐ์ ๊ฒฝ์ฐ๋
์กํฐ ํํ๋ณด๋ค:
UTickableWorldSubsystem
ํํ๋ก ๊ด๋ฆฌํ๋ฉด:
์ฅ์ ์ด ์๋ค๊ณ ํ์ จ๋ค.
๊ธฐ์กด์๋ ๊ฒฝ๋ก ํ๋์ฝ๋ฉ์ด๋:
ConstructorHelpers::FClassFinder
๋ฅผ ๋ง์ด ์ฌ์ฉํ๋๋ฐ,
UDeveloperSettings ๊ธฐ๋ฐ ๊ด๋ฆฌ๊ฐ ๋ ์ข๋ค๊ณ ํ์
จ๋ค.
์ด๋ ๊ฒ ํ๋ฉด:
GetDefault<UTWGameSettings>()
ํํ๋ก ์ธ์ ๋ ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ,
SoftPtr ๊ธฐ๋ฐ ๊ด๋ฆฌ๋ ๊ฐ๋ฅํด์ง๋ค๊ณ ํ์
จ๋ค.
MVMM์ ์ง์ ๊ตฌํํ์ง๋ง MVMM์ ๊ธฐ๋ฅ์ ์ธ ํ์ฉ๋๋ฅผ ์ ๊ทน์ ์ผ๋ก ๋ฐ์ํ์ง ๋ชปํ๋ ๋ถ๋ถ์ด ์กด์ฌํด์
์ธ๋ฆฌ์ผ MVVM ํ๋ฌ๊ทธ์ธ์ ์ผ๋ถ ๊ธฐ๋ฅ ๋ฒ ํ์ง๋ง:
๋ฑ ์ฅ์ ์ด ์์ด์ ์ ๊ทน ํ์ฉํด๋ณด๊ณ ํด๋น ๋ถ๋ถ์์ ์์ค์ฝ๋ ๋ณด๊ณ ์์ ํด์ ํ์ฉํ๋๊ฒ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค๊ณ ํ์ จ๋ค..
์ปค์ ๋ณ๊ฒฝ ๊ฐ์ ๊ฒ๋ ์ง์ ๊ตฌํ๋ณด๋ค:
SetMouseCursorWidget()
๊ฐ์ ์์ง ๊ธฐ๋ฅ์ ์ต๋ํ ํ์ฉํ๋ ๊ฒ ์ข๋ค๊ณ ํ์ จ๋ค.
์ด๋ฒ ๋ฆฌ๋ทฐ๋ฅผ ํตํด
์์ง์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ํ์ฉํด์ ์์
์์๋์ ์ค์ด๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ ๊ฒ ์ต๋ํ ํ์ฉํด์ผ๊ฒ ๋ค.
์ด๋ฒ ์ฝ๋ ๋ฆฌ๋ทฐ์์๋ ๋จ์ํ ๊ธฐ๋ฅ ๊ตฌํ๋ณด๋ค
โํ์
๊ธฐ์ค์์ ์ผ๋ง๋ ์ฝ๊ธฐ ์ข์ ์ฝ๋์ธ๊ฐโ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๋ง ๋ง์ด ๋ฐ์๋ค.
ํนํ ์ธ๋ฆฌ์ผ ๋ฉํฐํ๋ ์ด ํ๋ก์ ํธ๋:
๊ฐ์ ์์๋ค์ด ๊ณ์ ์ฝํ๊ธฐ ๋๋ฌธ์,
์ด๋ฐ๋ถํฐ ์ฝ๋ ์คํ์ผ๊ณผ ๊ตฌ์กฐ๋ฅผ ์์ํ๋ ๊ฒ ๊ต์ฅํ ์ค์ํ๋ค๋ ๊ฑธ ๋ค์ ๋๊ผ๋ค.
๋ค์ ํ๋ก์ ํธ์์๋ ์ ์ด๋ ํ ์์คํ
์ ๋๋
โ๊ธฐ๋ฅ๋ ์์ ์ ์ด๊ณ ์ฝ๋๋ ๊น๋ํ๋คโ๋ ๋๋์ผ๋ก ๋๊น์ง ๊ด๋ฆฌํด๋ณด๋ ๊ฑธ ๋ชฉํ๋ก ํด๋ด์ผ๊ฒ ๋ค.