본문 바로가기

게임 개발 공부 정리

[Unity] 2D 게임 따라 만들기 2 - 20 09 22 ~ 23

플레이어 이동 - Rigidbody2D

. AddForce(Vector2, ForceMode)

Rigidbody 또는 Rigidbody2D 컴포넌트에 있는 함수이다.

정해진 힘의 값 만큼, 더하여 속도를 높여서 오브젝트를 이동 시킨다.

힘의 값은 백터의 값 만큼 이며, ForceMode로 힘을 주는 방식을 정할 수 있다.

- ForceMode

-- . Force(질량 적용) : 연속적인 힘을 가하기 때문에 임펄스에 비해서 매우 적은 힘이다.

-- . Impulse(질량 적용) : 순간적인 힘을 가하므로, 포스보다 훨씬 강한 힘을 준다.

 

Rigidbody2D.AddForce()를 FixedUpdate에서 적용시키는 이유

Update에서 사용할 시, 각 컴퓨터 사양에 따른 프레임 단위에서 적용시키기 때문에, 이동량이 차이가 나기때문에, 항상 일정한 FixedUpdate에서 적용시킨다.

 

. velocity

리지드바디의 현재 속도 벡터 값을 가지고 있다.

자신이 원하는 x, y 중 하나를 가지고 오면 된다.

 

public 변수의 이점

게임을 테스트 하는 도중에 인스펙터 창에서 노출된 변수의 값을 바꿀수 있기 때문에, 실행중에 다양한 케이스 테스트를 하기에 용이하다.


Time.deltaTime

이전 프레임의 완료까지 걸린 시간이다.

값은 프레임이 적으면 크고, 크면 작다

컴퓨터의 성능에 따라 프레임이 달라서, 사용자마다 이동한 거리가 달라지는 문제가 생긴다.

이걸 해결하기 위해 동등한 값을 같게 해준다.

 

Update()내에 transform으로 지속적인 이동하는 로직은 들어간다라고 생각하시면 된다.

FixedUpdate()내에 rigidbody로 지속적인 이동하는 로직은 보통 deltaTime을 사용하지 않으나, 모바일 기기를 고려해 Time.fixedDeltaTime을 사용하는 경우도 있다.


Physics Maetrial 2D 에셋

Friction(마찰력)

Bounciness(탄성력)


Box Collider

충돌 영역을 설정하는 것이므로, 마찰력을 설정할 수 있다. 


RigidBody2D 인스펙터

Linear Drag : 컴포넌트가 적용된 오브젝트의 공기 저항을 설정한다. 플레이어가 이동시 느리게 해주지만, 크게 설정하면 공중에서 떨어질때도 가속도가 작아지게 되므로, 작게 설정해줘야만 한다.


기타

 

꾹 누르는 지속적인 키 입력은 FixedUpdate에서 하지만, 단발적인 키입력은 픽스업데이트에서 하면 씹히는 경우가 있기 때문에, 그냥 업데이트 함수에서 받는다.

 

rigid.velocity > 벡터 값이다.

rigid.velocity.x / .y :로 x값까지 들어갈 수 있다.

벡터 값을 1로 바꿔줄려면 노말라이즈

 

Normalized : 벡터 크기를 1로 만든 상태 (단위 벡터)

현재 방향에 따라서 -1, 0, 1을 반환한다.

값이 -991이면 -1로, 가만히 있으면 0, +any num이면 1을 반환한다.

쉽게 말해서 rigid.velocity.Normalized를 쓴다는건, 현재 오브젝트의 방향이 왼쪽인지, 가만히 있는지, 오른쪽인지를 구할때 사용한다.

노말라이즈를 사용하지 않으면, 판단하기가 어렵다.

 

각 축의 방향에 따른 노말라이즈 값을 구하기

rigid.velocity.Normalized.x / .y


애니메이션 순환(체인지)

Sprite Renderer - Flip x, y, z (on/off) : x, y, z 방향으로 뒤집는 것이다.

 

Transition : 애니메이션 상태를 옮겨가는 통로

 

Animator 탭의 State 마우스 오른쪽 클릭 - Make a Transtion으로 트랜지션을 변경할 수 있다.

 

애니메이터 매개 변수 : 상태를 바꿀 때 필요한 변수

 

트랜지션 인스펙터

트랜지션 화살표를 클릭하여 인스펙터창에서 다양한 것을 변경할 수 있다

타임라인

두 애니메이션 사이를 넘어갈때 부드럽게 바꿔주는건데, 2D에서는 크게 안쓰인다. 즉각 바꿔주면 되기에 파란색 지정범위를 없애면 된다.

 

Has Exit Time : 애니메이션이 진행 중일때, 다음 애니메이션으로 넘겨야 할때가 오면 진행중인 애니를 끝날때까지 상태를 유지시키고 넘길건지 안그럴건지 체크하는 것이다.

 

Animator 클래스 - SetBool("변수 이름", 불)

 

Mathf 수학 관련 클래스

- .Abs() : 괄호 안의 값의 절댓값을 반환한다.