Mini Map - B477042/GraduationProject GitHub Wiki

About Mini Map

์ดˆ๊ธฐ์—๋Š” ๊ฐ„๋‹จํžˆ Scene์„ ์บก์ณํ•ด์„œ ์–ป์€ Texture๋ฅผ ์ด์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๋ฉด ๋นจ๋ฆฌ ๋งŒ๋“ค ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์žฌ๋Œ€๋กœ ๋œ ํ‘œํ˜„์„ ๋ชป ํ–ˆ์Šต๋‹ˆ๋‹ค.
์žฌ๋Œ€๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์›”๋“œ์˜ ์ ๋‹นํ•œ ๋†’์ด์— Plane์„ ๋งŒ๋“ค์–ด์„œ ๊ทธ Plane๋“ค์„ Caputre ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Player์˜ ๋†’์ด ์œ„์น˜ ์ •๋ณด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” Plane์˜ Opacity๋ฅผ ์กฐ์ ˆํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด ์—ฐ์‚ฐ์„ Tick์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ์—๋Š” ๋น„์šฉ์ด ์•„๊นŒ์› ์ง€๋งŒ Tick์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ์ฑ…์œผ๋กœ Multi-Threading์„ ์ ์šฉ์‹œ์ผœ ์ด ์—ฐ์‚ฐ์„ ์ƒˆ๋กœ์šด Thread์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

Back to Planning & Implementation

๊ตฌํ˜„

MiniMapTileManager.h

class CalcMiniMapTileAsyncTask :public FNonAbandonableTask
{
	AMiniMapTileManager* Manager;
	const AActor* Player;

public:
	CalcMiniMapTileAsyncTask(AMiniMapTileManager* Manager, const AActor* Player)
	{
		this->Manager = Manager;
		this->Player = Player;
	}


	FORCEINLINE TStatId GetStatId() const
	{
		RETURN_QUICK_DECLARE_CYCLE_STAT(PrimeCalculationAsyncTask, STATGROUP_ThreadPoolAsyncTasks);
	}

	void DoWork();
};

Thread์˜ Factor๋กœ Manager์™€ Player๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

MiniMapTileManager.cpp

void CalcMiniMapTileAsyncTask::DoWork()
{
	//Task Parameter Check 
	if (Manager && Player)
	{
		//#1 Set Opacity to 0
		Thread_CalcOpacity::SetAllOpacityToZero(Manager);
		
		Thread_CalcOpacity::CalcOpacityOfStruct(Manager, Player);
	}
}

void Thread_CalcOpacity::CalcOpacityOfStruct( AMiniMapTileManager* Manager, const AActor* Player)
{
	
	while (Player->IsValidLowLevel()&& UGameplayStatics::GetGameInstance(Manager))
	{
		
		Manager->CalculateStructsOpacity(Player->GetActorLocation());
		FPlatformProcess::Sleep(0.01);

	}
}

Manager์™€ Player๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•œ ํ›„, Opacity๋ฅผ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค.


๊ตฌํ˜„์‹œ ์–ด๋ ค์› ๋˜ ์ 

Multi-Threading์„ ์ ์šฉ ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘๋ถ€ํ„ฐ Thread์˜ ๋™๊ธฐํ™”๋ฅผ ๋„ฃ์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ์ƒ๊ฐํ•˜๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.
'๊ตฌ์กฐ๋ฌผ๋“ค์— ๋Œ€ํ•œ ์ƒํ˜ธ์ž‘์šฉ์„ ๋งŒ๋“ค์–ด๋‘์ง€ ์•Š์•„์„œ ๊ฒŒ์ž„ ์ค‘ ํŒŒ๊ดด๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ ์•ˆ ๋„ฃ์–ด๋„ ๋˜๊ฒ ๋‹ค'๊ณ  ํŒ๋‹จ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ๋‹ค์Œ ๋ฌธ์ œ๋Š” Thread์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ ์‹œ์ ์ด ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. Thread ๋‚ด๋ถ€์— while์ด๋‚˜ for๋ฅผ ํ†ตํ•ด ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ข…๋ฃŒ ์กฐ๊ฑด์ด ์—†์„ ๊ฒฝ์šฐ, ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜๋„ Editor์—์„œ ๊ณ„์† ๋Œ์•„๊ฐ€๋Š” ๋ฌธ์ œ๋ฅผ ํ™•์ธ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด Thread๋Š” Player๊ฐ€ ์žˆ์–ด์•ผ ์˜๋ฏธ ์žˆ๋Š” Thread๋ผ๋Š” ์ ์ด ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ Player๊ฐ€ ์œ ํšจํ•œ ๋™์•ˆ Thread๊ฐ€ ๊ตฌ๋™๋˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

Multi-Threading์„ ์ ์šฉ ์‹œํ‚จ ํ›„, ์›ํ•˜๋Š”๋Œ€๋กœ ์ž˜ ๊ตฌ๋™๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋‹ˆ ๋ง๋กœ ํ‘œํ˜„์„ ์ž˜ ๋ชป ํ•˜๊ฒ ์ง€๋งŒ ์ •๋ง ์ข‹์•˜์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์‹œ ์ง‘์ค‘ ํ•œ ์ 

Multi-Threading์— ์ดˆ์ ์„ ๋งž์ท„์Šต๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ