박하의 나날

(07.27)Quaternion_유도미사일, 쫓아다니는 카메라

프로그래밍/Unity

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