Основная работа по разработке моего ключевого камня Udacity VR Developer Nanodegree заключалась в разработке механики ходьбы на месте для HTC Vive. Раньше я пробовала механику качания рук, которая мне не нравилась, и вызвала тошноту у моего мужа. Для начала я сделал одну из вещей, которые у меня получается лучше всего: собирал данные! (В душе я всегда буду ученым.) Я решил, что не хочу требовать использования контроллеров для прогулки. Это освободит их для других целей. Для сбора данных по гарнитуре я написал простой скрипт для создания отчетов:
using
System.Collections;
using
System.Collections.Generic;
public
class
Reporting : MonoBehaviour {
string
path = "Assets/Logs.txt";
StreamWriter writer = new
StreamWriter(path, true);
writer.WriteLine("transform x, transform y, transform z, delta x, delta y, delta z");
current = transform.localPosition;
previous = transform.localPosition;
StreamWriter writer = new
StreamWriter(path, true);
current = transform.localPosition;
vel = (current - previous) / Time.deltaTime;
writer.WriteLine(transform.localPosition.x + ","+ transform.localPosition.y+ ","+ transform.localPosition.z + ","
+ delta.x + ","
+ delta.y + ","
+ delta.z);
previous = transform.localPosition;
Это собрало тонну данных. У меня было несколько человек, которые носили голову и ходили на месте. Потом я начал анализировать. Я изобразил движение по каждой оси относительно каждой оси:
X vs Y
X vs Z
Y vs Z
Затем я построил график зависимости каждой позиции от времени:
X
Y
Z
Я решил, что не хочу использовать данные прямого преобразования, поскольку они довольно изменчивы, особенно если игрок не ходил точно на месте. Я также зафиксировал изменение положения на последующих кадрах.
Дельта Х
Дельта Y
Дельта Z
Основываясь на этих данных, казалось, что дельта x будет лучшим измерением для основы алгоритма обнаружения шагов. Я создал алгоритм, обнаруживающий изменение дельта х с отрицательного значения на положительное. Каждый из них считается шагом. Что я на самом деле обнаружил, когда реализовывал это, так это то, что это работало прекрасно… если только игрок быстро не поворачивал голову из стороны в сторону. Поскольку я хотел, чтобы пользователи могли осмотреться во время опыта, это не сработало. К счастью, это сработало при применении переменной delta y. Это имело дополнительное преимущество: пользователи могли просто кивать головой, если они не хотели идти, но при этом позволяли им оглядываться.
Вторая часть ходьбы заключалась в том, чтобы перемещать игрока каждый раз, когда он обнаруживает шаг. Я решил использовать один из контроллеров в качестве указателя вперед, позволяя игроку осматриваться во время ходьбы. Движения игрока немного дергаются, но я обнаружил, что это с меньшей вероятностью вызовет VR-болезнь у пользователей, чем если бы движение было сглаженным. В будущей итерации я хотел бы иметь возможность откалибровать порог обнаружения шагов для каждого пользователя и позволить пользователю контролировать степень сглаживания движения.
Пожалуйста, подпишитесь на нас и поставьте лайк:
Первоначально опубликовано на www.exhaliastudios.com 16 декабря 2017 г.