[시리즈] 날비 팬게임 만들며 공부
· 날뛰는 커비 팬게임 만들며 공부하기 1

이번엔 플레이어용 디디디와 잡몹인 날뛰는 와들디를 만들었음.



7cf3da36e2f206a26d81f6e4428871656a

디디디 디자인은 이 만화에서 따왔음 (ヤオヤ님 디자인)


7ff3d72fe3f206a26d81f6e044837c6ae78b

이런 모습으로.

a14004ad2a0ab4618eff82fb06df231de4faa2302a665680bf

실행시 rigid2D에 리지드바디를 연결시키고 animator에 애니메이터 컴포넌트를 연결한다.

a14004ad2a0ab4618eff83fb06df231d92aa72c4cfa822b44dd8

현재 애니메이터 상황. 기본 상태인 DededeIdle 애니메이션을 재생중.


7ef3d72fe3f206a26d81f6e440817c6877d3b9

걸어다니는 동작.

a14004ad2a0ab4618eff80fb06df231da46ff63009d3e65e8c56

업데이트에서 h에 이동키 입력을 받고 MoveSide 메서드를 반복시킨다


a14004ad2a0ab4618eff81fb06df231d0b7bedf3bd3f80f348ed

추락 속도를 fallSpeed에 저장한다. velocity의 x축에 h를 넣어 이동방향을 저장한다. 

moveSpeed를 곱하고 y축에 fallSpeed를 넣어 이동속도를 계산한다. 이후 rigid2D.velocity에 대입해 움직이게 만든다.


h가 0보다 큰 경우 y축 방향을 0, 0보다 작은 경우 180으로 설정해 걷는 방향을 쳐다보게 만든다.

h가 0인경우 animator의 IsWalk를 false로 바꿔 서있는 모션이 나오게 하고 0이 아닌경우 true로 바꿔 걷는 모션이 나오게 한다.

79f3d72fe3f206a26d81f6e44685736ba72c67

달리는 모습. 귀엽다!

귀여워

달리기는 이동버튼을 연속으로 눌러 작동하게 만들었다.


a14004ad2a0ab4618eff8efb06df231d04019f29099d7479da

연속 클릭 체크. 

Update에서 이동 버튼이 눌릴때마다 IsRunCheck()를 실행시킨다.

clickedTime는 -1.0f로 시작한다. 현재 시간에서 clickedTime를 뺀 값이 interval보다 작을 경우  연속클릭으로 인식하고 IsRun을 true로 바꾼다. 이후 clickedTime을 -1.0f로 초기화한다. interval보다 작지 않은경우 IsRun을 false로 바꾸고 clickedTime에 현재 시간을 대입한다.


MoveSide에서 h가 0일경우 IsRun을 false로 바꿔 한번 멈추면 다시 걷기로 바뀌는것을 구현한다.

IsRun이 true인 경우 moveSpeed를 runSpeed로 바꾸고 animator의 IsRun을 true로 바꾸어 달리기 모션을 실행한다. false일 경우 moveSpeed를 walkSpeed로 돌려놓고 animator의 IsRun을 false로 바꿔 달리기 모션을 취소한다.

78f3d72fe3f206a26d81f6e04e877769a9

점프 모션.

점프 키인 Z를 누르면 Update에서 rigid2D.AddForce를 이용해 위쪽 방향에 jumpForce만큼 곱해 점프시킨다.


MoveSide에서 animator의 velocity.y에 y축 속도를 넣는다. y축 속도가 양수면 점프하는 모습, 음수면 하강하는 모습을 보인다.

7bf3c028e2f206a26d81f6ed43867c68

공격 모션을 참고한 만화. (ヤオヤ님 디자인)

7af3d72fe3f206a26d81f6e14785766c97

공격 모션. 아직은 모션만 있고 공격 판정은 없다. 코드도 공격키인 X를 누르면 Update에서 animator의 IsAtkDefault 트리거를 작동시키는것 뿐이다.


75f3da36e2f206a26d81f6e045817c6b

다음은 잡몹인 날뛰는 와들디. (ヤオヤ님 디자인)


74f3d72fe3f206a26d81f6ec4f82726517

기본 이동모습이다.


a14004ad2a0ab4618eff8ffb06df231ddb65818e3f9204a15176

실행시 rigid2D에 리지드바디 컴포넌트를 연결한다.

monsterTr과 playerTr에 각각 날들디와 Player 태그를 단 오브젝트의 위치를 받는다.

animator에 애니메이터 컴포넌트를 받는다.

a14004ad2a0ab4618eff87e558c12a3a63599a2fe5f91e76ccb4e9

기본 상태인 NaldledeeWalk를 실행중.


IEnumerator인 monsterActionCoroutine에 몬스터의 행동을 구현한 MonsterAction 코루틴을 넣는다.

몬스터의 상태를 판단하는 CheckMonsterState 코루틴과 monsterActionCoroutine을 실행한다.

a14004ad2a0ab4618eff87e458c12a3a6671903da8bfa2f2f5cfc4

CheckMonsterState 코루틴이다. 날들디가 죽지 않고, L어택, R어택 모두 아니라면 MonsterState를 idle로 설정한다.

a14004ad2a0ab4618eff87e758c12a3a4ef020a04dc7db8888b3

MonsterAction의 idle 상태. MoveSide를 실행한다. 어딘가 끼이거나 해서 멈추게 되면 방향을 바꾼다. MoveSide는 날비랑 똑같아 생략.

a65809ab1c2607f43eed858a46891b6cfc95da6a60dc183e0b971079905fde96df98eb06599cb7d01e239a3e95

벽을 마주하면 뒤돌아가는 모습. 이것도 코드는 날비랑 같음.


7ced9e21ecd418986abce8954785706dae04d2

날들디의 나머지 동작들. 공격당하면 뒤로 날라가는 동작과 플레이어를 만나면 빙글 돌다 돌진하는 동작이다.


a14004ad2a0ab4618eff87e658c12a3ab543bbc9555a28684a12f7

우선 피격 동작. 플레이어와 충돌하면 행동 코루틴을 멈춘다. animater의 IsHit 트리거를 작동시켜 피격 애니메이션을 보이고 속도를 0으로 멈춘다. 플레이어와 날들디의 위치를 계산해 플레이어의 반대방향으로 힘을 줘 넉백을 구현했다. 1초 뒤 Invoke를 이용해 행동 코루틴을 다시 시작한다.


a14004ad2a0ab4618eff87e158c12a3a8bbf0351a419db1cd910a3

레이캐스트를 이용해 플레이어를 감지한다. 날들디의 왼쪽과 오른쪽에 각각 레이캐스트를 발사해서 플레이어가 오른쪽에서 감지되면 R어택, 왼쪽에서 감지되면 L어택을 실행한다.

a14004ad2a0ab4618eff87e058c12a3a51116cdc337dd7df8c5e3a

L어택과 R어택은 돌진 방향만 바뀌고 동일하다.

animator의 IsAttack을 true로 해 공격 모션을 실행하고 제자리에 멈춘다. 플레이어를 바라보게 멈추고 일정시간 멈춘다. 플레이어의 방향으로 pushForce만큼의 힘으로 밀고 돌진이 끝날때까지 멈춘다.



디디디 수정해야할것: 

피격모션 추가

공격 구현

공중에서 공격버튼 누르면 땅에 착지한 뒤에 공격모션 나가는것 수정


날들디 수정해야할것:

돌진 거리랑 대기시간 조절

가끔 벽에 닿아도 회전 안하고 벽에 비비는 경우 수정 (어떤 경우에 오류나는지 찾기)

넉백시 벽에 튕기게 넉백?

연속으로 공격당하면 첫번째 피격 루틴에서 행동 코루틴을 실행시키는것 때문에 피격중인데도 행동을 재개하는것 수정


4

어우 학습용으로 작성하는거라 코드 하나하나에 대해서도 써보고있는데 은근 양이 엄청 많네. 혹시나 피드백 해줄거 있으면 편하게 해줘