[유니티 기초] - Quaternion - 네이버 블로그
Maybe your like
블로그 마켓 판매자의 이력 관리를 위해 블로그 주소 변경이 불가합니다.
자세히 보기 레이어 닫기
블로그 아이디가 필요해요! 블로그에서 진짜 나를 기록하고 다양한 이웃과 소식을 만나보세요. 지금 시작해볼까요?
블로그 아이디 만들기 블로그 아이디 만들기 레이어 닫기 blog.naver.com/ 입력 내용 삭제- 설정한 아이디는 나중에 변경할 수 없으니 신중하게 입력해주세요.
- 변경 전 공유된 블로그/글/클립 링크는 연결이 끊길 수 있습니다.
- 네이버 아이디 또는 개인정보가 포함된 문자 사용은 피해주세요.
- 블로그 도움말에서 아이디 변경 유의사항을 확인해보세요.
1. 이전 주소로 공유된 글은 3개월간 새로운 주소로 연결을 지원하며 이후 언제든 연결이 끊길 수 있습니다.
2. 블로그 아이디는 한번 변경하면 다시 변경이 불가능합니다.
변경하시겠습니까?
취소 확인
블로그 아이디는 한번 정하면 다시 변경이 불가능합니다.
이 아이디로 블로그를 만들까요?
취소 확인 환영합니다! 블로그 아이디가 만들어졌어요.
blog.naver.com/ 바로 시작하기 추가정보 입력하기 기본정보를 입력해주세요. 나중에 언제든지 변경할 수 있어요.
프로필 이미지 설정 지우기 사진 업로드- 문학·책
- 영화
- 미술·디자인
- 공연·전시
- 음악
- 드라마
- 스타·연예인
- 만화·애니
- 방송
- 일상·생각
- 육아·결혼
- 반려동물
- 좋은글·이미지
- 패션·미용
- 인테리어·DIY
- 요리·레시피
- 상품리뷰
- 원예·재배
- 게임
- 스포츠
- 사진
- 자동차
- 취미
- 국내여행
- 세계여행
- 맛집
- IT·컴퓨터
- 사회·정치
- 건강·의학
- 비즈니스·경제
- 어학·외국어
- 교육·학문
- 주제 선택 보류
선택한 주제의 글과 이웃을 추천받을 수 있어요.
나중에 할게요 기본정보 입력 주제 선택 이웃 맺기 뒤로가기 버튼 인기블로거와 이웃을 맺으세요.이웃을 맺으면 이웃새글에서 글을 받아볼 수 있어요.
블로그 시작하기 기본정보 입력 주제 선택 이웃 맺기 뒤로가기 버튼 확인 확인- 내 블로그
- 이웃블로그
- 블로그 홈

- 로그인
|
|
Unity
글쓰기 가벼운 글쓰기툴 퀵에디터가 오픈했어요! Unity 158개의 글Unity목록열기 |
| Unity [유니티 기초] - Quaternion HHot ・ 2019. 1. 22. 9:07 URL 복사 이웃추가 본문 기타 기능 공유하기 신고하기 유니티는 오일러 각을 이용해 회전을 직관적으로 조작할 수 있도록 인스펙터 뷰에 표시하고 있다. 하지만 내부적으로는 쿼터니언 방식으로 변환하여 회전을 계산한다. 따라서 사용자가 예외적으로 오일러 각 계산을 이용하도록 설정하지 않는 이상 유니티에서 짐벌 락Gimbal Lock 현상은 발생하지 않는다 [오일러 각 Euler Angles] 수학자 오일러가 고안한 개념으로 3차원 공간의 절대 좌표를 기준으로 물체의 회전을 측정하는 방식 1. 장점 - X, Y, Z 세 개의 축을 기준으로 회전하기에 직관적이며 조작하기 쉽다 - 180도가 넘는 회전도 표현할 수 있다 2. 한계 - 오일러 각을 계산하는데 드는 비용이 크다 - 짐벌 락Gimbal Lock: 오일러 각을 이용한 회전은 먼저 회전한 축이 아직 회전하지 않은 축을 함께 회전시킨다. 따라서 두 번째로 회전한 축의 회전 결과로 인해 세 번째 축과 첫 번째 축이 겹쳐질 수 있는데, 이 상태를 짐벌 락이라고 말하며 degree of freedom 을 상실하게 된다(=첫 번째, 세 번째 축 회전이 하나의 축을 기준으로 일어나기에 자유도 손실) [쿼터니언 Quaternion] - 쿼터니언은 4개의 수(x, y, z, w)로 이루어지며 각 성분은 축이나 각도를 의미하는 게 아니라, 하나의 벡터(x, y, z)와 하나의 스칼라(w, roll을 표현)를 의미한다 - 일반적으로 각 성분에 직접 접근 및 수정하지는 않는다. 쿼터니언 수학을 완전히 이해하지 않은 채로 직접 수정하게 되면 의도한 방식으로 작동시키기 어렵기 때문이다 - 오일러 각이 회전순서에 기반하는 반면에 쿼터니언은 세 축을 동시에 회전시키기에 짐벌 락 현상이 발생하지 않는다(x, y, z 성분은 항상 동시에 변화한다) - 벡터가 위치position 임과 동시에 방향direction 이듯이, 쿼터니언은 방향orientation 임과 동시에 회전rotation 이다 - 벡터가 원점과 특정 위치 비교함으로써 방향을 측정하듯이, 마찬가지로 쿼터니언은 회전의 원점과 특정 방향을 비교함으로써 회전을 측정할 수 있다 - 인스펙터 뷰를 Debug모드로 하면 쿼터니언 성분을 볼 수 있다 *directiron: 두 점을 이용해 나타낼 수 있는 방향. '~로 향하는 움직임' *orientation: 세 가지 오일러 각 또는 쿼터니언을 이용해 나타낼 수 있는 방향. '~를 향하고 있는 상태' 1. 장점 - 짐벌락 문제가 없다 - 계산하는데 드는 비용이 적다 2. 한계 - 쿼터니언을 이용한 회전은 하나의 방향orientation에서 다른 방향orientation으로 측정되기에 180도 보다 큰 회전을 표현할 수 없다 - 직관적으로 이해하기 힘들다 짐벌 락 - 3개의 짐벌을 이용해 회전하는 3차원에서 두 개의 짐벌이 겹쳐질 경우 회전축 하나가 사라지는 현상. 겹쳐진 두 개의 축을 더 이상 움직일 수 없게 된다는 의미가 아니라 그 두 개가 하나의 축으로 합쳐져서 각각 회전시켜도 같은 축을 기준으로 회전하게 된다는 의미이다 - 물체가 회전하면 물체의 좌표계가 함께 회전하고 만약 회전하기 전의 좌표축과 회전한 후의 좌표축이 일치하면 데이터가 소실된다 - 오일러 각은 X, Y, Z축으로의 회전값이 같더라도 어떤 순서로 적용되는지에 따라 결과가 달라진다. 즉, 회전순서를 하이러키로 볼 수 있고 따라서 첫 번째로 회전하는 축이 하위 축들을 함께 회전시키게 된다. 마찬가지로 두 번째로 회전하는 축은 세 번째 축을 함께 움직이며 마지막으로 회전하는 축은 혼자만 회전한다. 이렇듯 회전결과가 축의 회전 순서에 의존하는 방식은 짐벌락 문제를 발생시킨다. 다시 말해 회전 축 3개 중 2개가 하나의 평면상에 있게 되는 것이다(회전 축 정보의 손실) - 앞서 설명했듯이 오일러 체계에서의 회전은 회전순서에 기반하므로 어떤 축이 우선하는지 컴퓨터에게 알려줘야 한다. 애니메이션에서의 쿼터니언 - 인스펙터에서 게임오브젝트의 회전 값을 X: 0, Y: 365, Z: 0 으로 입력했을 때 이 값을 쿼터니언으로는 표현할 수 없으므로 재생을 누르면 오브젝트의 회전값이 X: 0, Y: 5, Z: 0(또는 기타 유사한 값)으로 변경되는 부작용이 있다. '360도 전체 회전 더하기 5도'라는 개념을 이해하지 못하고 단순히 회전 결과와 동일한 방법으로 회전하도록 설정된 쿼터니언으로 변환되기 때문이다 - 스크립트에서 회전을 처리하는 경우 Quaternion 클래스와 이 클래스의 메서드를 이용해 회전 값을 만들고 수정해야 한다. 오일러 각을 관장하는 Quaternion 클래스 메서드가 있기에 오일러 각을 사용할 수도 있지만, 의도하지 않은 부작용이 발생할 수 있기에 정확한 원리를 알고 조작해야 한다. ex) 쿼터니언을 통해 오일러 값에 접근해서 수정한 후 다시 쿼터니언으로 변환해서 적용하면 문제가 발생한다. 따라서 오일러 각 관련 메서드는 값을 받아와서 수정하지 않고 바로 적용하는 방식으로만 사용해야 한다 - 180도가 넘는 회전이 일어날 때 쿼터니언의 특성에 유의해야 한다 (참고: https://stackoverflow.com/questions/50311059/unity-rotate-an-object-in-axis-and-back-to-starting-point-in-the-same-direction 임의의 회전 순서 설정 - 오일러 각은 세 개의 축을 어떤 순서로 회전시키는지에 따라 결과가 달라진다(아래 그림 참고) - 유니티의 오일러 각 회전 순서는 Z, X, Y축 순이다(마야는 Z, Y, X축 순) 출처: https://vimeo.com/2649637 - 스크립트를 통해 회전 순서를 임의로 정할 수 있다(아래 코드 참고) - Transform.Rotate 메서드(벡터 인수)를 이용한 회전은 특정 축을 회전시키면 나머지 축들도 함께 회전하는 로컬 좌표축을 기준으로 계산된다. 따라서 회전이 Z, X, Y축 순으로 적용되는 일반적인 유니티 환경에서 맨 처음 Z축을 기준으로 회전하면 X, Y축도 같이 회전한다. 회전한 X축을 기준으로 두 번째 회전이 일어나며 이때 Y축도 같이 회전한다. 마지막으로 Y축을 기준으로 세 번째 회전이 일어나며 이때 같이 회전하는 축은 없다(로컬 좌표축 기즈모를 기준으로 생각하면 헷갈릴 수 있다. 왜냐면 기즈모는 하나의 축이 변화할 때 항상 나머지 두 개의 축도 같이 회전하기 때문이다. 그러나 오일러 각은 하나의 축이 회전할 때 아직 회전하지 않은 축만 같이 회전한다) - 만약 변하지 않고 고정된 축을 기준으로 계속 회전을 일으키고 싶은 경우에는 parent 와 Transform.RotateAround 메서드를 활용한다(아래 코드 참고) - Quaternion 연산에서 곱셈의 의미: Quaternion A, B 가 있을 때 (A * B) 는 우선 B 만큼의 회전량을 적용한 후 이어서 A만큼의 회전량을 적용한다는 의미이다 - Rotate, RotateAround 메서드에 대한 정보는 다음 게시글 참고(https://blog.naver.com/dj3630/221447290180) //두 쿼터니언의 회전량을 더하는 방법(곱셈 연산) Quaternion originalRotation = Quaternion.Euler(new Vector3(45, 0, 0)); Quaternion plusRotation = Quaternion.Euler(new Vector3(40, 0, 0)); Quaternion targetRotation = originalRotation * plusRotation; transform.rotation = targetRotation; //X축-Y축-Z축 순서로 회전하게 만들기 //올바른 예: 원하는 회전순서의 역순으로 쿼터니언(회전량)을 서로 곱해준다 //단, 매 회전 마다 고정된 글로벌 좌표축을 기준으로 회전량 계산 transform.localRotation = Quaternion.AngleAxis(angleZ, Vector3.forward) * Quaternion.AngleAxis(angleY, Vector3.up) * Quaternion.AngleAxis(angleX, Vector3.right); //올바른 예: RotateAround 메서드 이용 //단, 매 회전 마다 고정된 특정 좌표축을 기준으로 회전량 계산 Transform par = transform.parent.transform; transform.rotation = Quaternion.Identity; transform.RotateAround(transform.position, par.right, rotation.x); transform.RotateAround(transform.position, par.up, rotation.y); transform.RotateAround(transform.position, par.forward, rotation.z); //올바른 예: Rotate 메서드 이용 //단, 매 회전 마다 변화하는 로컬 좌표축을 기준으로 회전량 계산 transform.Rotate(angleX, 0, 0); transform.Rotate(0, angleY, 0); transform.Rotate(0, 0, angleZ); //잘못된 예: 회전순서에 영향을 주지 않는다 //단, 매 회전 마다 변화하는 로컬 좌표축을 기준으로 회전량 계산 Transform.Rotate(new Vector3(a, b, c)); //잘못된 예: 맨 마지막 코드 한 줄만 최종적으로 적용되기에 선행하는 코드 두 줄은 무시된다(=회전이 중첩되지 않는다) //즉, 회전순서에 영향을 주지 않는다 transform.localRotation = Quaternion.AngleAxis(angleX, Vector3.right); transform.localRotation = Quaternion.AngleAxis(angleY, Vector3.up); transform.localRotation = Quaternion.AngleAxis(angleZ, Vector3.forward); //잘못된 예: eulerAngles 속성의 x, y, z 는 직접 변경(set)할 수 없다 transform.eulerAngles.x = angleX; transform.eulerAngles.y = angleY; transform.eulerAngles.z = angleZ; //잘못된 예: eulerAngles 속성에 값 대입을 통한 회전은 에디터 상의 rotation 값에 직접 대입되는 방식으로 적용된다 //즉, 회전은 중첩되지만 유니티 기본 회전순서에 영향을 주지 않는다 transform.eulerAngles = new Vector3(angleX, transform.eulerAngles.y, transform.eulerAngles.z); transform.eulerAngles = new Vector3(transform.eulerAngles.x, angleY, transform.eulerAngles.z); transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, angleZ); 쿼터니언 활용법 //쿼터니언 사용시 유의사항 //올바른 예: 오일러 각을 쿼터니언으로 변환하여 회전 제어 float x; x += Time.deltaTime * 10; transform.rotation = Quaternion.Euler(x,0,0); //잘못된 예: 쿼터니언의 성분을 직접 조작해서는 원하는 결과를 얻기 힘들다(쿼터니언 수학을 완전히 이해해야만 제대로 조작할 수 있다) var rot = transform.rotation; rot.x += Time.deltaTime * 10; transform.rotation = rot; //잘못된 예: 쿼터니언을 오일러 각으로 변환해서 조작한 후 다시 쿼터니언으로 변환한 경우 오작동을 일으킬 가능성이 높다 var angles = transform.rotation.eulerAngles; angles.x += Time.deltaTime * 10; transform.rotation = Quaternion.Euler(angles); //특정 축을 기준으로 한 회전량(X축 10도) 계산 Quaternion rotR = Quaternion.AngleAxis(10, Vector3.right); //로컬 X축을 기준으로 10도 만큼 회전 transform.Rotate(Vector3.right * 10); //방법 1 transform.Rotate(10, 0, 0); //방법 2 transform.rotation = transform.rotation * rotR; //방법 3 transform.localRotation = Quaternion.Euler(0, 10, 0); //잘못된 방법: 오브젝트의 기존 회전 상태에 더해지는 게 아니라 identity 를 기준으로 오일러 각 회전 대입 transform.localRotation = rotR; //잘못된 방법: 오브젝트의 기존 회전 상태에 더해지는 게 아니라 identity 를 기준으로 회전량 대입 //글로벌 X축을 기준으로 10도 만큼 회전 transform.Rotate(Vector3.right * 10, Space.World); //방법 1 transform.Rotate(10, 0, 0, Space.World); //방법 2 transform.rotation = rotR * transform.rotation; //방법 3 transform.rotation = Quaternion.Euler(0, 10, 0); //잘못된 방법: 오브젝트의 기존 회전 상태에 더해지는 게 아니라 identity 를 기준으로 오일러 각 회전 대입 transform.rotation = rotR; //잘못된 방법: 오브젝트의 기존 회전 상태에 더해지는 게 아니라 identity 를 기준으로 회전량 대입 //쿼터니언을 이용해 원하는 방향을 가리키는 방법 public Transform targetTransform; Vector3 direction = targetTransform.position - transform.position; Quaternion targetRotation = Quaternion.LookRotation(direction); transform.rotation = targetRotation; //쿼터니언을 이용해 벡터를 회전시킬 수 있다(역은 성립하지 않는다) //캐릭터의 정면(로컬 Z축) 방향으로 뻗어나가는 CharacterForward 벡터 Vector3 CharacterForward = character.rotation * Vector3.forward; 참고 영상 Scripting API Quaternion 유니티에서 회전을 조작하는 구조체 public staticQuaternionidentity: 회전량이 0인 상태의 쿼터니언(0.0, 0.0, 0.0, 1.0). 다른 게임오브젝트에 child 되어 있지 않다면 글로벌 좌표축이 identity 가 되고 child 되어 있다면 parent의 회전 상태가 identity 가 된다(읽기전용) public Vector3 eulerAngles: 글로벌 좌표축 기준 쿼터니언 회전량을 오일러 각으로 반환하거나 오일러각으로 쿼터니언을 조작(set)할 수 있게 해주는 속성. 이 때 오일러 각의 회전은 Z, X, Y 순으로 적용된다 public staticQuaternionFromToRotation(Vector3 fromDirection, Vector3 toDirection) - 첫 번째 인수의 방향(orientation)에서 두 번째 인수의 방향까지의 회전값 차이를 쿼터니언으로 반환한다 public staticQuaternionLookRotation(Vector3 forward, Vector3 upwards = Vector3.up) - 첫 번째 인수로 바라보고자 하는 지점(글로벌 좌표)을 전달하고 두 번째 인수로 기준이 될 up을 전달한다 - 메서드를 호출한 게임오브젝트의 로컬 Z축이 첫 번째 인수를 향하도록 회전시킨 후 로컬 Y축이 두 전째 인수를 향하도록 다시 회전시킨다 - 첫 번째 또는 두 번째 인수의 크기가 0인 경우 또는 첫 번째와 두 번째 인수가 서로 평행하는 벡터인 경우 identity 반환 - Transform.LookAt 메서드와 기능이 같다 //타겟을 향하도록 회전시키는 로직 public Transform target; void Update() { //LookRotation 메서드 이용 Vector3 relativePos = target.position - transform.position; Quaternion rotation = Quaternion.LookRotation(relativePos, Vector3.up); transform.rotation = rotation; //LookAt 메서드 이용 //transform.LookAt(target, Vector3.up); //transform.LookAt(target.position, Vector3.up); }public staticfloatAngle(Quaternion a, Quaternion b) - 두 쿼터니언 사이의 각도 차이를 0.0F~ 180.0F 사이의 실수값으로 반환 public static QuaternionAngleAxis(float angle, Vector3 axis) - 인수로 전달한 각도와 축을 기준으로 한 회전량을 쿼터니언으로 변환하여 반환 - 두 번째 인수는 로컬 좌표축 기반(?) public staticQuaternionEuler(float x, float y, float z) public staticQuaternionEuler(Vector3 euler) - 오일러 각의 회전값을 쿼터니언으로 변환하여 반환 public staticQuaternionLerp(Quaternion a, Quaternion b, float t) - 0.0~1.0의 값이 가지는 t에 따라 두 회전상태를 직선 보간한다(t에 따른 변화량이 일정하다) - Slerp에 비해 속도는 빠르지만 두 회전상태의 차이가 크다면 보기에 안 좋다 public staticQuaternionSlerp(Quaternion a, Quaternion b, float t) - 0.0~1.0의 값이 가지는 t에 따라 두 회전상태를 t에 따라 원형 보간한다(t에 따른 변화량이 다르다. 0.0과 1.0 근처에서 느리게 변한다) [개념정리] *Quaternion 을 통한 회전(스크립트 이용)은 기본적으로 Quaternion.identity 를 기준으로 적용된다. 즉, 글로벌 좌표축(child 상태 아닐 때) 또는 parent 의 로컬 좌표축(child 상태일 때) 을 기준으로 회전량을 적용하는 것이지, child 게임오브젝트의 회전 상태(localRotation)와는 무관하다. 단, 쿼터니언의 곱셈 연산의 경우 회전량이 서로 더해진다 ex) child 게임오브젝트의 인스펙터 뷰에 rotation 값이 (10, 20, 30)으로 설정되어 있다고 가정하자. 이때 Quaternion.AngleAxis 메서드로 계산한 회전량을 localRotation 에 대입해서 게임오브젝트를 회전시키는 코드를 작성했다면, 기존의 localRotation (10, 20, 30)은 코드를 통한 회전에 영향을 주지 않는다 ex) 쿼터니언 A, B, C 에 대해 (A*B*C) 의 회전량: 우선 identity 를 기준으로 C 만큼 회전하고 이어서 현재의 회전 상태를 기준으로 B 만큼 회전 한 후 마지막으로 B * C 만큼의 회전 상태를 기준으로 A 만큼 회전한다 *Quaternion 클래스의 메서드에서 회전량을 계산할 때는 회전하지 않은 상태, 즉 Quaternion.identity 를 기준으로 얼마나 회전하는지를 구하는 것이다. ex) Quaternion.AngleAxis(50, Vector3.up) 은 Quaternion.identity 상태에서의 Y축을 기준으로 50도 만큼 회전하는 회전량을 반환한다 *씬 뷰의 기즈모를 통한 회전은 사용자 편의를 위한 것이기에 기즈모의 특정 축을 잡고 돌리면 실제로 그 형태가 되기 위해 필요한 회전 값이 계산되어 인스펙터 뷰의 rotation 에 나타난다. 이때 원래 회전 상태(identity)를 기준으로 여러 축 회전이 동시에 일어나야 하는 경우 rotation 에서 두 개 이상의 값이 동시에 변하기도 한다. 마찬가지로 회전 기즈모의 X축을 잡고 회전시킨다고 해서 identity 기준 X축 회전만 일어나는 게 아니기에 인스펙터 뷰에서는 X값 이외에 Y, Z값도 함께 변할 수 있다 *오브젝트를 글로벌 좌표축 기준으로 회전시킬 때(=localRotation 이 아니라 rotation 을 제어할 때) 축의 원점을 자기 자신의 pivot에 두고 회전을 판단하면 된다. 다시 말해, 오브젝트가 이동하면서 position이 글로벌 좌표축의 원점(0, 0, 0)과 달라지는 경우 position의 기준이 되는 글로벌 좌표축은 여전히 3D공간의 원점을 기준으로 삼지만, rotation의 기준이 되는 글로벌 좌표축은 오브젝트와 동일한 만큼 이동해서 오브젝트의 pivot에 위치하는 것으로 생각하면 편하다 *오일러 각의 X, Y, Z 성분과 쿼터니언의 X, Y, Z 성분은 완전히 다르다. 즉, 오일러 각(50, 50, 50)을 쿼터니언으로 변환했을 때 그 값이 (50, 50, 50, w)가 아니다. 오일러 각과 쿼터니언의 상관관계는 다음 사이트 참고(https://quaternions.online/) *게임오브젝트 회전의 기준점은 Center 가 아니라 Pivot 이다 *인스펙터 뷰에 나타나는 position, rotation, scale은 parent를 기준으로 삼았을 때의 상대적인 값이기에 엄밀히 말하면 local- 이 생략된 것이다 <참고자료> - 이재현, <절대강좌! 유니티>, 2018 - https://docs.unity3d.com/kr/2018.2/Manual/QuaternionAndEulerRotationsInUnity.html - https://docs.unity3d.com/ScriptReference/Quaternion.html - https://pxkey.blog.me/221389715050 - https://blog.naver.com/kimsung4752/221362786233 - https://www.youtube.com/watch?time_continue=45&v=uNHIPVOnt-Y - https://blog.naver.com/han95173/130157074226 - https://blog.naver.com/bestian/10073454337 - https://blog.naver.com/qkfkf123/60170135935 - https://www.youtube.com/watch?v=zc8b2Jo7mno - https://vimeo.com/2649637 - https://terms.naver.com/entry.nhn?docId=3571563&cid=58944&categoryId=5 - https://www.youtube.com/watch?v=jlskQDR8-bY - https://forum.unity.com/threads/understanding-rotations-in-local-and-world-space-quaternions.153330/ -https://blog.naver.com/mssixx/150143137018 -https://software.intel.com/en-us/forums/realsense/topic/562273 -https://stackoverflow.com/questions/50311059/unity-rotate-an-object-in-axis-and-back-to-starting-point-in-the-same-direction -https://gamedev.stackexchange.com/questions/147939/unity-rotate-object-around-local-x-axis-then-local-y-axis-then-local-z-axis -https://answers.unity.com/questions/977027/problem-with-rotation-order-of-euler-angles-when-i.html - https://gamedev.stackexchange.com/questions/111479/quaternion-rotation-problems - https://forum.unity.com/threads/understanding-rotations-in-local-and-world-space-quaternions.153330/ - https://vimeo.com/2649637 태그 취소 확인 공감 0 공감 0 이 글에 공감한 블로거 열고 닫기 댓글 9 이 글에 댓글 단 블로거 열고 닫기 인쇄 댓글쓰기 1/1 이전 다음 |
이 블로그 Unity 카테고리 글전체글 보기
이 블로그 인기글
이 블로그 인기글화면 최상단으로 이동 |
검색
글 검색명언
◀명언 이전목록▶명언 다음목록 RSS 2.0 RSS 1.0 ATOM 0.3안녕하세요.이 포스트는 네이버 블로그에서 작성된 게시글입니다.자세한 내용을 보려면 링크를 클릭해주세요.감사합니다.
글 보내기 서비스 안내
2009년 6월 30일 네이버 여행 서비스가 종료되었습니다. 네이버 여행 서비스를 이용해 주신 여러분께 감사드리며, 더 좋은 서비스로 보답할 수 있도록 노력하겠습니다.
악성코드가 포함되어 있는 파일입니다.
{FILENAME}
백신 프로그램으로 치료하신 후 다시 첨부하시거나, 치료가 어려우시면파일을 삭제하시기 바랍니다.
네이버 백신으로 치료하기고객님의 PC가 악성코드에 감염될 경우 시스템성능 저하,개인정보 유출등의 피해를 입을 수 있으니 주의하시기 바랍니다.
작성자 이외의 방문자에게는 이용이 제한되었습니다.
{ALERTMESSAGE}
이용제한 파일 : {FILENAME}
- 내PC 저장
- N드라이브 저장
글보내기 제한 공지
네이버는 블로그를 통해 저작물이 무단으로 공유되는 것을 막기 위해, 저작권을 침해하는 컨텐츠가 포함되어 있는 게시물의 경우 글보내기 기능을 제한하고 있습니다.
상세한 안내를 받고 싶으신 경우 네이버 고객센터로 문의주시면 도움드리도록 하겠습니다. 건강한 인터넷 환경을 만들어 나갈 수 있도록 고객님의 많은 관심과 협조를 부탁드립니다.
주제 분류 제한 공지
네이버는 블로그를 통해 저작물이 무단으로 공유되는 것을 막기 위해, 저작권을 침해하는 컨텐츠가 포함되어 있는 게시물의 경우 주제 분류 기능을 제한하고 있습니다.
상세한 안내를 받고 싶으신 경우 네이버 고객센터로 문의주시면 도움드리도록 하겠습니다. 건강한 인터넷 환경을 만들어 나갈 수 있도록 고객님의 많은 관심과 협조를 부탁드립니다.
작성하신 게시글에 사용이 제한된 문구가 포함되어 일시적으로 등록이 제한됩니다.
이용자 분들이 홍보성 도배, 스팸 게시물로 불편을 겪지 않도록 다음과 같은 경우 해당 게시물 등록이 일시적으로 제한됩니다.
- 특정 게시물 대량으로 등록되거나 해당 게시물에서 자주 사용하는 문구가 포함된 경우
- 특정 게시물이 과도하게 반복 작성되거나 해당 게시물에서 자주 사용하는문구가 포함된 경우
스팸 게시물이 확대 생성되는 것을 방지하기 위하여 문구 및 사용 제한기간을상세하게 안내해 드리지 못하는 점 양해 부탁 드립니다. 모두가 행복한 인터넷문화를 만들기 위한 네이버의 노력이오니 회원님의 양해와 협조 부탁드립니다.
더 궁금하신 사항은 고객센터로 문의하시면 자세히 알려드리겠습니다.
수정하신 후 다시 등록해 주세요.
확인회원님의 안전한 서비스 이용을 위해 비밀번호를 확인해 주세요.
다시 한번 비밀번호 확인 하시면 이용중인 화면으로 돌아가며, 작성 중이던내용을 정상적으로 전송 또는 등록하실 수 있습니다.
공감을 삭제하시겠습니까?
이 글의 공감수도 함께 차감됩니다.
![]()
작성하신 에 이용자들의 신고가 많은 표현이 포함되어 있습니다.
신고가 많은 표현다른 표현을 사용해주시기 바랍니다. 건전한 인터넷 문화 조성을 위해 회원님의 적극적인 협조를 부탁드립니다.
더 궁금하신 사항은 고객센터로 문의하시면 자세히 알려드리겠습니다.
확인블로그 마켓 가입 완료
내 상품 관리에서 배송비 설정 후 상품 판매를 시작해보세요!
배송비 설정하기 블로그 마켓 가입 완료 레이어 닫기 블로그 마켓 탈퇴가완료되었습니다. 문의사항은 블로그 마켓 고객센터로 연락주세요. 확인Tag » What Is A Quaternion Unity
-
Scripting API: Quaternion - Unity - Manual
-
Scripting API: Quaternion.w - Unity - Manual
-
C# Quaternions In Unity! - Intermediate Scripting Tutorial - YouTube
-
Please Explain Quaternions! - Unity Answers
-
Quaternions - Unity Learn
-
Unity Quaternion And Rotation Guide For Beginners - VionixStudio
-
Unity Quaternions For Dummies - WireWhiz
-
Quaternions In Unity - Medium
-
Manual: Rotation And Orientation In Unity
-
[Unity] 오브젝트의 회전에 대하여(Rotation, Quaternion, Euler)
-
Unity - Rotated Objects Flips In A Strange Way When Using Quaternions
-
Unity Rotate Quaternion - Dynamic'Action
-
Could Some One Explain Me A Little Bit More A Bout Quaternion In ...
-
What Are Quaternions In Unity 3D? How Does One Explain It ... - Quora
