unity cookbook 3

11
UNITY COOKBOOK SHOT BY. INS PART 3 ( 1 / 13)

Upload: jihun-soh

Post on 15-Apr-2017

61 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Unity cookbook 3

UNITY COOKBOOKSHOT BY. INS

PART 3

( 1 / 13)

Page 2: Unity cookbook 3

3D 물체의 회전

3D 세계에서의 물체 회전 이론은 꽤나 복잡합니다 .수의 체계에서 실수의 확장 층인 복소수를 다시 4 개의 원소로 나눠 복소평면에서 물체의 회전을 구현합니다 .이를 ‘쿼터니언 ( 사원수 )’ 라고 부르고 , 물체의 회전 방법 중 하나 입니다 .위 식의 은 실수이고 , , , 는 복소수이고 복소평면이 확장 된 3 차원 공간에서 직교하는 단위벡터입니다 .

( 2 / 13)

실수실수허수

무리수유리수 정수 아닌 유리수

정수음수 ( 음의 정수 )

자연수 ( 양의 정수 )0

순환소수유한소수

복소수사원수

𝒒=𝒒𝟎+𝒒𝟏 𝒊+𝒒𝟐 𝒋+𝒒𝟑𝒌

Page 3: Unity cookbook 3

고질적인 문제

물체를 회전하는 x, y, z 는 서로 구조 계층을 이루고 있는데 회전을 하다가 위 사진과 같이부모와 자식이 겹쳐버리는 현상인 짐벌락 (Gimbal Lock) 현상이 발생할 수 있습니다 .위 방법은 쿼터니언과 비슷한 회전 방법인 ‘오일러 (Euler)’ 회전이고 , 짐벌락 현상이 자주 발생하는 방법 중 하나입니다 .이 현상을 해결하는 방법 중 두 회전 방법에서는 쿼터니언이 제일 최적화 되어있습니다 .

( 2 / 13)

# 짐벌락 (Gimbal Lock) 현상

Page 4: Unity cookbook 3

활용 및 설계 - 1

쿼터니언을 이용한 회전을 구현해보겠습니다 .위와 같이 새로운 C# 스크립트를 만들고 위와 같이 코드를 작성해봅니다 .쿼터니언은 이전 장에서 설명하듯이 사용자 입력이 불가한 3 차원 정규화 된 벡터 값을 받아 판별하고 움직이기 때문에직접 벡터의 차를 구하여 정규화 시켜 쿼터니언을 이용합니다 .

( 2 / 13)

# 쿼터니언 (Quaternion) 구현

Page 5: Unity cookbook 3

활용 및 설계 - 2

직접 제작한 스크립트를 카메라에 Add Component 혹은 드래그로 부착한 뒤앞서 매개변수로 넣은 target 에 자동차를 직접 넣어줍니다 .이후 게임을 실행하여 자동차를 움직여 보면 자동차를 정확하게 쳐다보는 카메라가 구현되어 있습니다 .사용자 입력이 불가한 대신에 이후로는 간단하게 작성 할 수 있는 쿼터니언입니다 .

( 2 / 13)

# 카메라에 스크립트 부착 # 카메라가 자동차를 쳐다본다 .

Page 6: Unity cookbook 3

물리엔진을 원 클릭으로 - 1

유니티가 제공하는 컴포넌트는 매우 많습니다 .그 중에 ‘ Rigid Body( 강체 )’ 라는 컴포넌트는 유니티의 꽃인 물리엔진이 작동하게끔 구현하는 역할을 하고 있는데요 .사용 방법은 위 사진과 같이 원하는 객체에 Add Component 로 부착하기만 하면 됩니다 .

( 2 / 13)

Page 7: Unity cookbook 3

물리엔진을 원 클릭으로 - 2

게임 플레이를 해보면 이후 데굴데굴 굴러가는 상자를 볼 수 있습니다 .이러한 객체의 물리법칙은 유니티에서 자체적으로 제작된 것이 아니라 ‘ nVIDIA Physics’ 기반수학적 모델에 입각하여 채택 된 물리엔진입니다 .하지만 우리는 단순히 원클릭으로 사용할 수 있습니다 . 모두 구현되어 있으니까요 !

( 2 / 13)

# 굴러가는 상자

Page 8: Unity cookbook 3

충돌 처리 - 1

물리 엔진만 덩그러니 있다면 재미 없으니까 활용해보겠습니다 .충돌 처리를 구현 해볼텐데 앞서 새로 만든 구체와 벽의 컴포넌트를 보시면 Collider 가 붙어있는 것을 확인할 수 있습니다 .이로서 두 물체가 닿게 되는 순간 콜백 (Callback) 함수를 스크립트 내부적으로 불러들일 수 있습니다 . 실시간으로요 .조건은 서로 닿는 두 물체의 Collider 가 컴포넌트로 존재해야 합니다 .

( 2 / 13)

# 원의 충돌 처리 컴포넌트 # 박스의 충돌 처리 컴포넌트

Page 9: Unity cookbook 3

충돌 처리 - 2

스크립트를 새로 만들고 위와 같이 코드를 적어봅시다 .앞서 말했듯이 OnCollisionEnter 는 유니티 자체적으로 지원되는 콜백 함수입니다 .충돌체가 닿는 순간 어떤 충돌체인지 인자값을 받아 식별할 수 있게끔 구성되어 있습니다 .아까 만든 벽 (wall) 에 닿으면 출력이 되게끔 만들고 구체에 스크립트를 붙여봅니다 .

( 2 / 13)

# 충돌 콜백 함수 (OnCollisionEnter)

Page 10: Unity cookbook 3

충돌 처리 - 3

벽과 충돌하는 순간 콜백 함수가 스크립트 내부적으로 실행되어 우리가 만든 조건대로 출력되는 것을 볼 수 있습니다 .이러하여 충돌체의 상호작용은 내부 콜백 함수로 구현하는 것이고 조건 또한 사용자가 걸 수 있어 편리합니다 .이상 Rigid Body 와 Collider 의 대한 것들을 알아보았습니다 .

( 2 / 13)

# 벽과 충돌

# 출력

Page 11: Unity cookbook 3

End