2. 3D 물체의 회전
3D 세계에서의 물체 회전 이론은 꽤나 복잡합니다.
수의 체계에서 실수의 확장 층인 복소수를 다시 4개의 원소로 나눠 복소평면에서 물체의 회전을 구현합니다.
이를 ‘쿼터니언(사원수)’라고 부르고, 물체의 회전 방법 중 하나 입니다.
위 식의 𝒒 𝟎, 𝒒 𝟏, 𝒒 𝟐, 𝒒 𝟑 은 실수이고, 𝒊, 𝒋, 𝒌 는 복소수이고 복소평면이 확장 된 3차원 공간에서 직교하는 단위벡터입니다.
( 2 / 13)
실수
실수
허수
무리수
유리수
정수 아닌 유리수
정수
음수 (음의 정수)
자연수 (양의 정수)
0
순환소수
유한소수
복소수사원수
𝒒 = 𝒒 𝟎 + 𝒒 𝟏 𝒊 + 𝒒 𝟐 𝒋 + 𝒒 𝟑 𝒌
3. 고질적인 문제
물체를 회전하는 x, y, z는 서로 구조 계층을 이루고 있는데 회전을 하다가 위 사진과 같이
부모와 자식이 겹쳐버리는 현상인 짐벌락(Gimbal Lock) 현상이 발생할 수 있습니다.
위 방법은 쿼터니언과 비슷한 회전 방법인 ‘오일러(Euler)’ 회전이고, 짐벌락 현상이 자주 발생하는 방법 중 하나입니다.
이 현상을 해결하는 방법 중 두 회전 방법에서는 쿼터니언이 제일 최적화 되어있습니다.
( 2 / 13)
#짐벌락 (Gimbal Lock) 현상
4. 활용 및 설계 - 1
쿼터니언을 이용한 회전을 구현해보겠습니다.
위와 같이 새로운 C# 스크립트를 만들고 위와 같이 코드를 작성해봅니다.
쿼터니언은 이전 장에서 설명하듯이 사용자 입력이 불가한 3차원 정규화 된 벡터 값을 받아 판별하고 움직이기 때문에
직접 벡터의 차를 구하여 정규화 시켜 쿼터니언을 이용합니다.
( 2 / 13)
# 쿼터니언(Quaternion) 구현
5. 활용 및 설계 - 2
직접 제작한 스크립트를 카메라에 Add Component 혹은 드래그로 부착한 뒤
앞서 매개변수로 넣은 target에 자동차를 직접 넣어줍니다.
이후 게임을 실행하여 자동차를 움직여 보면 자동차를 정확하게 쳐다보는 카메라가 구현되어 있습니다.
사용자 입력이 불가한 대신에 이후로는 간단하게 작성 할 수 있는 쿼터니언입니다.
( 2 / 13)
# 카메라에 스크립트 부착 # 카메라가 자동차를 쳐다본다.
6. 물리엔진을 원 클릭으로 - 1
유니티가 제공하는 컴포넌트는 매우 많습니다.
그 중에 ‘Rigid Body(강체)’ 라는 컴포넌트는 유니티의 꽃인 물리엔진이 작동하게끔 구현하는 역할을 하고 있는데요.
사용 방법은 위 사진과 같이 원하는 객체에 Add Component로 부착하기만 하면 됩니다.
( 2 / 13)
7. 물리엔진을 원 클릭으로 - 2
게임 플레이를 해보면 이후 데굴데굴 굴러가는 상자를 볼 수 있습니다.
이러한 객체의 물리법칙은 유니티에서 자체적으로 제작된 것이 아니라 ‘nVIDIA Physics’ 기반
수학적 모델에 입각하여 채택 된 물리엔진입니다.
하지만 우리는 단순히 원클릭으로 사용할 수 있습니다. 모두 구현되어 있으니까요!
( 2 / 13)
# 굴러가는 상자
8. 충돌 처리 - 1
물리 엔진만 덩그러니 있다면 재미 없으니까 활용해보겠습니다.
충돌 처리를 구현 해볼텐데 앞서 새로 만든 구체와 벽의 컴포넌트를 보시면 Collider가 붙어있는 것을 확인할 수 있습니다.
이로서 두 물체가 닿게 되는 순간 콜백(Callback) 함수를 스크립트 내부적으로 불러들일 수 있습니다. 실시간으로요.
조건은 서로 닿는 두 물체의 Collider가 컴포넌트로 존재해야 합니다.
( 2 / 13)
# 원의 충돌 처리 컴포넌트 # 박스의 충돌 처리 컴포넌트
9. 충돌 처리 - 2
스크립트를 새로 만들고 위와 같이 코드를 적어봅시다.
앞서 말했듯이 OnCollisionEnter는 유니티 자체적으로 지원되는 콜백 함수입니다.
충돌체가 닿는 순간 어떤 충돌체인지 인자값을 받아 식별할 수 있게끔 구성되어 있습니다.
아까 만든 벽(wall)에 닿으면 출력이 되게끔 만들고 구체에 스크립트를 붙여봅니다.
( 2 / 13)
# 충돌 콜백 함수 (OnCollisionEnter)
10. 충돌 처리 - 3
벽과 충돌하는 순간 콜백 함수가 스크립트 내부적으로 실행되어 우리가 만든 조건대로 출력되는 것을 볼 수 있습니다.
이러하여 충돌체의 상호작용은 내부 콜백 함수로 구현하는 것이고 조건 또한 사용자가 걸 수 있어 편리합니다.
이상 Rigid Body와 Collider의 대한 것들을 알아보았습니다.
( 2 / 13)
# 벽과 충돌
# 출력