2015-10-08 3 views
0

У меня есть возможность как перемещать, так и поворачивать мою камеру. Вращение моего кода работает, вращая родительский объект моей камеры, и мой код движения также перемещает мой родительский объект.Unity Всегда перемещать объект вперед

Однако, когда я поворачиваю родительский объект, мой код движения идет не так. На данный момент, если я использую два пальца и прокручиваю вверх, я хочу, чтобы моя камера всегда двигалась вперед в зависимости от того, где она выглядит. Аналогично, когда я двигаюсь вниз, влево и вправо. Я бы хотел, чтобы моя камера двигалась назад, влево и вправо соответственно.

В настоящий момент, когда я впервые запускаю приложение, все работает нормально. Но тогда, когда я поворачиваю свой родительский объект на 90 градусов вправо, когда я сажусь, моя камера движется влево. Поскольку я не уверен, как компенсировать это вращение из моего прямого направления.

Это мои два метода:

void MoveCamera() 
{ 

    Vector2 delta = Input.GetTouch(0).deltaPosition; 

    // invert option is if I want to manually change the direction everything moves 
    // move fingers left to go right etc 
    float positonX = delta.x * sensitivityX * Time.deltaTime; 
    positonX = invertX ? positonX : positonX * -1; 

    float positionY = delta.y * sensitivityY * Time.deltaTime; 
    positionY = invertY ? positionY : positionY * -1; 

    transform.parent.position += new Vector3(positonX, 0, positionY); 
} 

Vector2 CameraOrbit() 
{ 

    Vector2 touchDeltaPosition = Input.GetTouch (0).deltaPosition; 

    //vertical movement is corresponded to rotation in x-axis 
    orbitSpeedX = -touchDeltaPosition.y * rotXSpeedModifier; 

    //horizontal movement is corresponded to rotation in y-axis 
    orbitSpeedY = touchDeltaPosition.x * rotYSpeedModifier; 

    //get the current rotation 
    float x = transform.parent.rotation.eulerAngles.x; 
    float y = transform.parent.rotation.eulerAngles.y; 

    //make sure x is between -180 to 180 so we can clamp it propery later 
    if (x > 180) 
    { 
     x -= 360; 
    } 

    //y = ClampAngle(y, yMinLimit, yMaxLimit); 

    //calculate the x and y rotation 
    Quaternion rotationY = Quaternion.Euler (0, y, 0) * Quaternion.Euler (0, orbitSpeedY, 0); 
    Quaternion rotationX = Quaternion.Euler (Mathf.Clamp (x + orbitSpeedX, minRotX, maxRotX), 0, 0); 

    //apply the rotation 
    transform.parent.rotation = rotationY * rotationX; 
    orbitSpeedX *= (1 - Time.deltaTime * 12); 
    orbitSpeedY *= (1 - Time.deltaTime * 3); 

    return touchDeltaPosition; 
} 

Прежде чем я имел этот код, я шевелить камеру с помощью transform.Translate и это работало, и я не мог двигаться вперед независимо от того, мое вращение. Но положение камеры Y будет двигаться, когда мне нужно, чтобы оставаться на том, что когда-либо было, когда я начинаю двигаться. Это заставило бы его выглядеть так, будто он уменьшал масштаб, чем больше я продвигался вперед.

+0

Что значит, что вы хотите двигаться вперед? как при ходьбе вперед/масштабирование? или скользить вверх пальцами? что ты имеешь ввиду? что такое 'invertX' /' invertY'? – maksymiuk

+0

Я отредактирую свой вопрос, чтобы не оставлять слишком много комментариев. – N0xus

ответ

0

Я думаю, что у вас есть проблема постоянного перемещения в одном направлении, не учитывая направление, с которым вы сталкиваетесь?

Я точно не знаю, как решить вашу проблему, но вот пример из того, что я использую:

Допустим, я делаю первый шутер человека за компьютером. Вот код, который я бы использовал для движения:

Vector3 position = transform.position + new Vector3 (Input.getAxis ("some1"), Input.getAxis ("some2"), 0) * transform.direction; transform.position = позиция.

Это вычисляет движение в зависимости от направления. Если он все еще не работает, повторите попытку, и я буду рад помочь!

+0

Я получаю следующую ошибку. Оператор '* 'не может применяться к операндам типа' float' и 'UnityEngine.Quaternion ' – N0xus

+0

@ N0xus Hmm. Я опубликую большую идею, которую я обычно использую, возможно, вы можете попробовать использовать ее в своей программе, как? –