์ด๊ฑด ๊ฐ๋จ ํ๋กํ ํ์
์๊ฐ๋ ๋์ถฉ ํฌํ ์ต์ผ๋ก ๋ง๋ฌ
์ด๊ฑด ์ผ์ง ์ง์ญ์ ํ์์๊ฐ ๋ง๋๋ ์์ ๊น์ง ์ถ๊ฐํ๊ฑฐ
์์๋ ํ ์ค์ณ๊ฐ ์กฐ์กํด์ ๊ฑ ์ํ์๋ ํ ์ค์ณ๋ฅผ ํฌํ ์ต์ผ๋ก ๋ค์ ๋ง๋ฌ
( ๋ฐ์ ์์ ์ ์์ผ ๊ฑฐ๋ฆฌ๋ด์์ ์์ผ ๋ฐํ์ง ์ธ๋ฑ์ค๋ง ์ฃผ๋ ๊ฑ ํฌํผ๊ณ
ํ๋ฒ ๊ฐ๋ ์ง์ญ์ ํ์์๊ฐ๋ก ๋ง๋๋๊ฑด ๊ฐ์ ๋งต๊ตฌ์กฐ์ ๋ฐ๋ฅธ ๋ฐฉ๋ฒ๋ก ์ ์๊ธฐ๊ฐ ๊ตฌ์ํด์ ์๊ธฐ๊ฐ ๊ตฌํํด์ผ๋จ )
๊ตฌํ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ํ ๋ฐฉ๋ฒ๋ก ์ด ์์ง๋ง ๋๋
์ ๋ ์์ ์์ ์๊ณ๋ฐฉํฅ์ผ๋ก ํ์ํด์ (์์ฉ๋์ด์์ผ๋ก)
์ฅ์ ๋ฌผ์ด๋ฉด ์ฅ์ ๋ฌผ์ ๊ฐ๋๋ฅผ ์ถ๊ฐํจ , (90๋~100๋ ์ด๋ฐ์์ผ๋ก)
ํ์ํ ๋ ์ผ์ข ์ ๊ฐ๋์ ํฌํจ๋๋ฉด ์๊ฐํ์ผ๋ก ์ค์ ํจ
ํฌํจ ์๋๋ฉด ์์ผ์ผ์ง๋ ํ์ผ๋ก ์ค์ ํจ
๊ทธ๋ผ ์ฅ์ ๋ฌผ์ ๊ฐ๋ ค์ง๋ ์๊ฐํ์ผ๋ฆฌ์คํธ๋ฅผ ๋ง๋ฌ
์ด๊ฑธ ์ ๋๋ง๋ค ๋ฐ๋ณตํจ (์ด๋ฏธ ๋ค๋ฅธ ์ ๋์๊ฒ ์์ผํ์ผ๋ก ๋ฐํ์ง ํ์ผ์ด๋ฉด ํ์์ํ๊ณ ๋ค์ ํ์ผ์ ํ์ํ๊ณ ์ด๋ฐ์)
๊ฐ๋๋ ์ผ์ผํ ๊ณ์ฐํ๋๊ฒ ์๋๋ผ ๋ฏธ๋ฆฌ ๊ณ์ฐํด๋์๊ฑธ ์ฌ์ฌ์ฉํจ
https://github.com/replming/disk/blob/main/FogOfWarHelper.unitypackage
์์ ์
๊ธฐ๋ณธ์ ์ผ๋ก ๋งต์ด ๋ค ์์ผ ๊บผ์ง ์ํ์์ ์์ํด์ผ๋จ
์ด๊ฑฐ๋ ๊ทธ๋ฅ ํ ์ ๋๋ค์ ์์ผ๊ฑฐ๋ฆฌ์์ ์์ผํ์ผ, ์๊ฐํ์ผ ๋ฆฌ์คํธ๋ง ์ฃผ๋ ํฌํผ์ง
ํ๋ฒ ๊ฐ๋ ์ง์ญ์ ํ์์๊ฐ๋ก ๋ง๋๋๊ฑด ๊ฐ์ ๋งต๊ตฌ์กฐ์ ๋ฐ๋ฅธ ๋ฐฉ๋ฒ๋ก ์ ์๊ธฐ๊ฐ ๊ตฌ์ํด์ ์๊ธฐ๊ฐ ๊ตฌํํด์ผ๋จ
ํจ์ ์ค๋ช
" using FogOfWarHelperNameSpace; "
= ์ ๋ํฐ ํด๋น c#ํ์ผ์์ ์ฌ์ฉํ ๋ using ํด์ค์ผ๋จ
" fogOfWarHelper ์ ์ฅ์์๊ฐ_ํฌํผ = new FogOfWarHelper(Index mapSize); "
= ์ ์ฅ์์๊ฐ ํฌํผ ์์ฑ , ๋งต์ฌ์ด์ฆ๋ ์ค๊ฐ์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด "๋ณ์๋ช .ChangeMapSize(mapSize)" ๋ก ๋ณ๊ฒฝ๊ฐ๋ฅํจ
" ์ ์ฅ์์๊ฐ_ํฌํผ.AddObstacle(Index obstacleTileIndex); "
= ์์ผ๊ฐ๋ฆด ๋ฒฝ์ด๋ ์ฅ์ ๋ฌผ ๋ฑ๋ก , ๋ณดํต ๋งต์ด๊ธฐ์ ๋งต์ ์๋ ๋ชจ๋ ์ฅ์ ๋ฌผ์ ๋ฑ๋ก ํ๋ฉด ํธํจ
" ์ ์ฅ์์๊ฐ_ํฌํผ.AddUnit(Index unitTileIndex, int fob_distance_by, FOB_OPTION_TYPE fOB_OPTION_TYPE); "
= ์์ผ๋ฅผ ๊ฐ์ง ์ ๋๋ฑ๋ก , fob_distance = ์ ๋์ ํ์ผ๋จ์ ์์ผ๊ฑฐ๋ฆฌ , fOB_OPTION_TYPE์ ์ ์ฌ๊ฐํ ์์ผ์ ์ํ ์์ผ๊ฐ ์์
" ์ ์ฅ์์๊ฐ_ํฌํผ.Clear_Unit(); "
= ๋ฑ๋กํ ๋ชจ๋ ์ ๋์ ์ญ์ ํจ , ๋ณดํต AddUnit ํด๋ ๋ค์ ํ๋ ์์์ ์ ๋์ ๋ณ๊ฒฝ๋ ์ฌํญ์ ์ ์ฉ๋์ง ์๊ธฐ์ ์ ๋์ ๋ณํ๋ฅผ ์ ์ฉํ ๋ ค๋ฉด, ๋งค ํ๋ ์ ๋ง๋ค Clear_Unit์ ํด์ฃผ๊ณ ๋ค์ ๋ชจ๋ ์ ๋์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ๋ก ์ ์ฌ์ฉํจ
" ์ ์ฅ์์๊ฐ_ํฌํผ.Update(); "
= ํ ์ํฉ์ ๋ง๊ฒ ์์ผ์ํฉ์ ์ ๋ฐ์ดํธํจ
" FogOfWarHelper_Output ์ ๋ฐ์ดํธ_๊ฒฐ๊ณผ = ์ ์ฅ์์๊ฐ_ํฌํผ.Output; "
= ์ ๋ฐ์ดํธ ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ด
" FogOfWarHelper_Option ์ต์ = new FogOfWarHelper_Option();
์ต์ .BasicMode();
์ ์ฅ์์๊ฐ_ํฌํผ.SetOption(์ต์ ); "
= ์ต์ ์ ์ค์ ํจ ,
softFogMode = ๋ถ๋๋ฌ์ด ์๊ฐ๋ชจ๋ , false๋ฉด output์์ ๊ธฐ๋ณธ ์ฌ๊ฐํ์๊ฐ๋ง ๋ฐ๊ณ true์ด๋ฉด ๋ค์ํ ์๊ฐํ์ ๋ฐ์
prevUpdateUnitList_IndexChangeCheck = false๋ฉด update์ ๋ฌด์กฐ๊ฑด ๊ณ์ฐํ๊ณ , true์ด๋ฉด ๋ฑ๋ก๋ ์ ๋๋ค์ ์ํฉ์ด ์ด์ ์ ๋ฐ์ดํธ๋ ์ํฉ๊ณผ ๊ฐ๋ค๋ฉด ๊ณ์ฐํ์ง ์๊ณ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ค ์ต์ ํ์ฉ๋ ๋ด ์ปดํจํฐ ๊ธฐ์ค์์ 3~4fps์์น? ํ๋๊ฑฐ ๊ฐ์๋ฐ ์ ๋ชจ๋ฅด๊ฒ ์. ๋ด๋ถ์์ directory ์๋ฃ๊ตฌ์กฐ๋ก ๊ฒ์ํด์
thickFogMode = ๋๊บผ์ด ์๊ฐ๋ชจ๋ , ๊ธฐ์กด ์๊ฐ์์ ์ฃผ๋ณ ํ ํ์ผ ์๊ฐ๋ฅผ ๋ ๋ง๋ฌ
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
ex์์ . update ํจ์ ํ์ ์์ (๋ณต๋ถํ๋ค๊ณ ๋์๊ฐ๋๊ฑด ์๋๊ณ ๊ทธ๋ฅ ์ด๋ฐ์์ผ๋ก ์ฐ๋ฉด๋๋ค ์ ๋)
fogOfWarHelper ์ ์ฅ์์๊ฐ_ํฌํผ;
public void Start()
{
์ ์ฅ์์๊ฐ_ํฌํผ= new FogOfWarHelper(Index mapSize);
foreach (Index wallIndex in wallIndexs)
ย ย ย ์ ์ฅ์์๊ฐ_ํฌํผ.AddObstacle(wallIndex);
}
public void Update()
{
FogOfWarHelper_Output prevOutput = ์ ์ฅ์์๊ฐ_ํฌํผ.Output;
foreach (Index i in prevOutput.lightIndexList)
ย ย ย ย ๋งต[i.y, i.x].SetFog();
foreach (FogIndex i in prevOutput.fogIndexList)
ย ย ย ย ๋งต[i.index.y, i.index.x].SetFog();
// โ ์ด์ ํ๋ ์์์ ์ผ์คฌ๋ ์์ผ ๋ค์ ๊บผ์ฃผ๊ธฐ
์ ์ฅ์์๊ฐ_ํฌํผ.Clear_Unit();
foreach (Unit unit in Units)
{
unit.Update();
์ ์ฅ์์๊ฐ_ํฌํผ.AddUnit(unit.GetIndex, unit.fob_distance, unit.fOB_OPTION_TYPE);
}
// โ ์ด์ ์ ๋์ํฉ์ ์ ๋ถ ์ญ์ ํด์ฃผ๊ณ ํ ํ๋ ์์ ํฌ์ง์ ์ด ๋ฐ๋ ์ ๋์ ๋ค์ ๋ฑ๋ก
์ ์ฅ์์๊ฐ_ํฌํผ.Update();
FogOfWarHelper_Output output = ์ ์ฅ์์๊ฐ_ํฌํผ.Output;
foreach (Index i in output.lightIndexList)
ย ย ย ๋งต[i.y, i.x].SetLight();
foreach (FogIndex i in output.fogIndexList)
๋งต[i.index.y, i.index.x].SetFog(i.fogType);
// โ ์ ๋ฐ์ดํธ ์ดํ output์ ๋ฐ์์ ์์ผ ๋ฐํ๋ ์ธ๋ฑ์ค๋ค์ ์ผ์ฃผ๊ณ , ์๊ฐ ์ธ๋ฑ์ค ๋ค์ ๊บผ์ค
}
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
๊ตฌํ๊น์ง 4์ผ ์ ๋ ๊ฑธ๋ฆผ (๋์ค ์ ๋ฒ์ ๋น ใ ใด์์ ์๋ง ์ฌ๋ฌด์ค ์นจ์๋๊ฑฐ ๊ณต์ฌ ๋์์ฃผ๊ณ ๋ง๊ฐ์ง ํค๋ณด๋ ํ์ํค๋ณด๋ ์จ๊ฐ๋ฉด์ ๊ตฌํํจ ใ ใ )
์ ์ฌ๊ฐํ ์ํ ์์ผ๋ง ๋ง๊ณ ์ฌ์ฉ์๊ฐ ์ํ๋ ์์ผ๋ฒ์ ํ์ ๋ง๋ค ์ ์๋๋ฐ ๋ ์ด์ ์ฌ๊ธฐ์ ์๊ฐ ๋ถ๊ธฐ ์ซ์ด์ ์ ์ ๋๋ง ํจ
๋ฒ๊ทธ ์๊ฑฐ๋ ์ํ๋ ๊ธฐ๋ฅ ๊ฐ์๊ฑฐ ์์ผ๋ฉด ๋งํด๋ณด์ ํ ์ ์์ผ๋ฉด ํจ ๊ตฌํํด๋ด
๋์ค์ ๋ง์ฝ์~ ์์ด๋ ๊ณต๋ถํ๊ฒ ๋๋ฉด ์ฐ๊ณํด์ ํด๋ณผ๋ฏ
๊ทธ๋ฆฌ๊ณ Output์์ ๋ฐ๋ ๋ฆฌ์คํธ๋ ReadOnly ์ฉ๋๋ค. ์กฐ์ํ์ง๋ง๋ผ... ์๋ง ์กฐ์ํ๋ฉด ๋ฒ๊ทธ๋ ๊ฑฐ์ (ํ ์คํธ ํด๋ณด์ ์ ์์)
์ Output๋ถ๋ฌธ ๋๋ฌธ์ c#๊ตฌ๋ฌธ ๋ฐฐ์์ ๋ ์์ ํ๊ฒ ํด๋์ค ์ค๊ณํ๊ณ ์ถ์๋๋ฐ output ๋ฆฌ์คํธ readonlyํ๋๋ฒ์๋...
๋ฆฌ์คํธ ํ๋ ๋ ๋ง๋ค์ด์ output ํ ๋๋ง๋ค ๋ณต์ ํ๋๋ฒ ๋ฐ์ ์๋ ๊ดํ ์ฑ๋ฅ๋ญ๋น ๊ฐ์์ ์ํ์ , output ์กฐ์์ํ ๊ฑฐ๋ผ๊ณ ๋ฏฟ์!
https://github.com/replming/disk/blob/main/FogOfWarHelper.unitypackage
์์ ์ฃผ์
๊ทธ๋ฆฌ๊ณ ํน์ ์์ ์คํ ์ด์ ๋ค๋ฅธ ์ ์ฅ์ ์๊ฐ ์์ ์์ผ๋ฉด ์๋ ค์ฃผ์
https://github.com/replming/disk/blob/main/FogOfWarHelper.unitypackage
๊ตฟ
์์ ์์ด ๊ตฌํํ ์ฌ๋?
๋งค์ปค๋์ฆ์ด ๊ถ๊ธํ๋ฐ
์์ ๋ง๋ ๊ฒ ๋์ ์๊ณ ๋ฆฌ์ฆ ํต์ฌ์๋ฆฌ๋ ๋ณธ๋ฌธ์ ๊ฐ๋จํ๊ฒ ์ ์
์ ในใ ? ๊ธ ๋ค์ ์ ๋ ํจ..
๊ถ๊ธํ๋ฉด ๋ฌผ์ด๋ด
์์งํ ์ด๊ฒ๋ง ๋ด์๋ ๋ชจ๋ฅด๊ฒ ๋ค
light๋ก ๋น์ทํ๊ฒ ๊ตฌํํ ์ ์๋๊ฑด๊ฐ..
์ ๋ ๊ธฐ์ค์ผ๋ก ์ฃผ๋ณ ํ์ผ์ ๊ฐ๊น์ด๋ฐ๋ถํฐ ์๊ณ๋ฐฉํฅ์ผ๋ก ์์ฉ๋์ดํ ์ผ๋ก ํ์ํจ , ์ฅ์ ๋ฌผํ์ผ์ด ์์ผ๋ฉด ๊ทธ ์ฅ์ ๋ฌผํ์ผ์ ๊ฐ๋๋ฅผ ์ ์ฅํจ , ํ์ํ๋ ํ์ผ์ด ๊ทธ ๊ฐ๋์ ํฌํจ๋๋ฉด ๋ชป๋ณด๋ ํ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์๊ฐ๊ฐ ์์ด์ผ ๋๋ ํ์ผ ๋ฆฌ์คํธ์ ๋ฃ์ , ๊ทธ ๊ฐ๋์ ํฌํจ ๋์ง ์์ผ๋ฉด ๋ณผ ์ ์๋ ํ์ผ๋ก ๊ฐ์ฃผํ๊ณ ๋ณผ์์๋ ํ์ผ ๋ฆฌ์คํธ์ ๋ฃ์
๊ฐ๋ํฌํจ ๊ฒ์ฌ๋ ์ถฉ๋๊ฒ์ฌ ์ฒ๋ผ ๋ค ํ์ํ๋ฉด๋จ ๋ค๋ง ๋๋ ๋ถ์ด์๋ ๊ฐ๋๋ผ๋ฆฌ ํฉ์น๋ ์์ผ๋ก ์ต์ ํํจ
๊ฐ๋ณ๊ฒ ๋์๊ฐ๋ ํธ์ธ๊ฐ ์ด ์ ๋๋ฉด?
ํ์ผ๋ก ๊ฒ์ํ๋ค๋๊ฑด tilemap๊ธฐ์ค์ผ๋ก ๊ฒ์ ๋จ์๊ฐ tile ์ด๋ผ๋๊ฑฐ๋ค
๊ทธ๋ฐ ๋ฐฉ์์ผ๋ก ์งฐ๊พผ..
ใ ใ ํ์ผ๋งต์
์ดํดํด์ tile๋ก ๊ฒ์ํ๊ฒ๋ ํ๊ตฐ..
yes