Основная работа по разработке моего ключевого камня 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 г.