ํ์์ฒ๋ผ ์์ฃผ ๋ณด๋ ํธ์์น ๊ฒ์ ๊ฐ๋ฐ ๋ฐฉ์ก์ ๋ค์ด๊ฐ์ ์ด์ผ๊ธฐํ๊ณ ์์์.
์ด์ GetComponent์ ๋ํด ๋ด๊ฐ ์๋ชป ์ดํดํ๊ณ ์์๋ค. ์ปดํฌ๋ํธ๊ฐ ์์ผ๋ฉด ๊ณ ์ฅ๋์ง ์๊ณ null๊ฐ์ ๋ฆฌํดํ๋ค.ย
์ด๋ ๊ฒ ๋งํ๋๋ฐ ๊ฐ์๊ธฐ ๊ฐ์นญ ์๊ธ๋ฉ์ด๊ฐ ์์ย "์ GetComponent๋ฅผ ์ฐ์ธ์?" ํ๊ณ ๋ฌป๋ ๊ฑฐ์.
๊ทธ๋์ ๋๋ OnColliderEnter2D์์ ์ ์ ์๋ณํ๊ธฐ ์ํด์ ์ด๋ค๊ณ ๋งํ์ง.
๊ทผ๋ฐ ๋ฌ๊ธ์์ด "GetComponent ์ข์ง์์์. ์ฐ์ง ๋ง์ธ์" ์ด๋ฌ๋๊ฑฐ์. ๋ ๊ฐ ๋ฌ๊ธ์์ด ๋ถ์ ๋นํด์ "์์"ํ๊ณ ๋จ์ด์ ธ๋๊ฐ.
ํน์ ํธ๋ฆฌ๊ฑฐ ์์ฐ์ธ์? ํ๋๋ฐ ์ฒ์๋ฐ์ฌ๋ก ๋ด๊ฐ ๊ทธ๋ฐ๊ฑฐ ์๋ค๊ณ ํ๋๋ฐ,ย .
๋ฐฉ์ฅ์ "๋ง์์ ์ ๋ ์ด๋์ ๊ทธ๊ฑฐ ์ฑ๋ฅ์ ๋จ์ดํธ๋ฆฐ๋ค๊ณ ๋ค์์ด์"ํ๋๊น ๋ ๋งํ ์๊ฐ์ ๋ชปํ์
๋ฐฉ์ฅ์ด "๊ทธ๊ฑฐ ์์ด์"ํ๊ณ ๋๋ ์๊ฐํด๋ณด๋๊น collider์ IsTrigger ์ฒดํฌํ๊ฑฐ ๋งํ๋ ๊ฑฐ๊ตฌ๋ ๊นจ๋ณ์. ๋ ๋ฌดํฑ๋๊ณ ๋ถ์ ํด์ ํ ๋ง์ด ์์ด์ง๊ฑฐ์
๊ทธ ๋ค์ ์๊ธ์ด "๋์ [SerializeField]์ฐ๋๊ฒ ์ข์์."๋ผ ํ๋๋ผ. ํ 5๋ถ์ฏค ๊ณฑ์น์ด๋ณด๋ค ํ๊ฐ ๋๋๊ฑฐ์. ์ ์ฌ๊ธฐ์ ๊ทธ๋ฐ ์ด์ผ๊ธฐ๊ฐ ๋์ค์ง?
๊ทธ๋๋ ์ฐธ์์. ๊ทธ๋, ๊ฐ๋งํ ์์ผ๋ฉด ์ค๊ฐ ์ข๋ ๋ด๊ฐ ๋ชจ๋ฅด๋ ๊ฑธ ํ์ด์ฃผ๊ฒ ์ง, ๊ทธ๋ผ ๋ด๊ฐ ๋งํด์ ๊ณฑ์ฐฝ๋๋ ๊ฒ ๋ณด๋จ ๋ฐฉ์ฅํํ ๋ ์ด๋กญ๊ฒ ์ง ์๊ฐํ๊ณ .
๊ทธ๋ฌ๋ฉด์ ์ถ์ฒํ ๊ฒ์ด FSM์ด๊ณ ,ย ๋ฐฉ์ฅ์ด ์ด๊ฑฐ ์ข์ ๋ณด์ธ๋ค๋ฉด์ ์ง๊ธ๊น์ง ์ ๋ํฐ ๊ณตํ์ ํํ ๋ฆฌ์ผ ๋ณด๊ณ ๊ณต๋ถํ๊ณ ์์.
ํ๋ฃจ ์ง๋ ์๊น "์ด๊ฑฐ ๋์ค์ ์ ๋คํฑ์ฐ๋ฉด ๋ ๋ฒ์ฉ์ฑ์ด ๋์์ง๊ฑฐ์์"๋ผ๊ณ ๋งํ๋ ๊ฑธ ๋ณด๋๊น ๋ค์ ๊ณ ๊ตฌ๋ง 100๊ฐ ์น์ด๋จน์ ๊ฒ ๊ฐ์.ย
๊ฒฐ๊ตญ GetComponent ๋์ MonoBehavior ์ ์ฐ๊ณ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋ ค๋ ๊ฒ์ด์์.
๊ทผ๋ฐ ์ด๊ฒ ๋ํํ ์๋ก์ด ๊ฒ๋ ์๋ ๋ฟ๋๋ฌ ๋ด๊ฐ ์ฐ๋ ๋ฐฉ์๊ณผ ๋ค๋ฆ.
์๊ธ์ด ๋ถ์ ํ ๋ด๊ฐ ์ฐ๋ FSM ๋ฐฉ์์, ์ํ ํ๋ํ๋๋ฅผ BehaviorState์ด๋ผ๋ ํด๋์ค๋ฅผ ์์๋ฐ๋ ๊ฐ์ฒด๋ก ๋๊ณ ํ๋์ด์ด ์ปดํฌ๋ํธ์ ๋ฃ์ ๋ค์, ์ฃผ์ถ์ด๋๋ PlayerMove์์ ์์ํ๊ธฐ ์ ์ GetComponents<BehaviorState>()๋ก ์ํ๋ฅผ ๊ฐ์ ธ์์, PlayerMove์์ ๊ฐ ์ํ์ ์๋ Activate()๋ฉ์๋๋ฅผ ์คํ์ํค๋ ๋ฐฉ์์ด์์.ย
๊ฐ ์ํ๋ String์ผ๋ก ๋ ID๊ฐ ์์ด์ ์ํ ๋ณํ์ ํ ๋, ๊ฑธ์ด๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ID๋ฅผ ํตํด ๋ค๋ฅธ ์ํ์ bool PreCondition()์ ํธ์ถํด ์ธ๋ถ์ ์ผ๋ก ์กฐ๊ฑด์ ๋ง์กฑ์ํค๋์ง(์บ์ฌ์ด ๊ฐ๋ฅํ์ง, ๋ ์ ๋ถ์ด์๋์ง, ์๋๊ฐ ์ด๋ ํ์ง ๋ฑ๋ฑ)์ ํ์ธํ๊ณ ๋ง์กฑํ๋ฉด ํ์ ์ํ ๋ ํผ๋ฐ์ค๊ฐ ๊ฐ๋ฅดํค๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๊พธ๋ ๊ทธ๋ฐ ๋ฐฉ์์ด์์.
๋ด๊ฐ ์ ๋ฐ ํํ ๋ฆฌ์ผ๋ ๋ชฐ๋ผ์ ํผ์ ๋๋๋๋ฉด์ ์ฌ๊ธฐ์ ์ง์ง ์๊ฐ์ ๋ง์ด ์ผ์.
์์ ์ FSM์ ๋ํด ์ผ๋ ๊ธ์ ๋ณด๋ฉด ๊ฐ ์ํ๋ฅผ ๋ฉ์๋๋ฅผ ์จ์ ๊ตฌํํ๊ณ ํ์ฌย ์ํ๋ฅผ Delegate๋ก ๊ฐ๋ฅดํค๋ ๋ฐฉ์์ ์ด์ฉํ๋๋ฐ,ย
๋ฉ์๋๋ก ํ์๋ ํด๋์ค ํ๋์ ์ธ ๊ฒ์ด ๋๋ฌด ๋ฐฉ๋ํด์ ธ์,ย ๊ฐ ์ํ๋ก ํด๋์ค๋ก ๋ง๋ค์~ ํด์ย ์๋ฃ๋ก UnityAsset์ Corgi์์ง์ ์ฌ์ ๋ณด๊ณ ,ย ์ง๊ธ์ ๋ฐฉ์์ด ๋ ๋๊น์ง ๊ฑฐ์ ๋ฐ๋ ์ด ๊ฑธ๋ ธ์.
๊ทผ๋ฐ ๊ทธ๊ฑธ ์ด๋ฉด์ ๋ถ์ ๋นํ๊ณ , ๋งค๋ฒ ๋ง ๊ฑธ๋ ์คํธ๋ฆฌ๋จธ๋ NTR ๋นํ๊ณ , ๊ฐ์กฐ ๋นํ๊ณ ์๋ย ๋ฐฉํฅ๊น์ง ๋ค๋ฅด๊ณ , 3๋ฐ์๋ก ๋ฏธ์น๊ฒ ๋๊ฑฐ์.
์ง์ง ๊นฝํ์น๊ณ ์ถ์๋ฐ ๊ทธ๋ฌ๋ฉด ์ ์ธ์ง ๋ฐฉ์ฅ์ด ์ํด๋ณผ ๊ฒ ๊ฐ๊ณ ,ย
์ด๋ ๊ฒ ์นํ๋ ฅ 1๋ ์์ด ์ ๋ํฐ ํ์๋ง ๋๋ ๋ด ํฌ์ง์ ์ ์ธ์ ๊ฐ ๋บ๊ธธ ๊ฒ ๊ฐ๋ค ์๊ฐ๋ง ํ์ง ๋ง์ ๋บ๊ธฐ๋ ๋ต๋ตํ๊ณ ,ย
์ ๋ฒ์ฃผ์ ใ ใ ๋ถ์์ฅ์ด ์๋ดํ๋ฉด์ "DirectX๋ ์ํด๋ณด๋ ๊ฒ ๊ฐ๋ค๊ณ ์? ๋ฌผ๋ก ํผ์ํ๋ฉด ์ ๋ํฐ๊ฐ ์ข๊ฒ ์ง๋ง ๋๋ฌด ์ ๋น ๊ฐ์ ์ด์์. ๊น์ด๊ฐ ์์ด์" ํ๋ ๋ง์ด ์๊ฐ๋๊ณ ,
์ผ๊ฒ ์์ฅ์ด ๋ก์ฐ์ธํ ํ์ด์์ํ์ย ๋ธ๋ฃจ์ค์ ์ด๋ผ ์๊ฐํ๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ์๋์ ์ผ๋ก ์ค๋ ฅ์๊ฐ ์์ํ๊ณ , ๋ฒ์ ์ผ๋ก ๋ณดํธ๋ ๋ชป ๋ฐ๊ณ ..
์ ์๋น์ด ๋ ์ ๋ํฐ ๊ณต๋ถ์ 2๋ , ์ํ ๋งค์ง์ 1๋ ์ ์๋นํ๊ณ ์๋๋ฐ ์ถ์๋ ์ปค๋ ์์คํ ์์ฑ๋ ๋ชปํ๊ณ ..
์ด์ ๋ด๊ฐ ์ ์ฌ๊ธฐ์ ๊ธ์ฐ๋ฌ ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.
ํ์๋ฅผ ์๋ฌ์? ์ฝ๋ฉ์ด๋ ํด์. ๋ผ๊ณ ํ์๋ฌ์ ๊ธฐ๋ถ์ด ๋์์ค ๊ฒ๊ฐ๋ค์ ๋ฏธ์ํ๊ฒ ๋์ต๋๋ค.
๋ณ์ ๋คํ๊ณ ์๊ฐ๋ญ๋นํ์ง๋ง๊ณ ๋ชจ๋ฅด๋๊ฑด ์ง์ ์ฐพ์๋ณด๊ณ ๋๊ฐ๊ธธ์๊ฐ์ ํ์๋ฆฌ์
์ ๊ทธ๋๋ ์๋ฒ๋ ๋ ์์ ํ๋กํ ํ์ ๋ง๋ค์ด๋ด๊ณ ๊ฐ๋ฅ์ฑ ๋ณด๊ณ ๋ ํ ์ง ๋ด๊ธธ ๊ฐ์ง ๊ฒฐ์ ํ ๋ผ๊ณ
GetComponent ์จ๋ ์๊ด์์. ์ฌ์ฉ์์ ์ฃผ์์ฌํญ์ Update๋ฑ์์ ์ฆ์ ํธ์ถ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์บ์ฑํ ์ ์์ผ๋ฉด Awake, Enable, Start๋ฑ์์ ์ ์ ํ๊ฒ ์บ์ฑํด์ ์ฌ์ฉํ๋ผ ์ ๋์ผ ๋ฟ์. OnEnterTrigger์์ ์บ์นํ ์ค๋ธ์ ํธ์์ ์ปดํฌ๋ํธ ๊ฐ์ ธ์ฌ๋ ๊ทธ๋ผ ๋น์ฉ์ด ์๋ฐ์ํ๋? ์ง๋ํ์ง๋ง๋ผํ์ . ์ข๋ ๋ชจ๋ฅด๋์๋ผ๋ค์ด ์ด์ค๊ฐํ๊ฒ ์๊ณ ์ด๋์ ์ฐ์ง๋ง๋ผ๋๋ฐ...(100๋ ์ ์๋ฃ์) ํ๋ ค๋ฃ๊ณ ์์ธ์ง๋๋ชจ๋ฅด๊ณ ํ์๋ฆฌํ๋๊ฑฐ
https://tistory.jeon.sh/11
๋ณ์ ๋ค
ํ์ง๊ฑฐ๋ฆฌ์ ๊ฐ์ ๋ญ๋นํ ์๊ฐ์ ์ด๊ฑฐ๊ฐ์ ํ์ค ๋์ฝ๊ณ ๊ณต๋ถํด
์ด๋ค๊ฒ์ ๋ง๋๋์ง ๋ชฐ๋ผ๋ ๋ฏธ์ฐ์๊ฐ์๊ฑฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ์ฌ์ ๋ง๋๋๊ฑฐ ์๋์ด์ ์ ๊ณต์ ์๋๋ฉด ๊ทธ๋ ๊ฒ ์๊ฐ์ด ๋ค์ด๊ฐ๋๊ฒ ๋น์ฐํ๊ฑฐ์. ๊ดํ 4๋ ์ ์ ๊ณตํ๊ณ ๋ ์ทจ2์งํ๊ณ ๋ ๊ณต๋ถํ๊ณ ๋ค๋ค ๊ทธ๋ฌ๊ฒ ์? ํ2์ ๊ฐ์ฌ๋ค๋ ๋ค ๋ณ์ ์ด์ผ. ์ ๋ฐ์๋ผ๋ค์ด๋ ํํํธํธํ๊ณ ๋์๊ฐ ์ธ์๊ฐ๋ณด๋ด๋๊ฑฐ ์๋ฌด์ง์ ๋ํํ ๋์์๋๊ณ ๊ฐ์ ์ฝ๋ํ์ค์ด๋ ๋ ์ธ๊ณ ์ฝ์งํ๊ณ ๊ฐ์์๊ณ ํด๋ผ ๊ทธ๊ฒ ๋ํํ ๋์๋๋๊ฑฐ์
์ธ๋ฐฉ๋ณผ์๊ฐ์ ํ ์์ ์ค๋ค.
https://github.com/thefuntastic/Unity3d-Finite-State-Machine
์ด๊ฑฐ ์จ๋ด๋ผ. Corgi๋ก ๋ญ ๊ณต๋ถ์๋ํ๋๊ฑฐ ์ข์. ์ด๋ณดํํ ์ข์ ์ถ๋ฐ์ ์ด ๋ ์๋ ์์. ๊ทธ๋ฐ๋ฐ ๊ฐ์ธ์ ์ผ๋ก๋ ์ด๋์ ๋ ์ต์ํด์ก์ผ๋ฉด ๋ฒ๋ฆฌ๋ผ๊ณ ์กฐ์ธํ๊ณ ์ถ์. ์์ ์ฉ์ด๋ณด๋ฉด ๊ฑฐ๊ธฐ์ ๋ณด๊ณ ๋ฐฐ์ธ๊ฒ ์๋๋ฐ, ๋๋ฌด ๋งน์ ํ๋ฉด ์๋. ๊ทธ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์์ง๋ค์ด ๋ค ๊ทธ๋ ๋ฏ, ๋ง์ ์๊ตฌ์ฌํญ์ ์ปค๋ฒํ๊ธฐ์ํด ์๊ธฐ๋ค ๋ง์ ๊ตฌ์กฐ๋ ์ฒ ํ์ ๊ฐ์ง๊ณ ํ์ฅ๋๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ์ค์ ์ฌ์ฉํ๋ คํ๋ฉด ๋ฌธ์ ๊ฐ ๋ง์๊ฒ์. Corgi์ ๊ฒฝ์ฐ๋ ์ปดํฌ๋ํธ ํจํด์ด ๋๋ฌด ์ง๋์น๋ค๋๊น... ๋ญ ์ค๋ธ์ ํธ ํ๋ ๋๋ฅด๋ฉด ๊ธฐ๋ฅ ์ปดํฌ๋ํธ๊ฐ ์์ญ๊ฐ๊ฐ ๋ค๋ฅ๋ค๋ฅ ๋ถ์ด์๋๋ฐ, ๊ณผํ๋ฉด ๋๋ฒ๊น ๋ ํ๋ค๊ณ ์ ์ง๋ณด์ ์ฌ์ฉ ๊ด๋ฆฌ ๋ชจ๋์ด๋ ค์
์๊ฐํด์ค๊ฑด ๊ณ ๋ง์. ๊ทผ๋ฐ ์ฝ๋๊ฐ ๋๋ฝ๊ธด ํ์ง๋ง ๋ด ๋๋ฆ๋๋ก ์ดํดํ๊ณ ํก์ํ๊ฑฐ๊ณ , 6๊ฐ์๊ฐ ์ฝ๋ฉ ๋ฐฉ๋ฒ ๊ณ ๋ฏผํ๊ณ ๋ฐ๊ฟ๋ณธ ๊ฒฐ๊ณผ, ๊ฒฐ๊ตญ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก๋ ๋นํ๊ณ ๊ฝ๋ฐฐ๊ธฐ๋ง๋ฅ ๊ฝ๋ฒ๋ฆฌ๋ฉด ๊ตฌํ์ด ๋๋ค๋ ๊ฑธ ๊นจ๋ฌ์. ๋ ์ข์ ์ฝ๋ฉ ๋ฐฉ๋ฒ์ด ์์ ์ ์๊ฒ ์ง๋ง, ๋ FSM์ ์ถฉ๋ถํ ์๊ฐ์ ๋ค์๊ณ ์ด ์ด์ ์๊ฐ์ ๋ค์ด๋ฉด ์ง๋๋ฅผ ๋ชป ๋๊ฐ ๊ฒ ๊ฐ์
์ธ์ค์์ฝ์ข
์คํธ๋ฆฌ๋จธ ntr๋ง๊ณ ์จ๊ฒ ํํ์ด
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๋ฌด์จ ์๋์ธ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ํ๋ฑํ์ด ๋ ๋ฃ์ผ๋ฉด ์ข ์์ํ ๊ฒ ๊ฐ์๋ฐ
๊ฑ๋ getcomponent ๋์ trygetcomponent ์ฐ๋ ๋ง์ ํ๊ณ ์ถ์๋๊ฑฐ ์๋๊น?
๊ทธ๊ฑด ๋ด๊ฐ ๊ทธ์ ๊ป ํ์ํ๋ค ๋๊ฐ๋ฆฌ ๊นจ์ง๊ฑฐ์. if(GetComponent<>() != null)ํ๋ฉด ๊ณ ์ฅ๋ ์ค ์๊ณ TryGetComponent์ฐ๋ผ๊ณ ํ์๋๋ค๊ฐ ์๋์ ๊ทธ๊ฑฐ ์ฌ๊ณผํ๋ฌ ๊ฐ๋ ์ NTR๋นํจ
https://rito15.github.io/posts/unity-opt-script-optimization/#getcomponent-%EB%8C%80%EC%8B%A0-trygetcomponent-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
์ด ๋ธ๋ก๊ทธ์์ ๋ณธ๊ฑด๋ฐ ๊ณ ์ฅ๋๊ณ ์๋๊ณ ๋ฌธ์ ๊ฐ ์๋๋ผ trygetcomponent๊ฐ ์์ ๋ฉ๋ฆฌํธ๊ฐ ๋ ๋ง์ผ๋ ์ถ์ฒํ๋ค๋๊ฑด์ค
์ค.. ํ์ ๋ฐฐ์ฐ๊ณ ๊ฐ๋๋ค
์ธ์์ ๋๊ณ .. - dc App
๋ญ๋ ์ข์ผ๋๊น GetComponent๋ ํ๋ฒ ํธ์ถํ๊ณ ์บ์ฑํด๋ฌ๋ผ. ๋๋ฝ๊ฒ ๋๋ฆฐ๋์ด์ผ. ๊ทผ๋ฐ ๋๋ฆฐ๋์ ์ฐ๋ ๋ญ ํ๋ ์ค์ํ๊ฑด ์์ฑ์ด์ผ. ์ฝ๋ ์ต์ ํ๋ ๋์ค์ ๋ชฐ์์ ํด๋ ๋๋๊น ๊ฐ๋ฐ ๋ชฉํ์น ์ ํ๊ณ ๊ทธ๊ฑฐ ๋ฌ์ฑ์ด๋ ํด๋ผ. ์ต์ ํ๋ก ๋ฒ๋ฒ๋๋๋๋ค ์น๊ณ ์์ฑ ๋๋ฐ๋ก ํ๋๋๋ค ๋ชป๋ดค์ด. 1์์๋ ์ผ์ ์ด์ผ. ๋ฉ๋ชจ 100๋ฒ ํด๋ผ.