ํผ์ ๊ฐ๋ฐํ๋๋ฐ ๋๋ฌด ๊ธธ์ด์ง๊ณ ์ด๋ ๊ธ์ธ๋ฐ๋ ์๊ณ ํด์ ์๋ฒฝ์ ํ๋ฒ ๋ฅํ๋ฒ ์ธ๊ณ ๊ฐ.
3Dย 3์ธ์นญ๊ฒ ๋ง๋๋๋ฐ,ย ํ๋ ์ด์ด ์ปจํธ๋กค๋ฌ ์ ๋ง๋ค๊ธฐย ๋๋ฌด ์ด๋ ต๋ค.
์ง๋ 2๋ ๊ฐ 3๋ฒ์ ๋์ ๋๊ฒฉ๋ณ๊ณผ ์ฝ 10์ฐจ๋ก์ ๋ฆฌํฉํ ๋ง์ ๊ฑฐ์ณ๋ ์์ง๋ ๋๋ฌด ์ด๋ ต๋ค.ย
๊ณ ์ 2000์ค์ด ๋ค๋ฅธ์ด๋ค์๊ฒ๋ ๊ฑฐ๋ํ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง
๋๋๊ธฐ์ฒ๋ผ ๋ง๋ค๋ค๋ณด๋ ์ด๋์ 2000์ค์ด ๋์๊ณ ,ย
๋ด ๋จธ๋ฆฌ๋ก๋ย ์ด์ ๋์ด์ ๊ธฐ๋ฅ์ถ๊ฐ๋ ์์ ์ดย ๋ถ๊ฐ๋ฅํด์ง.
๋๋ถ์ด ๊ฐ๋ ์ฑ๋ ๋๋ฝ๊ฐ์ง ์ค๋.ย
unirx์ unitask๋ฅผ ๊ณต๋ถํ๊ณ ๋ ์งํ์ ์๋ก ๋ง๋ ์ฝ๋์ฌ์ ๊ทธ๋ฐ์งย
๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉ๋ ์ ๊ธฐ์ (?)๋ค๋ก ์ธํด ๋์ฑ๋ ์ข๊ฐ์ย ์ฝ๋๊ฐ ๋์๋ค.
์๋ฌดํผ ํ์์ ์ํย ๋ฆฌํฉํ ๋ง์ ์์ํ์ง ์ด์ธ ์ผ์ฃผ์ผ...
์ฌ์ค ์ด์ ์๋ ๋ฆฌํฉํ ๋ง์ ์๋ํด๋ณด์์ผ๋ ์๋๊ฐ ์๋์ ํฌ๊ธฐํ๋๋ฐ, ์ฐจ๋ผ๋ฆฌ ๊ทธ ๋ ํด๊ฒฐํ ๊ฑธ ๊ทธ๋ฌ๋ค.
์๋ฌดํผ ์ง๋ ์ผ์ฃผ์ผ๋์์๋ ์ฌ๋ฌ๊ฐ์ง ์ํ์ฐฉ์ค๊ฐ ์์๋ค.
1. ์ฌ๋ฌ๊ฐ์ ํด๋์ค๋ก ์ญํ ์ ๋ถ๋ดํด์ ์ชผ๊ฐ๊ธฐ.
์ด๋ฐฉ๋ฒ์ ๋จ์ ์ ํ์ค์์ฝํ์๋ฉด ์ฝ๋์ ์์ด ์คํ๋ ค ๋๋ฌด ๋ง์ด ๋์ด๋, ์ผ์ด ๋ง์์ง๊ณ ์ค์์ ์ฌ์ง๊ฐ ๋ง์์ง๋ค.
๊ธฐ์กด ํด๋์ค๊ฐ ์ฐธ์กฐ๋ณ์๊ฐ ๋ง๊ณ , ๋๋ถ๋ถ์ ์ฝ๋์์ ๊ทธ ์ฐธ์กฐ๋ณ์๋ค์ ์ฌ์ฉํ๊ณ ์๋ค.
์๋ฅผ๋ค์ด
void HandleAttack(), void HandleBackstep(), void HandleDie() ๋ฑ ์ ๋ถ ํ๋ ์ด์ด ์บ๋ฆญํฐ์ ๋์์ ์ํ ํจ์์ด๊ณ
๋๋ถ๋ถ animator, characterController์ ๊ธฐํ๋ฑ๋ฑ ์ปค์คํ ํด๋์ค, ํ๋ผ๋ฏธํฐ์คํฌ๋ฆฝํฐ๋ธ์ค๋ธ์ ํธ๋ฅผ ์ฐธ์กฐ์์ผ์ผ ํ๊ณ ,ย
์ฐธ์กฐ์ํค๊ธฐ ์ํด ์์ฑ์๋ผ๋์ง, ์๋๋ฉด ์ฐธ์กฐ๋ณ์๋ค๋ง ๋ฌถ์ด๋์ ์ถ๊ฐ ํด๋์ค๋ฅผ ๋ง๋ ๋ค๋์ง ํด์ผํ๋๋ฐ, ๋ค๋ฅธ๋ฐฉ๋ฒ์ ์์ง ์์ง ๋ชปํ๊ฒ ๋ค.
์์ ๋ฌธ์ ๋ ์ฌ์ค ์ข๋ง ๋ถ์ง๋ฐํ๋ฉด ํ ์ ์๋ ๋ฐฉ๋ฒ์ธ๋ฐ ๋์ฑ ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ์์๋ค.
์๋ ํด๋์ค๊ฐ IPlayerController๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์์์ค์ด๊ณ , ์ด ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด์ ์ ์ ์ธํ์ ํ๋ ์ด์ด์ปจํธ๋กค๋ฌ์ ์ ๋ฌ์ค์ธ๋ฐ
๊ทธ๋ ๋ค๋ฉด IPlayerController๋ฅผ ์์๋ฐ์ ํด๋์ค๋ฅผ ํ๋ ๋ ๋ง๋ค๊ณ ๊ทธ๋ฆฌ๊ณ ์๋ก๋ง๋ค ํด๋์ค๋ค์ ์ฐ๊ฒฐํด์ค ์๊ฐ์ ํ๋
์ด๊ฒ ์ต์ ์ธ๊ฐ ์ถ์๋ค. ๊ทธ๋์ ํ๋ฃจ์ ๋ ์ฝ๋ฉํ๊ณ ํ๋ฃจ์ ๋ ๊ณ ๋ฏผํ๋ค๊ฐ ๊ฒฐ๊ตญ ๊ธฐ๊ฐ.
2. ๊ทธ๋ฅ ๊ธฐ์กด ๊ฑฐ๋ํด๋์ค ๋ค์ ์ ์จ๋ณด๊ธฐ.
1๋ฒ์ ์ฝ์ง์ ํ๋ค๊ฐ ๋ค์ ์ ์๊ฐํด๋ณด๋ย
ํ์ฌ ์ฝ๋์์ unirx๋ฅผ ์ด์ํ๊ฒ ์ฌ์ฉํ ๋ถ๋ถ๋ง ๊ฑท์ด๋ด๋ฉด ์ธ๋งํ ๊ฒ ๊ฐ์๋ค.
unirx์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ, ๊ตฌ๋ ๋ฐฉ์์ ํจํด์ ๋งค์ฐ ๋งค๋ ฅ์ ์ด์๋ค.
๊ทธ๋ฌ๋. ๋์ฒ๋ผ ์๋ชป์ฐ๋ฉด ๋ ์ด๋๋ค.
์๋ฅผ ๋ค์ด. ์บ๋ฆญํฐ์ปจํธ๋กค๋ฌ์ ์ง๋ฉดํ์ ์ด๋ฒคํธ๋ฅผ
ย subject๊ฐ ์๋ค. ์ด๊ฒ์ ๊ธฐ์กด ์บ๋ฆญํฐ์ปจํธ๋กค๋ฌ์ isGroundedํ์ ์ ๋จ์ ์ ๊ฐ์ ํ ๊ฒ์ด๋ค.
GroundObserver.OnFeetOff, GroundObserver.OnLand ๋๊ฐ์ subject๋ฅผ ๊ตฌ๋ ํด์ ์บ๋ฆญํฐ๊ฐ ์ง๋ฉด์์ ๋จ์ด์ก์ ๋,ย
์ง๋ฉด์ ๋ฟ์์ ๋ ์ํ๋ ํจ์๋ฅผ ์๋์ํฌ ์ ์๋ค.ย
private void Awake(){
_groundObserver.OnFeetOff.Subscribe(_ => { ...ย });
_groundObserver.OnLand.Subscribe(_ => { ...ย });
}
์ ๊ฝค ๊น๋ํ๊ณ ์ข์๊ฒ๊ฐ์ง๋ง, ์ ์ฐ๋ฉด ์ข๊ฒ ์ง๋ง ๋๋ ์ด๊ฒ์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์
๋ค๋ฅธ ๋ก์ง๋ค๊ณผ ๊ฒน์ณ์ก์ ๋, ์ด๊ฒ ๋จ๋ ์ผ๋ก ์คํ๋๋ ๊ฒฝ์ฐ ๋๋ฒ๊น ์ด ์ด๋ ค์์ง๊ณ ,
์ฝ๋๊ฐ 2000์ค์ด ๋ ๋, ์คํ ๋ก์ง์ด ์์ฐจ์ ์ผ๋ก ์ฝํ์ง ์๋ ๊ฒ์ด์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ ๊ฒ ๋ถํ์ํ๊ฒ ์ฌ์ฉ๋ unirx๋ฅผ ์ ๊ฑฐํ๋ฉด ์ด๋จ๊น๋ก ์ ๊ทผํ๊ธฐ ์์ํ๋ค.
๊ทธ๋ฌ๋ ๋ฌธ์ ๋ ์ด๋์๋ถํฐ ์ ๊ฑฐํ ์ง ์ฐธ ๋๊ฐํ๋ค.
๊ธฐ์กด ์ฝ๋์์ ์ ๊ฑฐ๊ฐ ์๋๊ณ , ๊ธฐ์กด ์ฝ๋์์ ํต์ฌ์ ์ธ ๋ถ๋ถ๋ง ์ด์ด ๋ค์ด๋ด์ย
์๋ก์ด ์ฝ๋๋ฅผ ๋ค์ ์ธ์๋ณด๊ธฐ๋ก ํ๋ค.
3. partial ํด๋์ค ๋์
ํ์ง๋ง ์๋ฌด๋ฆฌ ์๋ก ์ด๋ค๊ณ ํด๋ ๊ฒฐ๊ตญ์ ๋ช์ฒ์ค์ง๋ฆฌ ์ฝ๋๊ฐ ๋์ด๋ฒ๋ฆด๊ฒ์ด ๋ถ๋ช ํ๋ค.
๊ทธ๋์ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ partial ํด๋์ค๋ก ํ๋์ ํด๋์ค๋ฅผ ์ฌ๋ฌ๊ฐ์ ํ์ผ๋ก ๋ถํ ์ด ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค.
๊ทธ๋์ ํ๋์ ํด๋์ค๋ฅผ ์ฃผ์ ์ ๋ง๊ฒ ์ฌ๋ฌ๊ฐ์ ํ์ผ๋ก ๋ถํ ํ๋ค.
์๋ฅผ๋ค์ด,ย
PlayerController.cs ย - ๋จ์ํ ํด๋์ค๋ง ์ ์ธ, monobehaviour์ ๊ฐ์ข ์ธํฐํ์ด์ค๋ง ์์
PlayerController.SerializedFields.cs - ์ธ์คํํฐ์์ ๋ณด์ด๊ณ ์ถ์ ๋ณ์๋ค๋ง ์ ์
PlayerController.Commands.cs - IPlayerController์ ์ ์๋ ํจ์๋ค๋ง ์ ์
PlayerController.HandleAttacks.cs - ๊ณต๊ฒฉ๊ด๋ จ ๋์๋ค
PlayerController.HandleJump.cs - ์ ํ๊ด๋ จ ๋์๋ค..
..๋ฑ
๊ทธ๋ฆฌ๊ณ unirx๋ก ๊ตฌํํ๋ ๊ธฐ๋ฅ๋ค์ค ๋๋ค์๋ ๋น๋๊ธฐ unitask ํจ์๋ค๋ก ๊ต์ฒดํ๋ค.
์๊น ์์๋ก ๋ค์๋ ์ง๋ฉด ํ์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋๋ถ๋ถ ๋ก์ง ์ค๊ฐ์ย
await UniTask.WaitUntil(() => _groundObserver.IsGrounded);
๊ฐ์ด ์ ๋ํ์คํฌ๋ก ํจ์๋ก ์ง๋ฉดํ์ ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ์ฌ
ํจ์๋ฅผ ์์๋๋ก ์ฝ์ผ๋ฉด ์์ฑ๋ ๋ก์ง์ ์ ์ ์๋๋ก ํ๋ค.
์ด ๊ณผ์ ์๋ย
https://qiita.com/toRisouP/items/af7d32846ab99f493d92
์ด ๊ธ์ ๋ง์ด ์ฐธ์กฐํ๋ค. ๊ตญ๋ด ๋ฒ์ญ๊ธ๋ ์์๋๊ฑฐ ๊ฐ์๋ฐย ์์ฆ ๋ธ๋ผ์ฐ์ ๋ ๋ฒ์ญ ๋ค ์๋๋ ์๊ธ์ ์ฒจ๋ถํจ.
์ฝ๋ฃจํด์ฐ๋ค๊ฐ ์ ๋ํ์คํฌ ์ฐ๋๊น ๋๋ฌด ์ข๋ค.ย
์ฐธ๊ณ ๋ก dotween๋ ์ ๋ํ์คํฌ ์ง์์ด ๋๋ ์์ง ์์จ๋ณธ ์ธ๋ถ์ด๋ค์ ์จ๋ณด๋๋ก ํ์.
์๋ฌดํผ ์ด์ ๋ฆฌํฉํ ๋ง์ 70ํ๋ก์ ๋ ์งํ๋ ๊ฒ ๊ฐ๋ค.
๊ทผ๋ฐ ๊ฒ์์ ๋๋์ฒด ์ธ์ ์์ฑํ ์ ์๋๊ฑธ๊น.
๊ณ ๋๊ฐ๋ง๋ค ํ์ดํ ํด๋ผ - dc App
๊ณ ๋ง์! ์ด๋ฒ์ฃผ๋ด๋ก ๊ผญ ๋ค ๋ฟ์ ์ผ์ง
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๊ทธ๊ฑฐ๋ ์ฐ๋งคํจ์ ๋ด์ฐ๋ฆฌ์ ์ ์ ์ ์ด๋๊น์ง์ธ๊ฐ ๋ผ๊ณ ๊ณ์ ์๊ฐ์ด๋ฌ...
ํด ์ฐ๋ฆฌ๋ชจ๋ ํ์ดํ !