2011. 5. 3. 09:05ㆍC# 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();