์ธ๋ฒค์ ์ด๋ฒคํธ ๋ฃ์ด์ ui ์ผ์ง๋๋ง๋ค ํ ๋น๋์ด์ ui ์
๋ ์ํค๋๊ฐ
์ธ๋ฒค ๋ณํ ์์๋๋ง๋ค ํ์ ๋ฃ์ด์ ์์ฐจ์ ์ผ๋ก ui์ ๋ณํ ๋ณด์ฌ์ฃผ๋์ ์ด๋ ๊ฒ ๋๊ฐ ๊ตฌํํ์์
์ด๊ฒ ๋ถ๋ฆฌํ๊ฑด๊ฐ? ํ
์ธ๋ฒค ๋ณํ ์์๋๋ง๋ค ํ์ ๋ฃ์ด์ ์์ฐจ์ ์ผ๋ก ui์ ๋ณํ ๋ณด์ฌ์ฃผ๋์ ์ด๋ ๊ฒ ๋๊ฐ ๊ตฌํํ์์
์ด๊ฒ ๋ถ๋ฆฌํ๊ฑด๊ฐ? ํ
๊ทธ๋ฅ ๊ธฐ๋ณธ ๊ฐ๋ ์์ฒด๊ฐ ์๋ชป์กํ๊ฑฐ ๊ฐ์๋ฐ ํน์ ํ์์ถ์ ์?
๋ถ๋ฆฌํ๋ค๋๊ฒ ์ ๋ฐ๊ฑฐ ์๋? ์ ํธ ์ฃผ๊ณ ๋ฐ๊ณ
https://unity.com/kr/how-to/architect-game-code-scriptable-objects
์ด
๊ธ ํ๋ฒ ๋๊น์ง ์ ๋ ํ๊ธธ ๋ฐ๋ - dc App
์๋ ์ ์ฝ์ด๋ด
๋๋ ๋ณดํต ์งค๋ Player์ public Action onInventorySlotChanged ๊ฐ์๊ฑธ ๋ฃ์ด๋๊ณ ์ธ๋ฒคํ ๋ฆฌ์ Start, OnDestroy์์ Player.local.onInventorySlotChanged += HandleSomething; if (Player.local != null) Player.local.onInventorySlotChanged -= HandleSomething; ์ด๋ ๊ฒ ์ง๋ํธ.
๋ด ๋ฐฉ๋ฒ์ด ๋ฒ ์คํธ๋ผ๊ณ ๋ ๋ชปํ๊ฒ ์ง๋ง ScriptableObject ๋ง๋ค์ด์ ๊ณ์ Project ์๋์ฐ์์ ์๋ค๊ฐ๋คํ๊ณ ๋จธ๋ฆฌ์ํ๊ฒ๋ณด๋ค ๋ฐํ์์์ ํ๋๊ฒ ๋ง์์ ๋ค๋๋ผ๊ณ . ๋ค๋ฅธ ํ๋ ์ด์ด ์ธ๋ฒค์ ๋ณด์ฌ์ค์ผํ๋ค๋๊ฐ ์์์น ๋ชปํ ๊ตฌํ ๊ณผ์ ๊ฐ ์๊ธฐ๋ฉด ์์ ์คํฌ๋ฆฝํธ๋ก ํ๋๊ฒ ํธํ์. ์ฆ UI์์ ๋ญ๊ฐ๋ฅผ ๋ณด์ฌ์ค์ผํ ๋๋ Action๋ฅผ ์ด์ฉํด์ ์ด๋ฒคํธ์ ๊ตฌ๋ /๊ตฌ๋ ํด์ ํ๋ ์์ผ๋ก ์ฒ๋ฆฌํ๊ณ , UI์์ ๋ญ๊ฐ ์ก์ ์ ์ทจํด์ผ ํ๋ฉด Player.local.DropInventory(int SlotIndex) ์ด๋ฐ ๋ณ์๋ฅผ ๋ถ๋ฅด๋ ์์ผ๋ก ํ์.
UI์ฝ๋ ์ง๋๋ฒ ๊ฒ์ํด์ ์ฌ๋ฌ ํจํด๋ค ๊ณต๋ถํ๊ณ ์ฅ๋จ์ ์ ์ธ์งํด์, ๋ ํ๋ก์ ํธ์ ์ ๋ง๊ณ ๋ง์์ ๋๋๊ฑฐ ๊ณจ๋ผ์ ์ฐ๋ฉด ๋จ
๋์จ๊ฐ ์๊พธ ๋ถ๋ฑํธ๋ฅผ ๋ ๋ฆฌ๋ค. ๊ตฌ๊ธ์ c# action type argument ๊ฒ์ํด์ ์ฝ์ด๋ณด๋ฉด delegate๋ฅผ ๋ฐ๋ก ์ ์ธํด์ฃผ์ง ์์๋ Action์ด ํ๋ผ๋ฏธํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ ์๊ฒ ํด์ค ์ ์์ผ๋ ๋ด๊ฐ ์ฐ๋ ๋ฐฉ๋ฒ๋๋ก ์ง๋ณด๊ณ ์ถ์ผ๋ฉด ๊ณต๋ถํด๋ด
๋ด๊ฐ ์ฒซ๋ฒ์งธ์์ ์ด์ผ๊ธฐํ๊ฒ ์ด๊ฑด๋ฐ ์์ธํ๊ฒ ใฑใ