본문 바로가기

게임 개발 공부 정리

[Unity] 2D 게임 따라 만들기 3 - 20 09 24 ~ 20 10 01

타일형 땅 오브젝트에, 박스 콜라이더 컴포넌트가 있고, 플레이어 오브젝트 또한 박스 콜라이더 일시, 플레이어가 걸어갈때 박스 형태의 콜라이더들에 충돌하여 멈추는 오류가 발생하게 된다.

그러므로 플레이어 오브젝트에는 박스 콜라이더보단 캡슐 콜라이더 컴포넌트를 추가하여, 충돌되는 성황을 없앨 수 있다.

 

공기 저항을 이용하여 이동 후 속도를 줄이는걸 구현 하였다면 점프를 구현했을때, 공중에서 내려올때도 공기 저항을 받아 어색한 중력이 구현되게 되는데, 그걸 바꾸는 방법은 다음과 같은 방법이 있다.

 

1) Project Settings > Physics 2D 에서 기본 중력 값을 설정 가능하다.

 

2) RigidBody2D > Gravity Scale : 오브젝트에 적용되는 중력 비율을 0~1까지로 값을 표시하는 건데, 적절하게 수정해준다. 그리고 점프 파워와 그래비티 스케일을 적절히 조절하여 원래의 모습으로 만들어준다.

 

RayCast 

오브젝트 검색을 위해 Ray(빛)을 쏘는 함수

 

Debug.DrawRay(시작위치, 쏘는방향벡터2 or 3, 컬러값)

에디터 상에서만 Ray를 그려주는 함수이다.

컬러값 기본 형태 new Color(a, b, c)

- 녹색 : 0,1,0

 

FixedUpdate에 다음과 같이 코드를 작성하고 게임을 실행 시, 에디터 창엔 다음과 같은 시각 효과가 나타난다.

디버깅을 위해 씬 상에서만 표시해주는거지, 실제로 쏘는것이 아니다.

안 써도 되는 파라미터 값

Physics2D.Raycast(rigid.position, Vector3.down, 레이의 사거리(길이), int layerMask)

길이는 꼭 안줘도 되지만, 단위벡터 길이로 1을 주는게 좋다.

 

RayCastHit2D

Ray에 닿은 오브젝트를 구한다.

distance : Ray에 닿았을때의 거리 값 변수

타입 변수의 콜라이더로 검색한 결과 값이 널인지 아닌지 확인 가능하다.

raycastHit2D의 값을 저장하는 오브젝트는 물리 기반으로 취급 되므로, Collider가 존재하게 되고, Collider안에 네임태그 등이 있다.

따라서 오브젝트를 판별할 수 있다.

name을 사용한 코드이다.

RaycastHit2D는 레이가 한번 관통하면 거기서 끝나게 된다.

그리고, 리지드 바디는 플레이어의 가장 가운데에서 존재하며, RayCast또한 리지드 바디에서 쏘게 된다.

즉. 현재 코드에서는 플레이어 오브젝트의 이름만 무진장 출력하게 되는것이다.

 

LayerMask : 특정한 레이어로 지정한 오브젝트만 카메라에 노출되도록 포함시키거나, 반대로 노출에서 제외되도록 컬링 마스크를 설정할 때 주로 사용된다.

Add Layer를 눌러 Platform 레이어를 새로 만들어주고, 모든 floor 오브젝트를 Platform 레이어로 적용시켜 준다.

LayerMask라는 클래스의 GetMask()라는 함수를 사용해준다

 

GetMask()

레이어 이름에 해당하는 정수값을 리턴하는 함수이다. 레이어 이름을 문자열의 형태로 넣으면 된다.

즉, 피직스2D의 레이캐스트 함수의 int LayerMask 파라미터 부분에 넣을 수 있단거다.

 

 

RayCastHit2D.distance : Ray를 쏜 지점과 맞은 오브젝트간의 거리를 구하는 것이다.

더보기

플레이어의 크기는 1이고, 리지드바디는 정중앙에 위치해 있으며, 리지드 바디에서 Ray를 쏘는것이므로, 0.5보다 작은, 즉 닿였을때를 감지하는것이다.

플레이어 오브젝트를 공중에 띄여놓고, 게임을 실행하면 실행 직후에는 디버그에 아무 출력이 없다가, 플레이어가 땅에 닿으면 땅 옵젝 네임이 출력된다.

 

Animator 컴포넌트

GetBool("Varname") 

애니메이터의 불변수의 값을 가지고 온다.