2012-03-21 5 views
4

나는 벡터 (x, y)를 가지고 회전 (예 : 30도 위로 향함)에 의해 원점에 정렬됩니다.회전에 대한 벡터 이동

벡터를 방향과 관련하여 한 단위 (예 : 한 단위 전진 30도 위로)로 이동하려면 어떻게해야합니까?

간단한 3 인칭 게임을 함께 사용하고 있으며 회전에 관계없이 캐릭터를 회전시키고 앞으로 움직일 수 있기를 원하며이 작업을 수행하는 방법에 관해서는 다소 분실했습니다.

편집 :

이 질문에 대답 한 후, 앞서 가서 뒤쪽, 왼쪽 및 오른쪽 이동하는 방법을 알아 냈어, 그래서 누군가가 도움을 필요로하는 경우 I는 참조 용으로 여기에이 스틱 거라고 생각 . ,

position -= displacement; 

가 왼쪽 움직임을 얻으려면

displacement.x = (float)Math.Sin(angle + PI/2); 
displacement.y = (float)Math.Cos(angle + PI/2); 

교체에 변위 변수를 변경 : Gunther2의 코드를 감안할 때

는 단순히 현재 위치에서 변위를 빼기, 이전 버전과 움직임을 얻으려면 Sin/Cos가 라디안 대신도를 허용하면 PI/2는 90입니다.

다음 빼기 변위 :

position -= displacement; 

단순히 권리 운동을 얻을 동일한 단계를 수행하지만 새 변위 추가하려면 :

position += displacement; 

답변

4

먼저 당신이 각도를 나타내는 벡터를 필요를 :

Vector2 displacement; 
displacement.x = (float)Math.Sin(angle); 
displacement.y = (float)Math.Cos(angle); 

그런 다음이 벡터 (x, y)의 길이는 항상 1이므로, 당신이 얼마나 멀리 여행하고 있는지. 1의 거리를 여행하고 싶다면 X와 Y는 이미 필요한 크기입니다.

displacement *= speed; // Assuming your Vector2 *= operator supports a scalar 

현재 위치 변위를 추가

position += displacement; 
+0

완벽! 나는 실제로 Vector3를 사용하고 있었지만, 코드에 맞도록 수정했습니다. Unity에서 Mathf.Sin과 Cos 함수가 라디안 값을 취하고 (즉,) 사용하지 않기 때문에 나는 잠시 혼란스러워했습니다. 1도 (이것은 그들이 회전을 위해 제공하는 것입니다). 그러나 그 장애물을 극복하고 나면, 그것은 훌륭하게 작동합니다! 정말 고맙습니다! –

+0

이들은 내가 가장 좋아하는 질문 유형입니다. 다행히 도울 수있어.] – Foggzie

관련 문제