현재위치 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) 두 벡터 모두에 수직인 벡터를 구합니다. 앞뒤가 있습니다.
Preview 옆 빨간 ◉ 클릭해 녹화를 한후 다시 클릭해 녹화를 마친다. ▶를 눌러 머리가 위아래로 움직이는지 확인해본다
Idel옆 ▼를 클릭해 Create New Clip을 선택한후 RunFoward를 만든다
하이라키뷰에서 Player의 Head를 선택하면 Animation뷰에서 Create하라고 하면 새로 만들고 AddProperty를 클릭하고 Position옆 + 를 클릭한다
Preview 옆 빨간 ◉ 클릭해 녹화를 시작하고 하이라키뷰의 PlayerHead를 선택하고 TimeLine 0:00을 클릭후Z Position을 0.5로 변경한후 Preview 옆 빨간 ◉ 클릭해 녹화를 마친다. 혹시 0:00외 다른 타임라인이 있다면 제거해준다. Head가 이동 방향쪽으로만 향해 있으면 되므로 한프레임만 있으면 된다
같은 요령으로 RunLeft, RunRight, RunBackward를 만들오 첫프레임의 Head위치를 변경후 저장해준다.
Animator탭을 선택한후 idle Animation을 끌어다 놓으면 자동으로 Entry와 연결되면서 Default State가 된다.
Windows - Package Manager에서 Animation Rigging 패키지를 검색하고 Install 한다.
패키지 설치가 끝났으면 애니메이션 리깅을 설정해서 캐릭터를 구성하는 뼈대를 나타내는 것으로 시작한다.
던전 스켈레톤을 누르고 상단에 Animation Rigging - Bone Renderer Setup을 클릭하면 된다.
Bone Renderer Setup를 클릭하면 던전 스켈레톤에 Bone Renderer라는 컴포넌트가 추가되며 동시에 Scene 뷰에 던전 스켈레톤의 뼈대가 표시되고 마우스로 쉽게 클릭도 가능해진다!
Bone Renderer는 던전 스켈레톤의 릭을 구성하는 뼈대 오브젝트들의 트랜스폼을 참조하고 있으며 뼈대의 크기나 색을 조정할 수도 있다.
여기까지 됐다면 Rig을 만들어야 한다. 참고로 애니메이션 리깅은 별도의 Rig을 만듦으로써 동작한다.
던전 스켈레톤을 클릭하고 상단의 Animation Rigging - Rig Setup을 클릭하면 두 가지 변화가 생긴다.
던전 스켈레톤에 Rig Layer를 가진 Rig Builer 컴포넌트가 추가된다.
던전 스켈레톤의 자식으로 Rig 컴포넌트를 가진 한 오브젝트가 생긴다.
Rig 1 오브젝트에제약조건(Constraint)를 추가함으로써 애니메이션 리깅이 가능해진다.
Rig 1에 Empty 오브젝트를 하나 추가해서 이름을 HeadAim으로 변경하고 HeadAim에Multi-Aim Constraint컴포넌트를 추가해 보자.
Multi-Aim Constraint에 몇 가지 정보를 넘겨줘야 한다.
Constrained Object에제약조건이 걸릴 뼈대를 넘겨주면 되는데, 본 실습에선 머리에 애니메이션 리깅을 적용하고 싶으니 Constrained Object에 던전 스켈레톤의 Head 뼈대를 넘겨주고 Aim Axis를 Y로 변경해 주자.
Source Object는 Constrained Object와 상호작용할 오브젝트로 하이라키뷰의 Fox를 선택해서 Head가 보이게 펼쳐준후 Head를 끌어 연결해준다. Aim Axis는 Y로 변경해 준다.
추가로 Rig 컴포넌트에 weight가 있다. 이는 타겟이 캐릭터에게 영향을 주는 정도로 weight가 줄어들수록 target과 상호작용은 약해진다.
3. 머리만 움직이면 어색하니 흉부도 함께 움직이도록 Rig1에 ChestAim 빈오브젝트에 Multi-airm Constraint를 추가하고 Spine1을 연결해준다. Source는 똑같이 Fox의Head를 연결해주고 머리와 흉부에 weight 값을 다르게 줘서 자연스러운 애니메이션을 연출해 보자. Aim Axis는 Y로 변경해 준다. Min Limit과 Max Limit을 각각 -100, 100으로 지정하면 멋진 결과물이 탄생한다.
해보면 흉부도 함께 움직인다. Fox가 움직여서 테스트가 어려우면 Fox의 스크립트를 언체크해도 된다.
같은 방법으로 Fox도 Animation Rigging - Bone Renderer Setup후 Animation Rigging - Rig Setup을 클릭 Rig1에 HeadAim을 추가하고 Multi-Aim Constraint 컴포넌트를 추가후 Constrained Object를 Fox Head로 하고
Source를 +를 누르고 Skeleton 다리를 추가하면 Fox 가 고개를 움직인다. Skeleton Head는 높이가 안 맞는다 Aim Axis Y t설정및 리미트 설정을 꼭한다.