4원수를 사용하는 체계로 Eular좌표계의 짐벌락 현상을 해결하기 위해서 사용한다.
(짐벌락 현상: 움직이다보면 축이 겹치는 현상_x,y축이 겹친다거나.)
Quaternion은 xyz는 벡터를 의미하고 w가 회전량.
카메라가 캐릭터를 쫓아다니게 할수도 있고, cocos2d에서 힘들었던 유도미사일도
금방 만들수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
public class quater:MonoBehavior{
public Transform target;
float moveSpeed;
float rotSpeed;
void Start(){
moveSpeed = Random.Range(5,20);
rotSpeed = Random.Range(5,10);
}
void Update(){
Vector3 vec = target.position - transform.position;
Quaternion q = Quaternion.LookRotation(vec);
Quaternion s = Quaternion.Slerp(transform.rotation, q, rotSpeed*Time.deltaTIme);
transform.rotation = s;
transform.Translate(new Vector3(0,0,1) * moveSpeed * Time.deltaTime);
}
} |
cs |
Quaternion은 회전하고 Translate가 이동.
LookRotation함수는 매개변수로 받는 벡터(타겟을 정해준다면 그 타겟)의 위치, 방향을 바라보도록 회전하는 함수.
좀더 부드럽게 쫓아오도록 보간하며 이동하게 하는 함수 Slerp추가.
매개변수로 Quaternion 두개와 float값을 받는다.
Quaternion은 시작점과 도착점, float는 보간속도.
1
2
3
4
5
6
7
8
9
10 |
public class CamMove:MonoBehavior{
public Transform target;
void Update(){
Vector3 vec = target.position - transform.position;
Quaternion q = Quaternion.LookRotation(vec);
Quaternion s = Quaternion.Slerp(transform.rotation, q, 10f*Time.deltaTIme);
transform.rotation = s;
}
} |
cs |
quater 스크립트에서 회전을 빼고 속도를 정해준후 타겟을 설정해주면
쫓아다니는 카메라를 만들 수 있다.
또는 CamMove스크립트처럼 해도 마찬가지.
레이싱 게임할때 지나가는 차를 촬영하는 것처럼 된다.
씬에서 타겟을 움직여보면 카메라가 움직이는걸 확인할수 있다.
'프로그래밍 > Unity' 카테고리의 다른 글
(07.31)raycast_Picking (0) | 2017.03.20 |
---|---|
(07.27)Quaternion_centreeGun (0) | 2017.03.20 |
(07.23)mecanim, animator (0) | 2017.03.20 |
(07.21)joint_2 (0) | 2017.03.20 |
(07.20)normal mapping_셰이더를 이용한 맵핑 (0) | 2017.03.19 |