Как включить OVRManager в сцену Three.js? - PullRequest
0 голосов
/ 06 ноября 2018

Я создал несколько демонстрационных приложений Three.js / Javascript, с которыми я экспериментирую в своем новом Oculus Go. Я пытаюсь включить Go Controller для работы с моими приложениями, и, согласно Oculus Developer Center, лучше всего включить OVRManager в мою сцену, чтобы у меня был доступ к этому API. Это звучит хорошо, но для всей документации (https://developer.oculus.com/documentation/unity/latest/concepts/unity-ovrinput/) я не вижу, КАК добавить OVRManager на мою сцену! Я раньше не работал с Unity, но из того, что я могу сказать в документации, не должно быть быть какие-либо проблемы с совместимостью (должно быть?)

Так что я думаю сделать что-то вроде:

<script src="OVRManager.js or something like that"></script>

и затем вызовите нужные мне функции, как я сделал с OrbitControls.js и другими внешними зависимостями.

Но, судя по всему, поиск в Google просто посылает меня кругами. Я вижу вопросы, заданные для C ++ и C #, но это бесполезно для меня. Как заставить этот API работать в моей сцене Three.js? Где я могу найти его и есть ли другой способ включить его?

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Создайте единую сборку WebGL и предоставьте необходимый API-интерфейс в качестве общедоступных методов в сценарии Unity, который вы присоединяете к GameObject.

Затем вы должны быть в состоянии следовать указаниям на Как вызывать функции Unity из javascript (скопировано ниже) о том, как вызывать эти методы из вашего кода JavaScript.

Возможно, вы сможете использовать UnityScript, который немного похож на JavaScript, для написания скрипта, если вы используете старую версию Unity. На момент написания этой статьи Oculus рекомендует версию 2017.4.11f1, которая, как я думаю, все еще может поддерживать UnityScript.

Одна из основных причин, по которым вы видите гораздо меньше информации о UnityScript, заключается в том, что Unity отошла от UnityScript и стала поддерживать только C #.

Но независимо от того, кодируете ли вы скрипт OVRManager в C # или UnityScript, Unity сделает методы вызываемыми из вашего JavaScript.

Вызов функций сценариев Unity из JavaScript

Иногда вам нужно отправить некоторые данные или уведомление в Unity скрипт из JavaScript браузера. Рекомендуемый способ сделать это это вызвать методы на GameObject s в вашем контенте. Если вы делаете вызов из плагина JavaScript, встроенного в ваш проект, вы можете используйте следующий код:

SendMessage(objectName, methodName, value);

Где objectName - имя объекта в вашей сцене; methodName есть имя метода в сценарии, в данный момент прикрепленного к этому объекту; значение может быть строкой, числом или может быть пустым. Например:

SendMessage('MyGameObject', 'MyFunction');
SendMessage('MyGameObject', 'MyFunction', 5);

SendMessage('MyGameObject', 'MyFunction', 'MyString');

Если вы хотите позвонить из глобальной области страницу встраивания, см. раздел «Видимость кода» ниже.

Видимость кода

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

Если у вас есть весь код JavaScript в виде плагинов .jslib внутри вашего проекта, тогда этот код JavaScript будет работать внутри та же область, что и для скомпилированной сборки, и ваш код должен работать так же, как в предыдущих версиях Unity (например, Следующие объекты и функции должны быть непосредственно видны из Код плагина JavaScript: Модуль, SendMessage, HEAP8, ccall и т. Д.).

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

var gameInstance = UnityLoader.instantiate("gameContainer", "Build/build.json", {onProgress: UnityProgress});

Затем вы можете отправить сообщение в сборку, используя gameInstance.SendMessage () или откройте объект модуля сборки, используя gameInstance.Module.

...