๋ค๋ฅธ๊ฑฐ๋ ๋น๊ตํ๋ฉฐ์ ๋ง๋ค์ด์ ์ผ๋จ ์ด๋ฏธ์ง ์บ๋ฆญํฐ ์ด๋ฏธ์ง๋บด๊ณค ์์ ํ ๋ค ๋๊ฐ๊ฑฐ๋ ์?
๊ทผ๋ฐ ์บ๋ฆญํฐ๊ฐ ์ ํํด์ ๋ค๋ฅธ ์ฅ์ ๋ฌผ๋ก ์ฌ๋ผ๊ฐ๋ฉด ์ ํ๊ฐ ์๋ฉ๋๋ค.. ์ ํํค๊ฐ ์๋จน์ด์.
์๋ณธ์คํฌ๋ฆฝํธ ๊ทธ๋๋ก ๊ธ์ด์จ๊ฑด๋ฐ.. ์ด์ ๊ฐ ๋ญ์ง์? ์์๊ฐ๋ ๋ฌธ์ ์ ์์ผ์ ๊ฐ์?
๋ง๋ ์บ๋ฆญํฐ์ด๋ฏธ์ง ์ ์ ์ฉ๋๋์ง ํ์ธํด๋ณด๋ ค๊ณ ํ๋ก์ ํธ ํ๋ํ์ ์๋ณธ์ด๋ ๋๊ฐ์ด ํ๋๋ฐ.. ์ปดํฌ๋ํธ๋ผ๋์ง ์์ค๋ผ๋์ง..
์ ์๋๋๊ฑฐ์ง.. ์ฒซ์ฅ์ ๋ฌผ์์๋ ์ ํ๊ฐ ๊ณ์ ์๋๋๋ฐ ๋ค๋ฅธ ์งํ์ผ๋ก ์ ํํด์ ์ฌ๋ผ๊ฐ๋ฉด ๋ฐฉํฅํค๋ ์ ํํค๊ฐ ์๋จน๊ณ
๊ณต๊ฒฉํด์ผ์ง ๊ทธ์ ์์ผ ๋ฐฉํฅํค๋ง ๋จน์..
float jump = Input.GetAxis("Jump");
if(jump > 0.0f)
{
if(onStateChange != null)
onStateChange(PlayerStateController.playerStates.jump);
}
---------------------------------------------------------------
case PlayerStateController.playerStates.jump:
if (playerlanding)
{
// ํ๋ ์ด์ด๊ฐ ์ผ์ชฝ/์ค๋ฅธ์ชฝ/์์ชฝ์ผ๋ก ์ ํํ ์ง๋ฅผ ์ง์
float jumpDirection = 0.0f;
if (currentState == PlayerStateController.playerStates.left)
jumpDirection = -1.0f;
else if (currentState == PlayerStateController.playerStates.right)
jumpDirection = 1.0f;
else
jumpDirection = 0.0f;
// ์ค์ ๋ก ์ ํํ๋ ํ์ ์ ์ฉ
rigidbody2D.AddForce(new Vector2(jumpDirection * playerJumpForceHorizontal, playerJumpForceVertical));
playerlanding = false;
// ํ์ด๋จธ๊ฐ 0์ด๋ฉด ์คํX = ์ ํ ํ์ฉ X
PlayerStateController.stateDelayTimer[(int)PlayerStateController.playerStates.jump] = 0f;
}
break;
case PlayerStateController.playerStates.landing:
playerlanding = true;
// ์ฐฉ์ง ์ผ์ด๋ ํ 0.1 ์ดํ์ ๋ค์ ์ ํ ํ์ฉ
PlayerStateController.stateDelayTimer[(int)PlayerStateController.playerStates.jump] = Time.time + 0.1f;
break;
case PlayerStateController.playerStates.falling:
PlayerStateController.stateDelayTimer[(int)PlayerStateController.playerStates.jump] = 0.0f;
break;
-----------------------------------------
case PlayerStateController.playerStates.jump:
ย ย ย ย ย ย ย ย // ์ ํ ์ํ์์ ๋์๊ฐ ์ ์๋ ์ํ๋ landing(์ฐฉ์ง)์ด๋ kill๋ฟ
ย ย ย ย ย ย ย ย if ( newState == PlayerStateController.playerStates.landing || newState == PlayerStateController.playerStates.killย
ย ย ย ย ย ย ย ย ย ย || newState == PlayerStateController.playerStates.weapon )
ย ย ย ย ย ย ย ย ย ย returnVal = true;
ย ย ย ย ย ย ย ย else
ย ย ย ย ย ย ย ย ย ย returnVal = false;
ย ย ย ย ย ย ย ย break;
ย ย ย ย ย ย case PlayerStateController.playerStates.landing:
ย ย ย ย ย ย ย ย // ์ฐฉ์ง ์ํ์์ ๋์ด๊ฐ ์ ์๋ ์ํ๋ idle, left, right ์ํ
ย ย ย ย ย ย ย ย if ( newState == PlayerStateController.playerStates.left || newState == PlayerStateController.playerStates.right || newState == PlayerStateController.playerStates.idle
ย ย ย ย ย ย ย ย ย ย || newState == PlayerStateController.playerStates.weapon )
ย ย ย ย ย ย ย ย ย ย returnVal = true;
ย ย ย ย ย ย ย ย else
ย ย ย ย ย ย ย ย ย ย returnVal = false;
ย ย ย ย ย ย ย ย break;
์บ๋ฆญํฐ์ ์ ํ๊ฐ ์ง๋ฉด์ ๋ฟ๋ ์ํ(๋์ด 0)์ผ ๋๋ง ์คํ ๊ฐ๋ฅํ๋๋ก ์กฐ๊ฑด๋ฌธ์ ์ง์ ๊ฒ ์๋๊น ์ถ์ต๋๋ค.
ํ๋ ๋ณธ๋ฌธ ์์ค ์์ ํ๋๋ฐ ์ข ๋ด์ฃผ์๊ฒ ์ด์?
๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์์ค๋ฅผ ๊ธ์ด์จ๊ฑด๋ฐ ์๋ณธ์ ๋๊ณ ์ ๋ ์ ์๋๋๊ฑด๊ฐ์?
์ ๊ทธ๋ฆฌ๊ณ ๋ง์์๋๋ฆฐ๊ฒ ์๋๋ฐ, ์งํ์ด - _ ใ ก ์ด๋ ๊ฒ ์ธ๊ฐ๊ฐ ์์ผ๋ฉด ๊ฐ์ด๋ฐ์์๋ ์ ํ๊ฐ ๊ณ์ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋๊น ์ค๋ฅธ์ชฝ์ผ๋ก ๋์ด๊ฐ๋ค๊ฐ ์ผ์ฏ์ผ๋ก ๋ค์ ๋ด๋ ค์ค๋ฉด ์ ๊ฐ์ด๋ฐ์์๋ ์ ํ๊ฐ ๊ณ์ ๊ฐ๋ฅํด์..
switch(PlayerStateController.playerStates) { .. ์๋์๋์ชฝ .. case PlayserStateController.playerStates.landing: /* ์ด ๋ถ๋ถ์ด ๋ฌธ์ ์ผ ๊ฒ ๊ฐ์์. */ .. }
์ค๋ฅธ์ชฝ->์ผ์ชฝ->๊ฐ์ด๋ฐ ์ ํ๊ฐ๋ฅ // ์ด๊ฒ ๋ฌด์จ ๋ป์ธ์ง ํ ์คํธ๋ง์ผ๋ก๋ ์..ใ ใ
์ผ๋จ ๋ค๋ฅธ ์งํ์ ์ฌ๋ผ๊ฐ์ ๋๋ landing์ํ๊ฐ ๋๋์ง ํ ๋ฒ ์ดํด๋ด์ฃผ์ธ์.
ํ๋ ์ฃ์กํ์ง๋ง ์ ๊ฐ ์ด๋ณด์๋ผ ๊ทธ๋ฐ๋ฐ.. ๋ค๋ฅธ์งํ ์ฌ๋ผ๊ฐ์๋๋ landing ์ํ๊ฐ๋๋์ง๋ ์ด๋ป๊ฒ ์์์๋์?
๊ทธ๋ฆฌ๊ณ ์ค๋ฅธ์ชฝ ์ผ์ชฝ ๊ฐ์ด๋ฐ ์ ํ๊ฐ๋ฅ์ ์ฃผ์ ๋ง์ํ์๋๊ฑฐ ๊ฐ์๋ฐ..์ ๊ฒ ๊ทธ ์ ํ๋ผ๋๊ฒ ์ ์๋ฆฌ ์ ํ๋ง๊ตฌ ์์ง์ด๋ฉด์๋ ์ ํ ํ ์์๋ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ ๋๋ค..!
์ ๋ํฐ debug.log๋ฑ์ผ๋ก ํ์ธํ์๊ฑฐ๋, ์ค์๊ฐ ์๊ฐ์ ๋๋ฒ๊น ์ ์ํ์ ๋ค๋ฉด landing์ํ์ผ ๋๋ landing:true ์๋๋ผ๋ฉด landing:false ์ด๋ ๊ฒ ํ๋ฉด์ ํ ์คํธ๋ฅผ ๋์๋ณด์ธ์. debug.log ์ฌ์ฉ๋ฒ์ ๊ฒ์ํ์๋ฉด 30์ด๋ง์ ์ ์ด๊ฑฐ๊ตฌ๋! ํ์ค ์ ์์ด์.
์ ์ ์๋ง์ ํ๋ฒ ํด๋ณด๊ฒ ์ค๋น๋ค. ํ๋ ๊ทธ๋ฐ๋ฐ ๊ถ๊ธํ๋ฐ ๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅด ์ฐ๋๋ฐ ์ด๋ฌํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์ด์ ๊ฐ ์๋์?
๊ฐ์ด๋ ์์ฑ์ ๋ถ๊ป์ "์ ์ด ๋ ์ด๋ฐ ๋ฒ๊ทธ๋๋ค?"ํ๊ณ ๋ค๋ฆ๊ฒ ์์ ํ์ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ์ง ์์ผ์ ์ ๊ทธ๋ ์ง ์์๊น์ ใ _ใ /
ํ๋ ๊ทธ Debug.log ๊ทธ๋ฅ ์๋ฌด ํจ์์๋ค๊ฐ ๋ฃ์ผ๋ฉด ๋๋์? ์ด๋ค ๋ธ๋ก๊ทธ์๋ Start ํจ์์ ๋ฃ๋๋ฐ..์ด๊ฒ ๋ง๋์ถ์ด์์..
์ฝ์์ฐฝ๋ณด๋ ํ์ฌ์์น๊ฐ ๊ณ์ ์๋ํ๋์ ๊ทธ๋ฅ 0.0, 1.1, 0.0 ์ผ๋ก๋ง ๋ํ๋๋ค์
์ฌ๊ธฐ๊บผ ์ฐธ๊ณ ํ์ด์
http://itmining.tistory.com/39
playerStates ๊ฐ jump -> falling -> landing ์ผ๋ก ๋ฐ๋๋ฉด์ ์์ฐจ์ ์ผ๋ก ์งํ๋๋ ๊ฑฐ ๊ฐ์๋ฐ ์ ๋ ฅ ๋ฐ๋ ๋ถ๋ถ์์ jump ๋ก ๊ณ์ ๋ฐ๊ฟ์ฃผ๋๊ฒ ์๋๊ฐ ์ถ์. landing ์์ playerlanding ๊ฐ์ ๋ค์ true ๋ก ์ค์ ํด์ฃผ๋๋ฐ landing ์ผ๋ก ๊ฐ๊ธฐ์ ์ jump ์ํ๋ก ๊ฐ๋ฉด ๋ค์ true ๊ฐ์ผ๋ก ์ค์ ์ ๋ชปํ๊ธฐ ๋๋ฌธ์.
jump ์์ ์๋ฌด๊ฒ๋ ๋ชปํ๊ณ ๋จนํต์ด ๋๋ ๊ฒ ๊ฐ์
์ ๋ ฅ ๋ฐ๋ ๊ณณ์์ playerlanding ์ด false ์ด๋ฉด ์งํ ์ํ๊ฒ ํด๋ด~
์ ์๋ ์ข ๋ ์ ํํ๊ฒ ๊ฐ๋ฅํ์ค๊น์?ใ ใ
float jump = Input.GetAxis("Jump"); if(jump > 0.0f && playerlanding)
์ ์๋ playerlanding ์ด๋ผ๋ ๊ฑด ์์ด์ ๊ทธ๋ฐ๋ฐ player ์ด๋ป๊ฒ ๋ํ๋ด์ผํ๋์ใ
case PlayerStateController.playerStates.jump: if (playerlanding) <- ์ ๋ณ์. ์ฌ๊ธฐ ์๋ playerlanding ๋ณ์๋ฅผ ์ป์ด์์ ๋ฃ์ด์ผ ํ๋๋ฐ ๋๋ ์คํฌ๋ฆฝํธ ๊ตฌ์ฑ์ ๋ชจ๋ฅด๋ ์ด๋ป๊ฒ ์ป์ด์์ผ ํ ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค
ํ ใ ใ
ํ๋ ์๋ ๋๊ฐ๋ ๊ฐ์ ์คํฌ๋ฆฝํธ ํ์ผ์ด๊ณ ๋งจ์ ๋ง ๋ค๋ฅธ ์์คํ์ผ์ ๋๋ค.
playerlanding์ private์ผ๋ก ์ ์ธ๋์ด์์ต๋๋ค
ํด๋น ๋ณ์๋ฅผ ์ป์ด์ค๊ธฐ ํ๋ค๋ค๋ฉด case PlayerStateController.playerStates.landing: playerlanding = true; ์ด๋ค์์ผ๋ก ํธ์ถ๋๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ด ๋ถ๋ถ์ ์ฝ๋๊ฐ ์ ํธ์ถ๋๊ฒ ํ๋๊ฒ ์ค์ํ ๊ฑฐ ๊ฐ์
์ ใ ใ ๋ฏธ์น๊ฒ ๋ค์ ใ ใ