https://terms.naver.com/entry.naver?docId=3405101&cid=47324&categoryId=47324
일반적인 벡터의 정의는 이미 대략은 알고 계실것이다.
유니티도 벡터를 많이 이용하고 툴을 제공한다.
1. 두 지점사이의 거리
현재위치 curPos와 목적지인 destPos가 있다면 현재위치에서 목적지로 가는 벡터는 delta = destPos-curPos 이다.
2지점의 거리는 delta.magnitude이다. Vector3.Distance(curpos,destPos)로도 구할 수 있다.
2. 단위거리 이동
목적지로 10만큼의 거리를 가고 싶을때는 정규화후 이동하면된다.
newPos = curPos;
newPos += delta.normalized * 10f
3. 쿼터니언
인스펙터뷰의 transform의 rotation은 Vector3로 보이지만 스크립트에서 수정하고자 하면 에러가 난다. 왜냐하면 내부적으로는 짐벌락의 문제로 쿼터니언으로 처리하기 때문이다.
오일러각으로 읽어오기 위해서는 rotation.eulerAngles로 읽어와야하고 변경할때는
유니티는 오일러각을 Quaternion으로 변환해주는 함수를 제공한다.
rotation = Quaternion.Euler(Vector3);처럼 변경해야 한다.
현재 회전 상태에서 더 회전하기
현재 rotation1 = Quaternion(30,0,0)상태에서 rotation2 = Quaternion(0.60,0) 만큼 더 회전시키려면 rotation1+rotation2가 아니고 rotation1*rotation2이다. 쿼터니언 사이의 연산은 행렬을 사용하기 때문입니다.
4.벡터의 내적 : vector3.Dot(a,b) 벡터b를 벡터a로 투영한 길이를 구합니다. 수직일 경우 0이 됩니다.
5. 벡터의 외적 : Vector3.Cross(a,b) 두 벡터 모두에 수직인 벡터를 구합니다. 앞뒤가 있습니다.
'유니티스크립팅 > 게임수학' 카테고리의 다른 글
게임에서 사용되는 삼각함수 (2) | 2023.05.25 |
---|