Помимо обычного «сёрфинга» в интернете (например, обзор сайтов, чтение новостей, проверка/отправка почты) и просмотра/прослушивания онлайн-видео и музыки, юзер также может использовать свой интернет-браузер в качестве «игрового пространства». А благодаря специальному плагину Unity Web Player пользовательский браузер и вовсе способен превратиться в «мультимедийную игровую площадку».
- 2 Перечень браузеров с поддержкой технологий Unity3D (Unity Web Player)
- 3 Установка и настройка Unity Web Player для браузера Internet Explorer
- 4 Установка и настройка Unity Web Player для браузера Mozilla Firefox
4.1 Браузеры без поддержки технологии Unity3D: как выйти из ситуации
4.1.1 Видео: как активировать плагин Unity Web Player в браузере Google Chrome через NPAPI
Что это такое
Игровой движок Unity — инструмент, улучшающий воспроизведение сетевых игр. Платформа использовалась для разработки трехмерных игр и приложений. Внимательный читатель подумает. Нужно скачать браузер с поддержкой Unity Web Player. Это не так. Разработчики создали дополнение, помогающее воспроизводить игры в браузере. Unity — плагин, запускающий игровые приложения и проигрывающий масштабированные трехмерные сцены. Дополнительный софт устанавливать не нужно. Используется в соцсетях, для открытия 3D приложений.
Способ 1. Загрузка EXE-файла
Чтобы установить приложение Юнайти Web Player для Оперы, выполним следующие шаги.
- Зайти на официальный сайт разработчика плеера. Нажать на кнопку загрузки.
- После скачивания, запустить файл «UnityWebPlayer64.exe» из места загрузки.
- Принять условия лицензии и следовать инструкции установщика для завершения инсталляции.
Что делать, если тормозит браузер Опера
- Перезагрузить ПК.
Приложение устанавливается и внедряется в систему, как кодек. Отображения окна программы или других внешних изменений после инсталляции не последует. Если Опера была открыта во время установки, необходимо перезапустить ее и открыть любимую игру.
Что сделать в первую очередь
Описанные действия будут одинаковый для любого обозревателя. Перейдите по адресу: https://unity3d.com/ru/webplayer. Нажмите «Загрузить».
Нажмите два раза ЛКМ по инсталляционному «exe» файлу. Начнется установка. Согласитесь с лицензией.
Путь для установки выбирать не нужно.
Инсталляция пройдет автоматически. Нажмите «Finish».
Internet Explorer активирует плагин автоматически. Дополнительных настроек не нужно.
Unity Doorstop
За внедрение в код Unity отвечает библиотека UnityDoorstop-BSIPA. Она лежит среди файлов BSIPA и написана на чистом C. UnityDoorstop-BSIPA (исходный код) — это тоже форк, оригинальный проект можно найти здесь. Далее для простоты буду вместо UnityDoorstop-BSIPA писать Doorstop. Лозунгом Doorstop является фраза “Run managed code before Unity does!”, что в примерном переводе звучит как “Запускай управляемый код до того, как Unity сможет это сделать”. Напомню, что “управляемый код” — это в нашем случае код C#. Выше мы уже выяснили, что ядро движка Unity написано на C++, а пользовательские скрипты для игровой логики и некоторые части самого Unity — на C#. Значит, Doorstop каким-то образом позволяет нам вмешаться в логику, когда ядро Unity уже загрузилось, а C#-скрипты — еще нет.
Когда мы запускаем игру на Unity (например, Beat Saber.exe), то в память одной из первых загружается библиотека UnityPlayer.dll. Она прилагается ко всем Unity-играм и отвечает за запуск и выполнение самой игры. У этой библиотеки есть таблица импорта, в которой говорится, что UnityPlayer использует функцию GetProcAddress из библиотеки kernel32.dll. GetProcAddress — это функция WinAPI, которая возвращает адрес функции из определенной библиотеки по ее названию. Я не видел исходного кода Unity, но судя по тому, что я видел в BSIPA и Doorstop, в UnityPlayer должно быть что-то вроде такого:
mono_dll = LoadLibrary(“Mono.dll”); init_mono = GetProcAddress(mono_dll, ”mono_jit_init_version”); mono = init_mono(…); // дальше используем mono, чтобы загрузить и запустить код игры
mono_jit_init_version — это функция, которая отвечает за инициализацию и запуск Mono. Подробнее можно прочитать здесь. Doorstop вмешивается в этот процесс. Делается это в два шага.
Шаг 1. Проксируем GetProcAddress
Когда библиотека Doorstop.dll загружается в память компьютера, вызывается ее DllMain и, если reasonForDllLoad == DLL_PROCESS_ATTACH, то выполняется код, который в упрощенном виде выглядит так:
HMODULE targetModule = GetModuleHandleA(«UnityPlayer»); iat_hook(targetModule, «kernel32.dll», &GetProcAddress, &hookGetProcAddress);
Полный код DllMain, полный код iat_hook
Этот код находит в памяти уже загруженную библиотеку UnityPlayer.dll, берет ее таблицу импорта (Import Address Table, IAT), находит в ней GetProcAddress из kernel32.dll и заменяет ее на нашу функцию hookGetProcAddress из Doorstop.dll. hookGetProcAddress в упрощенном виде выглядит так:
void * WINAPI hookGetProcAddress(HMODULE module, char const *name) { if (lstrcmpA(name, «mono_jit_init_version») == 0) { init(module); return (void*)&ownMonoJitInitVersion; } return (void*)GetProcAddress(module, name); }
Полный код hookGetProcAddress
Подробнее про IAT Hooking можно прочитать здесь. Получается, что hookGetProcAddress проксирует все вызовы GetProcAddress. Прокси-функция смотрит название функции, которую у нее запрашивают. Если это НЕ mono_jit_init_version, то hookGetProcAddress просто вызывает настоящую GetProcAddress и возвращает то, что у нее попросили, тем самым не мешая нормальной работе. Если у нее запрашивают mono_jit_init_version, то тогда она возвращает переопределенную функцию ownMonoJitInitVersion. Пользуясь случаем, прокси-функция получает указатель на библиотеку, в котором ищется mono_jit_init_version, и берет из нее настоящие функции Mono с помощью GetProcAddress (внутри init(module);):
/** * brief Loads Mono C API function pointers so that the above definitions can be called. * param monoLib Mono.dll module. */ inline void loadMonoFunctions(HMODULE monoLib) { // Enjoy the fact that C allows such sloppy casting // In C++ you would have to cast to the precise function pointer type #define GET_MONO_PROC(name) name = (void*)GetProcAddress(monoLib, #name) // Find and assign all our functions that we are going to use GET_MONO_PROC(mono_debug_domain_create); GET_MONO_PROC(mono_domain_assembly_open); GET_MONO_PROC(mono_assembly_get_image); GET_MONO_PROC(mono_runtime_invoke); GET_MONO_PROC(mono_debug_init); GET_MONO_PROC(mono_jit_init_version); GET_MONO_PROC(mono_jit_parse_options); GET_MONO_PROC(mono_method_desc_new); GET_MONO_PROC(mono_method_desc_search_in_image); GET_MONO_PROC(mono_method_signature); GET_MONO_PROC(mono_signature_get_param_count); GET_MONO_PROC(mono_array_new); GET_MONO_PROC(mono_get_string_class); GET_MONO_PROC(mono_string_new_utf16); GET_MONO_PROC(mono_gc_wbarrier_set_arrayref); GET_MONO_PROC(mono_array_addr_with_size); GET_MONO_PROC(mono_object_to_string); GET_MONO_PROC(mono_string_to_utf8); GET_MONO_PROC(mono_dllmap_insert); GET_MONO_PROC(mono_free); }
Шаг 2. Переопределеяем mono_jit_init_version
ownMonoJitInitVersion сначала вызывает настоящую mono_jit_init_version, чтобы создать Mono. Затем она с помощью Mono загружает сборку IPA.Injector.dll и запускает из нее статический метод Main. В (очень) упрощенном виде код ownMonoJitInitVersion выглядит так:
void *ownMonoJitInitVersion(const char *root_domain_name, const char *runtime_version) { void *domain = mono_jit_init_version(root_domain_name, runtime_version); // Load our custom assembly into the domain void *assembly = mono_domain_assembly_open(domain, dll_path); // dll_path — это путь к IPA.Inhector.dll // Get assembly’s image that contains CIL code void *image = mono_assembly_get_image(assembly); // Create a descriptor for a random Main method void *desc = mono_method_desc_new(«*:Main», FALSE); // Find the first possible Main method in the assembly void *method = mono_method_desc_search_in_image(desc, image); mono_runtime_invoke(method, NULL, args, &exception); return domain; }
Полный код ownMonoJitInitVersion
Мы уже рассмотрели выше, что IPA.Injector содержит код, который внедряет плагины в Beat Saber. После того, как IPA.Injector завершает свою работу, ownMonoJitInitVersion отдает Mono в Unity. Unity даже не в состоянии понять, что что-то было не так. Если б он вызвал настоящую mono_jit_init_version, то он бы получил Mono и начал бы дальше с ним работать. Если Unity запускает переопределенную ownMonoJitInitVersion, то он тоже получает Mono — он просто не в курсе, что этим Mono успели воспользоваться для чего-то еще.
Обозреватели без поддержки технологии
Поддерживают Unitu3D браузеры: Internet Explorer, Amigo и Safari. Как запустить в других браузерах. Скачайте и установите старую версию обозревателя. Для:
Возможные проблемы и пути решения
К недостаткам дополнения можно отнести отсутствие интеграции с Yandex браузером, Chrome, Orbitum, UC браузером, Maxthone.
Во всем прочем, это необходимая и простая в установке утилита, позволяющая погрузиться в мир современных интернет-игр с 3D графикой и широким функционалом возможностей. Но без проблема никуда не денешься, и с веб плеером юнити бывают проблемы. Просто не запускается игра, отказывается грузиться в браузере и все. В таких случаях обычно начинаешь расстраиваться.
Но не стоит отчаиваться. Давайте постараемся решить эти проблемы, если вы конечно же используете браузер который поддерживает технологию unity. В других случаях все ниже перечисленные манипуляции будут тщетны.
И не забываем, что технологию unity 3dweb player поддерживают только браузеры: Амиго, Firefox, Opera, Internet Explorer и Safari.
2. Отключить антивирус. Отключите Ваш антивирус, и расширения в браузере от этого антивируса, в некоторых случаях антивирус мешает нормальной работе юнити плееру.
3. Нужно удалить Unity 3Dweb Player. Удаляем расширение через Программы и компоненты для windows 7 и Установка и удаление программ для windows 10.
4. Очистить кэш юнити плеера, сделать это можно через браузер.
Попадаем в настройки расширения юнити для браузера. далее выбираем «Delete All» и снова выбираете «Delete All» как показано на картинке ниже:
5. Нужно очистить кэш браузера. Можете зайти сочетанием клавиш Ctrl+Shift+Del, выбрать очистить историю, «за весь период» и нажать очистить. Дождаться очистки и выйти с настроек.
6. Почистить системные и временные файлы windows с помощью ccleaner.
Качаем программу CCleaner с офф.сайта:
Заходим в программу, выбираем Очистка > Windows > Очистка. Можете сначала нажать на Анализ а потом уже на очистку.
Исправить проблемы с реестром windows. Тем же самым ccleaner нужно устранить проблемы с реестром. Это несколько требование а совет. И возможно не столько действенный способ, как решит некоторые проблемы в windows.
7. Скачиваем с сайта unity 3d web player и устанавливаем
Обратите внимание, установку лучше производить в самый последний момент, когда проделаете все шаги выше
Дистрибутив установки:
Запускаем игру и наслаждаемся! Должно все работать.
Давайте подведем итоги. Мы с Вами разобрались, как скачать Unity 3D Web Player для игр Вконтакте, на примере игры Контра Сити. Игрушка популярная и бывают случаи, что не запускается. Но мы теперь знаем, как с этим бороться.
Надеюсь статья была вам полезна, вы смогли скачать веб плеер юнити, установить, а при возникновении проблем смогли решить их с помощью данного руководства.
Способ для установки на Firefox
Если нет желания использовать устаревший обозреватель, существует способ активировать работу плагина. В адресной строке пропишите:
Далее:
Пропишите:
Установите значение как на скриншоте: Активируйте созданный конфигурационный файл. Нажмите на нем два раза ЛКМ. Значение изменится на «True». Перезапустите обозреватель. Плагин будет активироваться автоматически при необходимости.
Устаревшие версии браузеров с поддержкой Unity
Ниже представлены популярные браузеры и их последние устаревшие
на текущий момент версии, которые все еще поддерживали Unity Player. Обновленные версии интернет-обозревателей
отказались от поддержки Юнити полностью
.
Opera
(версия
36
и старее)
Mozilla Firefox 32 бит
(до
52
версии включительно)
Google Chrome
(до
44
версии)
Яндекс.Браузер
(
16
версия и ниже)
Использовать устаревшие версии браузеров для воспроизведения Юнити-игр не рекомендуется. Главная причина — интернет-обозреватели, не обновленные до актуальных версий, могут иметь уязвимость системы безопасности
.
Установка и активация Unity Player в браузере Internet Explorer
Плагин поддерживается версией браузера Internet Explorer 11. На более ранних версиях, установка не тестировалась.
Сначала нужно дважды кликнуть мышкой по файлу UnityWebPlayer.exe
, предварительно скачанному с официального сайта, после чего традиционно принять лицензионное соглашение, а затем завершить установку плагина на компьютер, нажав кнопку «
Finish
».
В интернет-обозревателе Internet Explorer 11 плагин Юнити Веб Плеер включается автоматически
, не требуя никаких дополнительных настроек, и даже опций таких в меню браузера не предусмотрено. Все что нужно сделать, это запустить какое-нибудь браузерное 3D-приложение и наслаждаться потрясающей графикой.
Установка и активация Unity Player в браузере Mozilla Firefox (до 52 версии)
В популярнейшем браузере Firefox веб-плеер Unity будет отлично работать на версиях до 52. Начиная с 53 версии
в Mozilla Firefox поддержка всех плагинов NPAPI была удалена.
Руководство по установке (для версии Firefox 50.0.2)
Установив плагин на свой компьютер, откройте веб-обозреватель и нажмите на значок с изображением решетки в верхнем правом углу.
В раскрывшемся меню необходимо выбрать иконку с надписью: «Дополнения»
, после чего откроется страничка браузера со всеми установленными на нем расширениями и службами. В меню слева выберете опцию:
«Плагины»
. Найдите в списке установленных плагинов
Unity Player
, наведите курсор мыши на меню справа, и выберите параметр: «Всегда включать». Если по каким-либо причинам вам понадобится отключить плагин Юнити, в том же меню можно выбрать опцию: «Никогда не включать», и плагин будет полностью деактивирован.