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

More Related Content

PPTX
Unity cookbook 4
PPTX
Unity cookbook 8
PPTX
Unity cookbook 2
PPTX
쿼터니언
PPTX
Unity cookbook 21
PPTX
Unity cookbook 20
PPTX
Unity cookbook 19
PPTX
Unity cookbook 18
Unity cookbook 4
Unity cookbook 8
Unity cookbook 2
쿼터니언
Unity cookbook 21
Unity cookbook 20
Unity cookbook 19
Unity cookbook 18

More from Jihun Soh (13)

PPTX
Unity cookbook 17
PPTX
Unity cookbook 16
PPTX
Unity cookbook 15
PPTX
Unity cookbook 14
PPTX
Unity cookbook 13
PPTX
Unity cookbook 12
PPTX
Unity cookbook 11
PPTX
Unity cookbook 10
PPTX
Unity cookbook 9
PPTX
Unity cookbook 7
PPTX
Unity cookbook 6
PPTX
Unity cookbook 5
PPTX
Unity cookbook 1
Unity cookbook 17
Unity cookbook 16
Unity cookbook 15
Unity cookbook 14
Unity cookbook 13
Unity cookbook 12
Unity cookbook 11
Unity cookbook 10
Unity cookbook 9
Unity cookbook 7
Unity cookbook 6
Unity cookbook 5
Unity cookbook 1
Ad

Unity cookbook 3

  • 1. UNITY COOKBOOK SHOT BY. INS PART 3 ( 1 / 13)
  • 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) # 벽과 충돌 # 출력
  • 11. End