반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Unwound Developer

유니티 - 슈퍼마리오, 플레이어 컨트롤 본문

Unity/Unity, C#

유니티 - 슈퍼마리오, 플레이어 컨트롤

unwind 2022. 1. 28. 17:26
반응형

이번엔 플레이어 스크립트를 봐볼게요.

 

아직 계속 작성중인 스크립트라 미완성이긴 합니다.

 

원래 유튜브를 보고 했을 땐 전부 RayCast를 이용해 오브젝트간 상호작용을 구현했는데,

전 최대한 유니티의 유틸리티를 사용하고 싶어서, collider와 rigidbody 컴포넌트를 사용하는것으로 바꿨어요.

 

변수들

bool 변수들은 player가 현재 어떤상태인지를 알려줍니다.

그 외에는 점프의 세기 같은 이런거네요.

enum을 이렇게 선언하면 안에 선언된 애들로 상태를 관리할 수 있어요.

bool형 변수들도 있는데 이건 없어도 될 것 같기도 한데요?

PlayerPositionUpdate 메소드
PlayerPositionUpdate 메소드

UpdatePlayerPosition 메소드는 player를 실제로 움직이게 하는 기능을 가져요.

메소드 안에는 단순한 움직임을 구현한 것들이에요.

 

하지만, 입력을 받는 메소드를 별개로 빼놨습니다.

CheckPlayerInput 메소드

입력과 실제 움직임을 개별적으로 구현해놓으면 나중에 동작을 추가할 때 편할 것 같아요.

 

UpdateAnimationStates 메소드

아까 선언했던 bool형 변수들을 통해 현재 상태가 어떤상태인지 구분하고, 그에 맞는 애니메이션을 동작합니다.

 

OnCollisionStay2D 메소드

OnCollision 메소드에는 여러가지가 있는데, Stay 메소드는 오브젝트가 서로 닿아있는 동안 계속 실행됩니다.

 

충돌한 상대 오브젝트가 Enemy가 아니고, 충돌한 부분의 법선벡터가 0.9이상이라면 땅에 서있다고 판단하는 것입니다.

법선 벡터가 0.9이상이라고 하면, 아주아주 완만한 비탈길이 아닌이상, 땅바닥만을 잘 골라서 판단하더라구요.

 

OnCollisionEnter2D 메소드

우선 위의 조건문은 QuestionBlock. 즉, 물음표 박스에 닿았음을 판별합니다.

QuestionBlock 판별

 주석에 써있는대로 실제 충돌 지점이 조금 낮게 나옵니다.

예를들어, 이 마리오의 머리 위치가 (3,2)라고 해봐요.

물음표 상자가 (3,2)의 위치로 와서 충돌 했다면, 충돌 지점의 y좌표는 2가 되어야하지만,

실제로 2보다 아주 살짝 작은 1.995 이런식으로 나오더라구요.

그래서, 0.01정도의 여유를 둬 범위를 준 것이에요. 1.99~ 2.0 사이에서 충돌했다면 이런식으로.

 

QuestionBlockBounce는 물음표상자를 머리로 박았을때 상자가 살짝 떠올랐다 제자리로 오게하는 메소드이구요.

 

 

Enemy의 경우에도 물음표박스와 마찬가지로 여유를 두고 범위를 줬습니다.

 

OnCollisionExit2D

Exit 메소드는 충돌한 오브젝트와 떨어질 때 발동해요.

저 Debug는 그냥 확인용으로 콘솔에 출력하는 것이구요.

grounded를 false로 한다는건, 캐릭터가 땅에 닿아있지 않다는 것을 알려요.

 

플레이어 스크립트도 여기까지입니다.

반응형