Панорамирование вида игрового объекта вместо камеры в Unity3d?

Мне трудно панорамировать вид игрового объекта в Unity3d. Я новичок в написании сценариев и пытаюсь разработать приложение AR (дополненной реальности) для Android.

Мне нужно, чтобы игровой объект (например, модель пола) из обычного вида сверху вниз отображался в «псевдо» вид iso, наклоненный на 45 градусов. Поскольку игровой объект наклонен, мне нужна функция панорамирования в его представлении с использованием четырех (4) кнопок (влево, вправо, вперед (или вверх), назад (или вниз)).

Проблема в том, что я не могу использовать ни один из известных фрагментов сценария панорамирования на форуме, так как камера AR должна быть статичной в сцене.

Нужно отметить, что мне нужно, чтобы функция панорамирования была активна только в изометрическом виде (который я уже вычислил с помощью другого скрипта), а не в виде сверху вниз. Так что не должно быть проблем с наклоном осей игрового объекта, верно?

Ниже приведены два макета изображений состояний: визуализируется игровой объект (пол модели) и код скрипта (из ссылки на Unity), который я сейчас использую, но он не очень функционален для моих нужд.

введите здесь описание изображения

введите здесь описание изображения

Вот фрагмент кода для перемещения игрового объекта влево. Я использую то же самое с изменением значений -, +скорости для других движений, но я получаю движение только вверх, вниз, а не вперед, назад:

#pragma strict

// The target gameObject.
var target: Transform;

// Speed in units per sec.
var speedLeft: float = -10;

private static var isPanLeft = false;


function FixedUpdate()
{
if(isPanLeft == true)
{
    // The step size is equal to speed times frame time.
    var step = speedLeft * Time.deltaTime;

    // Move model position a step closer to the target.
    transform.position = Vector3.MoveTowards(transform.position, target.position, step);
}
}

static function doPanLeft()
{
    isPanLeft = !isPanLeft;
}

Было бы здорово, если бы кто-то был достаточно любезен, чтобы взглянуть на этот пост и сделать предложение о том, как эту функциональность можно закодировать самым простым способом, поскольку я новичок?

Кроме того, если можно предоставить пример кода или учебник, это будет оценено, поскольку я могу многому научиться из этого. Всем заранее спасибо за ваше время и ответы.


person CodeBugging    schedule 29.08.2014    source источник


Ответы (1)


Если я правильно понимаю, у вас есть камера с фиксированным вращением и положением, и у вас есть объект, который вы хотите переместить вверх/вниз/влево/вправо с точки зрения камеры.

Чтобы повернуть объект на набор углов, вы просто делаете

transform.rotation = Quaternion.Euler(45, 45, 45);

Затем, чтобы переместить его, вы используете камеры вверх/вправо/вперед в мировом пространстве, чтобы перемещать его вверх и влево.

transform.position += camera.transform.up;
transform.position -= camera.transform.right;

Если в вашей сцене только одна камера, вы можете получить доступ к ее преобразованию с помощью Camera.main.transform

Пример того, как его переместить, когда кто-то нажимает стрелку влево

if(Input.GetKeyDown(KeyCode.LeftArrow))
{
    transform.position -= camera.transform.right;
}
person Imapler    schedule 29.08.2014
comment
Привет @Imapler. Спасибо, что нашли время опубликовать фрагмент кода. Что ж, я реализовал следующий код в соответствии с вашим примером, и он работает нормально в режиме воспроизведения Unity, но не при сборке для Android. В Android у меня это работает только для левого-правого. Вот код для всех GUI.Buttons: Левая кнопка: transform.position += target.transform.right; Правая кнопка: transform.position -= target.transform.right; Кнопка вперед (вверх): transform.position += target.transform.up; Кнопка назад (вниз): transform.position -= target.transform.up; Что может быть не так в сборке Android? - person CodeBugging; 29.08.2014
comment
Что происходит, когда вы пытаетесь переместить его вверх или вниз на Android? - person Imapler; 29.08.2014
comment
Когда в сборке андроида вверх или вниз (вперед, назад) объект остается на месте. Он вообще не двигается, как ни странно, поскольку скрипт кажется в порядке. - person CodeBugging; 29.08.2014
comment
Переменная, которую вы называете target в transform.position += target.transform.up; Вы уверены, что это ссылка на правильную камеру. Это должна быть камера, относительно которой вы перемещаете модель пола. - person Imapler; 29.08.2014
comment
Целью является модель пола, и все скрипты панорамирования привязаны к ней. В сцене активна только одна камера, и этот игровой объект (пол модели) движется в перспективе камеры. Так вот, не могу понять, что не так и в андроиде не работает, а в плей режиме работает. - person CodeBugging; 29.08.2014
comment
Попробуйте изменить transform.position += target.transform.up; to transform.position += Camera.main.transform.up; - person Imapler; 30.08.2014