Rotate 와 RotateAround

2011. 5. 3. 09:05C# And Unity


먼저 Unity3d 의 좌표계를 설명하자면
왼손 좌표계 이다. (opengl은 오른손 좌표계)

왼손을 피고 엄지를 왼쪽, 검지를 위쪽, 중지를 나를 향하게 피면 된다.
엄지 : x
검지 : y
중지 : z
해당 손가락 방향이 + 이다.
회전에 대한 방향은 
왼손을 따봉하듯이 주먹을 말아쥐고 엄지를 위로 향하게 해보시면, 네개의 손가락들이 감아쥐는 쪽이
+ 방향입니다.

이 좌표계가 중요합니다.
      
       
아래 소스에서도 보듯이
Roate 는 Object의 회전을 뜻하는데, 로컬 좌표와 월드 좌표를 기준으로 회전할 수 있습니다.
RoateAround는 특정 좌표를 기반으로 하여 회전 하실때 쓰시면 됩니다.

bool isA = Input.GetKey(KeyCode.A);
        bool isD = Input.GetKey(KeyCode.D);
        bool isW = Input.GetKey(KeyCode.W);


        // 원점에서 각 축 라인을 그린다.
        Debug.DrawLine(Vector3.zero, Vector3.up * 10f, Color.green);
        Debug.DrawLine(Vector3.zero, Vector3.forward * 10f, Color.blue);
        Debug.DrawLine(Vector3.zero, Vector3.left * 10f, Color.red);

        Debug.DrawLine(Vector3.zero, transform.position,Color.red);
       
        // 회전 이동 Space.Self: 로컬좌표, Space.World: 월드 좌표 기준
        // left,right: x
        // up,down:y
        // forward,back:z

        // y 좌표계를 축으로 양의방향으로 회전한다.
       // Space.Self : 로컬 좌표
      //  Space.World : 월드 좌표

        //if (isA) transform.Rotate(Vector3.up, turningSpeed * Time.deltaTime, Space.Self);
        //if (isA) transform.RotateAroundLocal(Vector3.up, Time.deltaTime); // 위와 동일하다.

        // 특정 axis 를 축으로 양의방향으로 회전한다.
        // 예> Vector3.zero가 축으면 월드 좌표 0,0,0 의 up좌표를 기준으로 Object가 회전한다.
        //Vector3 axis = new Vector3(-10,1,-10);
        //Debug.DrawLine(axis, transform.position, Color.gray);
        //if (isA) transform.RotateAround(axis, Vector3.down, 100*Time.deltaTime);

 

 

        if (isA) transform.Rotate(Vector3.up, turningSpeed * Time.deltaTime, Space.Self);
        if (isD) transform.Rotate(Vector3.down, turningSpeed * Time.deltaTime);


        playKeyAnimation();
        playNormal();