728x90
반응형
유니티는 Vector2, Vector3, Vector4 타입을 지원한다. 새로운 벡터값을 정의하기 위해선 다음과 같은 메서드를 이용한다.
- new Vector2(x,y);
- new Vector3(x,y,z);
- new Vector4(x,y,z,w);
new 메서드와 Vector3 메서드는 다음을 참고한다.
https://udangtangtang-cording-oldcast1e.tistory.com/notice/83
생선된 벡터값의 각 원소는 다음과 같이 개별적으로 접근과 수정이 가능하다.
Vector3 v = new Vector3(1,2,3);
//방향이 (1,2,3)인 3차원 벡터 선언
v.x = 10; //x 방향의 벡터를 수정
v.y = 20; //y 방향의 벡터를 수정
v.z = 30; //z 방향의 벡터를 수정
참조타입(.) 이용하여 접근 및 수정을 할 수 있다.
Vector3의 연산
스칼라곱
Vector3 v = new Vector3(1,2,3);
//방향이 (1,2,3)인 3차원 벡터 선언
v = v*10;
//연산 결과로 v벡터는 (10,20,30)이 된다.
벡터의 덧셈과 뺄셈
Vector3 v1 = new Vector3(1,2,3);//방향이 (1,2,3)인 3차원 벡터 선언
Vector3 v2 = new Vector3(4,5,6);//방향이 (4,5,6)인 3차원 벡터 선언
Vector3 v3 = v1+v2;
//연산 결과로 v3벡터는 (5,7,9)가 된다.
벡터의 덧셈과 뺄셈은 일반적인 산수처럼 사용하면 된다.
벡터의 거리 계산
Vector3.Distance(vec1,vec2);
- 인자로 받은 두 개의 벡터 간의 거리를 계산한다.
- 참조 타입을 이용하여 벡터에 접근한다.
벡터의 정규화
Vector3.normarlized;
- 참조 대상의 특정 벡터와 방향은 같지만 크기는 1인 벡터(단위 벡터)를 생성한다.
- 참조 타입을 이용하여 벡터에 접근한다.
Vector3 v = new Vector3(5,5,5);
//방향이 (5,5,5)인 3차원 벡터 선언
Vector3 nor = v.normarlized;
//v와 방향은 같지만 크기가 1인 벡터 nor을 생성함.
벡터의 크기
Vector3.magnitude;
- 벡터의 크기를 구한다.
- 참조 타입을 이용하여 벡터에 접근한다.
Vector3 v = new Vector3(5,5,5);
//방향이 (5,5,5)인 3차원 벡터 선언
float size = v.magnitude;
//벡터 v의 크기를 size 변수에 저장
벡터의 내적
Vector3.Dot(vec1,vec2);
- 벡터 b를 벡터 a에 투영한 길이를 구한다.
- Vector3에 참조하여 함수를 사용한다.
Vector3 v1 = new Vector3(1,2,3); //방향이 (1,2,3)인 3차원 벡터 선언
Vector3 v2 = new Vector3(4,5,6); //방향이 (4,5,6)인 3차원 벡터 선언
float rst = Vector3.Dot(v1,v2);
//벡터 v1,v2의 내적값을 rst 변수에 저장
벡터의 외적
Vector3.Cross(vec1,vec2);
- 두 벡터 모두에 수직인 벡터를 구한다.
- Vector3에 참조하여 함수를 사용한다.
Vector3 v1 = new Vector3(1,2,3); //방향이 (1,2,3)인 3차원 벡터 선언
Vector3 v2 = new Vector3(4,5,6); //방향이 (4,5,6)인 3차원 벡터 선언
float rst = Vector3.Cross(v1,v2);
//벡터 v1,v2의 외적값 rst 변수에 저장
Vector3 응용
Vector3 curr = new Vector3(1,0,-1); //방향이 (1,0,-1)인 3차원 벡터 선언
Vector3 dest = new Vector3(4,5,6); //방향이 (4,5,6)인 3차원 벡터 선언
두 지점 사이의 거리
Vector3 dir = dest - curr;
//curr에서 dest로 향하는 벡터
float Distance = dir.magnitude;
//curr에서 dest까지의 거리
curr에서 dest로 향하는 벡터를 구하고 magnituted 메서드를 이용하여 벡터의 거리를 계산할 수 있지만 Distance 메서드를 이용하여 바로 계산할 수 도 있다.
벡터의 방향
Vector3 dir = dest - curr;
//curr에서 dest로 향하는 벡터
//정규 벡터 구하기
dir.normalized;
쿼터니언
쿼터니언은 회전을 나타내는 타입이며 원소로 x,y,z,w를 가지는 값으로, 사원수로 부른다.
인스팩터 창에서 트랜스폼 컴포넌트는 X,Y,Z를 가지는 Vector3로서 위치와 회전, 스케일을 나타낸다.
단, rotation은 Vector3타입이 아닌 Quaternion 타입이다.
Vector3 | position | 위치 |
localScale | 로컬 스케일 | |
Quaternion | rotation | 회전 |
transform.position = new Vector3(0,0,10);
transform.localScale = new Vector3(1,1,1);
//rotation은 Vector3타입이 아닌 Quaternion 타입이므로 에러 발생
transform.rotation = new Vector3(30,60,90);
쿼터니언은 한번에 회전하는 방식이므로 오일러각과 달리 짐벌락 현상이 없으며 90도 회전을 제대로 표현할 수 있다. 따라서 게임에서 회전을 구현할 때 쿼터니언을 사용한다.
다만, 쿼터니언은 복잡한 계산법을 기반으로 하기 때문에 유니티 내부에서는 쿼터니언으로 처리하지만 인스펙터 창에서는 컴포넌트의 회전을 Vector3로 다룬다.
쿼터니언 예제
새로운 회전 데이터 생성
Quaternion.Euler(Vector3);
(0,60,0) 회전을 표현하는 쿼터니언 회전 데이터를 생성하는 코드는 다음과 같다.
Quaternion rotation = Quaternion.Euler(new Vector3(0,60,0));
728x90
반응형
'Unity > ▶ Unity Composition' 카테고리의 다른 글
[Unity Composition]#7. 공간과 움직임 (0) | 2022.03.08 |
---|---|
[Unity Composition]#5. 변수와 컴포넌트 (2) | 2022.02.03 |
[Unity Composition]#4. 참조 타입 (0) | 2022.02.02 |
[Unity Composition]#3. 클래스와 오브젝트 (2) | 2022.01.26 |
[Unity Composition]#2. C#과 C언어와 차이점 (0) | 2022.01.26 |