User Manual

Использование WebXR в PlayCanvas

Поддержка WebXR

Поддержка WebXR в браузерах пока не является универсальной. Ее можно проверить следующим образом:

if (app.xr.supported) {
    // WebXR поддерживается
}

Запуск XR сессии

API для входа в XR находится на компоненте камеры или XrManager в приложении. Чтобы начать представление VR, вы должны использовать метод startXr на CameraComponent и указать тип XR сессии, ссылочное пространство и дополнительный объект с дополнительными аргументами:

entity.camera.startXr(pc.XRTYPE_VR, pc.XRSPACE_LOCALFLOOR);

Это асинхронная операция и возможно только начать ее при взаимодействии пользователя, таком как нажатие кнопки, клик мышью или касание. Чтобы узнать, когда сессия началась, вы можете подписаться на событие start:

app.xr.on('start', function () {
    // XR сессия началась
});

Тип сессии или пространство ссылок может быть недоступно на определенной платформе, поэтому сессия не сможет запуститься, вызывая ошибку в обратном вызове и запуская событие error на XrManager:

entity.camera.startXr(pc.XRTYPE_VR, pc.XRSPACE_UNBOUNDED, {
    callback: function(err) {
        if (err) {
            // не удалось запустить сессию
        }
    }
});

Завершение сеанса XR

Выход из XR может быть инициирован различными способами. Вы можете инициировать выход из XR с помощью кода:

app.xr.end();

Также пользователь может выйти из XR через какой-то внешний процесс, например, кнопку "назад" в браузере. XrManager запустит события, связанные с окончанием сессии end:

app.xr.on('end', function () {
    // XR сессия завершилась
});

Типы XR

Каждая платформа может поддерживать разные типы сессий. Вот они:

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

if (app.xr.isAvailable(pc.XRTYPE_VR)) {
    // VR доступен
}

И вы также можете подписаться на события изменения доступности:

app.xr.on('available', function (type, available) {
    console.log('XR сессия', type, 'тип теперь', available ? 'доступна' : 'недоступна');
});

// или конкретный тип сессии
app.xr.on('available:' + pc.XRTYPE_VR, function (available) {
    console.log('XR сессия типа VR теперь', available ? 'доступна' : 'недоступна');
});

Позиция и ориентация камеры в XR

Когда вы используете XR, позиция и ориентация камеры перезаписываются данными из сеанса XR. Если вы хотите реализовать дополнительное движение и вращение камеры, вы должны добавить родительский объект Entity к вашей камере и применить ваши манипуляции к этому объекту.

Camera Offset

Луч источника ввода, а также позиция и вращение рукоятки и рук предоставляются в мировом пространстве.

Почему я не могу автоматически включить режим XR?

Вход в WebXR требуется браузерами для запуска пользовательским действием. Это означает, что это должно быть в ответ на нажатие клавиши, щелчок мыши или касание. По этой причине нет способа войти в XR сразу после загрузки страницы.

Экспериментальные функции

API WebXR постоянно развивается, и выпускаются дополнительные API, расширяющие набор функций XR. Хотя движок постоянно обновляется с интеграциями для API XR, некоторые функции могут появиться с задержкой. Разработчикам, желающим экспериментировать с новыми функциями, можно включить их, передав соответствующие флаги optionalFeatures. Имейте в виду: доступ к внутренним не задокументированным API подвержен изменениям движка, которые не гарантируют обратную совместимость. Вот пример включения экспериментального API для WebXR Layers:

app.xr.start(cameraComponent, pc.XRTYPE_VR, pc.XRSPACE_LOCAL, {
    optionalFeatures: [ 'layers' ],
    callback: function(err) {
        if (err) {
            console.log(err);
            return;
        }

        if (app.xr.session.renderState.layers) {
            // получить доступ к WebXR Layers
        }
    }
});

Issue Tracker

Tutorial Thumbnail

Entity

Material Asset

Material Inspector
Shader Editor

####### Node Inspector

######## Texture Inspector

######### Graph Inspector

########## Asset

########### Graph Editor

############ Assets

This site is translated by the community. If you want to get involved visit this page