공부/Unity

[Unity] 커비 5일차 스테이지 선택 씬, 별 뱉기, 몬스터의 공격, 플랫폼 처리 (착지할 때만 닿는 바닥)

굴러다니다니 2023. 4. 17. 18:06
728x90

1. 공격중인 몬스터도 흡입 가능

몬스터가 공격중이라면 흡입이 불가했는데, beingInhaled 코드를 뜯어 수정했다.

 

2. cutter enemy 공격 생성

자식개체로 weapon을 만들어 애니메이션에 맞춰 돌아가게 만들었다. 이게 더 간단,,

이런식으로 collider 넣어준 공격  weapon을 날리게 했다 + animation

커터의 공격에 얻어맞은 커비

 

3. 플랫폼

-> 날거나 점프하면 부딪히지 않지만, 착지하면 부딪히는,,,

딱봐도 rigid.velocity.y 가 양수냐 음수냐 나누면 될 거 같아서 식쓰니깐 뭔가 이상했다.

youtube 참고해서 수정했다

https://youtu.be/zKg70oiDFiw

아래 키 누르면 떨어지게 하고싶었는데, 커비 control script와 platform 관련 script가 달라서 coroutine 실행하는 식을 따로 써 불러와서 실행했다

Layer 끼리 비교한 후 kirbycontrol 에서 속도에 따라 실행하는 함수가 다르게 하자

 

4. 스테이지 생성 + 물속 처리

새로운 물 친구가 등장,, 실화니 근데 얕아서 대충 걷는 모션만 연결하고 끝냈다.

물속을 collider로 istrigger를 켜 두고, 만약 플레이어가 들어온다면 animator에서 setbool isWater를 true로 바꾸고 enter하면 false로 바꾸는 식

 

5. Q -> Q down 끌려오는 적은 한마리만

-> 기존의 문제가 근처의 적을 찾는 함수를 GetKey에 연결해서 누르는동안 계속 찾아 여러마리를 다 데려왔는데, GetKeyDown에 넣고 살짝 수정해 한마리만 끌려온다

웨이들디 앞의 블럭을 먹은 커비 (수정하지 않았다면 블럭과 적 둘다 삼켜진다)

 

6. 블록의 상호작용 가능

블록이 생겼다

얘는 기존의 enemycontrol 코드를 재활용해 사실 블록처럼 보이는 적이다 (?)

rigidbody는 안줬고, 움직임도 없는 적이다

빨려들어가는 코드인데, if문으로 블록일 경우 animation 값에대한 부분을 빼주지 않으면 nullreferenceexception뜬다.

 

enemycontrol에서 type을 만들어 값이 10이면 block이라고 수정했고, 

커비가 먹을수 있고, 삼킬수도 뱉을수도 있다

뱉으면 물리적 충격을 가할 수 있는 별이 나온다

블록은 삼켜지거나 원래의 레이어로 돌아가기밖에 못한다

 

7. 별 뱉고 부딪히기

적이든 블록이든 먹었으면 뱉어서 별을 발사할 수 있다.

이 나온 별은 벽과 안부딪히지만 적과 부딪힌다.

 

7-1 별 애니메이션 새로 짜기

기존의 돌아가는 별 애니메이션이 마음에 안들어서 새로 짰다

귀찮아서 circle collider넣고 돌린모습 ㅋㅋ

 

7-2 별의 속성을 player의 weapon layer로 넣어 별도로 지정하지 않아도 enemy가 부딪히면 weapon으로 인식해 피가 닳는다. 별의 change값은 0으로 만들어 삼켜도 아무 일도 없게 한다.

추가로 다른 적들을 먹어도 뱉을때 별이 나온다

별은 안보이지만 (맞아서 사라짐) 적이 아파한다 오케이

 

8. 체력 회복 아이템을 만들었다

물리적으로 안움직이면 좋겠어서 그냥 collider넣고 istrigger처리해서 

istriggerEnter해서 플레이어랑 부딪히면 플레이어의 gamemanager의 hp값을 올린다.

간단해서 스크립트는 스킵

 

9. 스테이지 고르는 씬 생성 + 좌우로 와리가리 + gamemanager 수정

일단 gamemanager에 마지막의 커비의 체력과 능력을 다시 담게 해, 스테이지 선택 창에서도 이를 유지하게 했다.

 private Vector3[] positions = { new Vector3(-1.17f, -0.484f, 0), new Vector3(0.058f, -0.696f, 0), new Vector3(1.197f, -0.215f, 0) };

식으로 커비가 서있을 수 있는 곳의 좌표를 배열에 넣어 지정해버렸다.

우클릭시 currentPosition += 1 해서 positions[currentPosition] 하는 느낌

 

싱글톤 선언한 게임매니저에 각 스테이지 깬 현황을 담았다.

이를 들고와 조건문을 작성하면 끝

해당 스테이지에서 스페이스바를 누르면 게임 화면으로 넘어간다

728x90