본문 바로가기
Unity & C# Basics

C#책 공부일지 : Rigidbody, Update, Quaternion, Euler

by 나만두 2023. 10. 26.

RigidBody

콜라이더 컴포넌트에서는 게임 오브젝트가 서로 물리적 공간에 드나드는 시기와 방법뿐만 아니라 충돌 후 튕겨나가는 것까지도 결정한다.

2개의 콜라이더 컴포넌트가 서로 상호작용 할 때, 상호작용의 결과는 리지드바디 속성에 따라 결정된다.

이 두 컴포넌트는 유니티에서 모든 물리적 상호작용과 시뮬레이션된 움직임을 담당한다.       

 

kinematic

키네마틱 이동은 리지드바디 컴포넌트가 게임 오브젝트에 연결될 때 발생하지만 씬의 물리 시스템에는 등록되지 않는다.

즉, 물리적 상호작용은 하지만 실제 벽이 있는 것처럼 반응하진 않는다.

 

non-kinematic 

Transform을 수동으로 변경하는 대신, 힘을  적용해 리지드바디  컴포넌트를 이동하거나 회전하는 것을 말한다.

 

Update

 

Update()

매 프레임 호출되는 기본 Update()함수.

프레임마다 전체 시스템에서 실행되는 작업의 양이 매번 달라 일정하지 않다.

 

FixedUpdate()

호출되는 시간이 일정하도록 보장되는 함수다.

매 프레임마다 일정하게 처리해야하는 물리계산,업데이트,Ray에 주로 사용된다.

Fixed Timestep에 의해 일정한 시간 간격에 따라 호출된다. ProjectSetting에서 확인할 수 있다.

Fixed Timestep를 임의로 변경 가능하지만 너무 작은 수로 두면 성능저하를 초래한다.

 

 

LateUpdate()

Update가 완전히 끝나고 프레임당 한 번 호출되는 함수다.

Update가 끝난 후 호출되기 때문에 주로 카메라에 사용된다.

 

 

Quaternion과 Euler

Euler angle은 x,y,z의 3개 축을 기준으로 360도 회전하는 좌표계이다.

편리하지만 두 개의 회전축이 겹쳐 특정 방향의 회전이 불가능해지는 Gimbal Lock이라는 문제점을 가지고 있다.

따라서 유니티에서는 객체의 rotation 값을 지정할 때, Quaternion을 사용한다.

Quaternion은 x,y,z,w로 이루어져 있다. w는 스칼라를 의미한다.

쿼터니언은 방향과 회전을 둘 다 표현할 수 있다.

Quaternion.Euler

Quaternion.Ealer를 통해 오일러 각을 쿼너니언으로 변경시켜 사용가능하다.

ex) transform.rotation= Quaternion.Euler(new Vector3(10,10,10));

 

Quaternion.LookRotation(Vector3 forward, Vecotr3 upwards=Vector3.up)

//두 번째 인자인 upwards는 Vector3.up으로 디폴트 인자가 세팅되어있다.

첫 번째 인자에 방향벡터를 입력하면 해당 자기 위치기준에서의 해당 방향벡터를 바라보게 된다.

 

Quaternion.Slerp(Quaternion a, Quaternion b, float t)

Slerp함수는 두 쿼터니언의 중간값을 리턴시킨다. 

Slerp함수는 Lerp함수에서 쓰이는 선형보간법이 아닌 구면선형보간법 기반으로 되어있다.

세 번째 인자에 따라 반환값이 다르다.

Lerp는 직선으로, Slerp는 곡선으로 보간된다.

 

 

 

 

 

 

 

 

Player의 움직임 제어, 아이템도 생성했으니

Player가 아이템을 먹으면 아이템이 사라지는 스크립트를 작성한다.

 

 

 

 

 

이후 적을 하나 생성한다. 

 

 

 

 

 

Player가 적에게 가까이 다가갔을 때, 감지되었습니다. 공격하세요를 출력하고,

멀어졌을 때, 범위에서 멀어지고 있다고 출력하는 Enemy스크립트를 작성한다.

 

 

 

 

실행했을 때의 화면이다.