Unity3d webview для андроид

Содержание
  1. Unity3d webview для андроид
  2. About
  3. UniWebView
  4. OVERVIEW
  5. UniWebView is a Unity3D plugin built on native iOS/Android technology. It helps your users to enjoy web content and interact with your game through the web views.
  6. FEATURES
  7. MOBILE FIRST
  8. EDITOR SUPPORT
  9. WEB CONTENT
  10. LOCAL FILES
  11. NAVIGATING
  12. MESSAGING
  13. EASY INSTALL
  14. UI INTEGRATION
  15. VIDEOS
  16. PHOTOS
  17. LOCATION
  18. SUPPORT
  19. PRICES
  20. The purpose of UniWebView is saving developers from recreating the same thing. We contributed COUNTLESS HOURS to make the web views work great in Unity. We believe there is NO REASON for you to waste time on it again.
  21. REVIEWS
  22. In the past few years, we’ve helped thousands of clients bring web experience to their games successfully.
  23. SUPPORT
  24. Сборка плагинов для Android
  25. Сборка плагина для Android
  26. Использование вашего плагина из C
  27. Проекты библиотек для Android
  28. Развертывание
  29. Использование плагинов Java
  30. Сборка Java-плагина для Android
  31. Использование ваших Java-плагинов из нативного кода
  32. Использование Java-плагинов со вспомогательными классами
  33. Пример 1
  34. Пример 2
  35. Пример 3
  36. Лучшая практика при использовании плагинов Java с Unity
  37. Расширение Java-кода UnityPlayerActivity
  38. UnityPlayerNativeActivity
  39. Примеры
  40. Пример нативного плагина
  41. Пример плагина Java

Unity3d webview для андроид

Allow making hybrid Unity apps, based on web technologies. Windows, MacOS, Android and iOS compatible. With a communication gateway between Unity and Javascript.

This will allow a transparent WebView to be on top of Unity graphics, and will manage communication between Javascript and Unity runtime. Performances are pretty good on iOS and Android.

The WebView part is from this unity package. To enable WebView capabilites, download it and install it into your Unity project.

The WebView installer

To be able to use web view properly, html and other assets have to be copied to the device. This is done automatically by WebViewComponent.cs .

  1. Copy WebViewComponent.cs into Assets/App/Scripts/
  2. Create a new GameObject into your Unity scene.
  3. Select WebViewComponent as a new behavior.
  4. Enter web files to be copied on the device.
  5. Keep index.html on top so it’s automatically loaded on startup.

Web files will be copied from Assets/StreamingAssets/webview/ . Keep a flat file system (no folders).

The communication Gateway is a javascript file to load from the WebView. This file is available as an ES6 javascript module and is also available if you use Solidify lib.

Communicate from Javascript to Unity

Edit directly method messageFromWebView into WebViewComponent.cs (at line 120) to implement your actions into Unity.

You can also respond to javascript by a return

Note that you can send complex values thanks to JSON.

Return null if this is an async action. Then call webViewDirectHandler to send back answer to the WebView when it’s done :

  1. Init your gateway UnityGateway.initGateway() an handler is also available because this method is async.
  2. Call your action with UnityGateway.callUnity(‘myAction’, ‘a string parameters’, 5)

Important : Javascript is sending commands to Unity through URL parameters. So this is not advice to send Huge data or files. Also, there is no JSON encoding when message are going this way. Only string are received into Unity, you have to parse them manually.

Communicate from Unity to Javascript

Call this method from Unity to send a message to the WebView WebViewComponent.sendMessageToWebView(@»«) This is also JSON here.

Listen to messages in javascript, with :

If you are using Solidify lib, onMessage is a Signal :

Unity is sending commands to Javascript by injection, so there is nearly no technical limit about size or types.

To know if your webview is running into a Unity environment, check UnityGateway.isUnity == true . If you are not in Unity environment, every UnityGateway.callUnity will respond automatically with a parameter , to avoid blocking.

About

Allow making hybrid Unity apps, based on web technologies. Windows, MacOS, Android and iOS compatible. With a communication gateway between Unity and Javascript.

Источник

UniWebView

UniWebView is a modern web view component for mobile Unity3D games. Integrating web content to your games was never easier.

This site is for UniWebView 4.x. See here if you are looking for documentation of version 3.x.

OVERVIEW

UniWebView is a Unity3D plugin built on native iOS/Android technology. It helps your users to enjoy web content and interact with your game through the web views.

FUNCTIONALITY

Supporting full set of general web tasks. Including browsing pages, playing videos, interacting and more.

MODERN & FAST

Built on modern Unity and web technology. Smaller memory footprint and better performance.

BRILLIANT API

Well designed APIs and documentation for developers. Easy for both using and extending.

Читайте также:  Зеркало заднего вида android с видеорегистратором

FEATURES

UniWebView gives you a perfect choice for displaying web content in Unity3D games. More features than you expected and we are always improving.

Already using version 3? Check Version 4 Highlight to know what is new in UniWebView 4.

MOBILE FIRST

Support both iOS & Android. UniWebView works on iOS 9.0+ and Android 5.0+.

EDITOR SUPPORT

Debug web view in Unity Editor on macOS. Save most compiling time so you can verify your project quickly.

WEB CONTENT

Work with HTML5, CSS3 and JavaScript. Load all pages like in a native mobile browser.

LOCAL FILES

Load local HTML pages, images and styles.

Navigation between pages. Full control of your browsing events and contents.

MESSAGING

Send messages between web view and Unity. Control your Unity games by the web view.

EASY INSTALL

No change to your current configuration. Clean working files make installing and using quite easy.

UI INTEGRATION

Set position and size of web view. Cooperate with Unity UI canvas to decide view frame.

VIDEOS

Play HTML5 videos in web view. Support YouTube, Vimeo and even more.

PHOTOS

Capture a photo or choose one from device library, then upload it to your server.

LOCATION

Get user’s location just in the web view instead of calling any other native API.

SUPPORT

Full documentation and great help center to solve problems. Source code is also avaliable as an option.

PRICES

* Please confirm the supported targats before you purchase UniWebView.

The purpose of UniWebView is saving developers from recreating the same thing. We contributed COUNTLESS HOURS to make the web views work great in Unity. We believe there is NO REASON for you to waste time on it again.

UNITY ASSET STORE
UNIWEBVIEW STORE
SOURCE ACCESS

Already purchased a previous version? See Upgrade Pricing.

REVIEWS

In the past few years, we’ve helped thousands of clients bring web experience to their games successfully.

Christin Miller

UniWebView offers a robust, full-featured, and customizable solution for web view in Unity. It saves our team tons of time.

Martin Thompson

This plugin works good in my usecases, I have not yet experienced any problems on iOS/ Android. Very recommendable.

Liu Yuyang

I used this in many projects for iOS and Android meanwhile for it having the best performance and functionality relating to showing web views out of the many options I tried. It always did its job well!

SUPPORT

See our documentation and guide to get started.

Any questions? Visit the Help Center to get the answer or just submit a request.

Источник

Сборка плагинов для Android

На этой странице описан нативный код плагинов для Android.

Сборка плагина для Android

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

Если вы используете C++ (.cpp), при создании плагина вы должны убедиться, что функции объявлены с C-связями, чтобы избежать проблем с коверканьем имен.

Использование вашего плагина из C

После сборки, общая библиотека должна быть скопированы в папку Assets->Plugins->Android . Unity будет искать её по имени, когда вы определяете функцию вроде следующей в C#-скрипте:-

Обратите внимание, что PluginName не должно включать ни префикс (‘Lib’), ни расширение (‘.so’). Вы должны обернуть все нативные методы кода дополнительным слоем C#-кода. Этот код должен проверить Application.platform и вызывать собственные методы только тогда, когда приложение работает на реальном устройстве; фиктивные значения могут быть возвращены из С#-кода при работе в редакторе. Вы также можете использовать определения платформы для контроля зависимости компиляции кода от платформы.

Проекты библиотек для Android

Вы можете закинуть проекты прекомпилированной Android библиотеки в папку Assets->Plugins->Android . Прекомпилированная — значит все .java файлы должны быть скомпилированы в jar файлы, расположенные либо в папке bin/, либо в папке libs/ проекта. AndroidManifest.xml из этих папок будет автоматически объединяться с основным файлом манифеста при сборке проекта.

Смотрите Проекты библиотек для Android для большей информации.

Развертывание

Для кросс-платформенного развертывания, ваш проект должен включать плагины для каждой поддерживаемой платформы (т.е. libPlugin.so для Android, Plugin.bundle для Mac и Plugin.dll для Windows). Unity автоматически выбирает правильный плагин для целевой платформы и включает его с плеером.

For specific Android platform (armv7, x86), the libraries (lib*.so) should be placed in the following:

Использование плагинов Java

Механизм Android-плагина также обеспечивает Java, который будет использоваться для взаимодействия с ОС Android.

Сборка Java-плагина для Android

Есть несколько способов создать плагин Java, но результатом во всех случаях является файл .jar, содержащий файлы .class для вашего плагина. Один из подходов — скачать JDK, затем скомпилировать файлы .java из командной строки с javac. Это создаст файлы .class, которые затем можно упаковать в .jar из командной строки с утилитой jar. Другой вариант заключается в использовании Eclipse IDE вместе с ADT.

Читайте также:  Fortnite mobile версия андроид

Примечание: Unity ожидает Java-плагины, которые будут построены с использованием JDK v1.6. Если вы используете v1.7, вы должны включить “-source 1,6 -target 1,6” в параметрах командной строки для компилятора.

Использование ваших Java-плагинов из нативного кода

После того как вы создали свой ​​Java-плагин (.jar), вы должны скопировать его в папку Assets->Plugins->Android в проекте Unity. Unity упакует ваши файлы .class вместе с остальной частью Java-кода, а затем получить доступ к коду, используя Java Native Interface (JNI). JNI используется как при вызове нативного кода из Java, так и при взаимодействии с Java (или JavaVM) из нативного кода.

Чтобы найти Java код из нативной части, вы должны иметь доступ к Java VM. К счастью, доступ можно легко получить, добавив такую ​​функцию в свой C/C++ код:

Это все, что необходимо, чтобы начать использовать Java из C/C++. Полное объяснение JNI выходит за рамки этого документа. Однако его использование, как правило, включает в себя поиск определения класса, поиск метода конструктора ( ) и создание нового экземпляра объекта, как показано в этом примере:-

Использование Java-плагинов со вспомогательными классами

AndroidJNIHelper и AndroidJNI могут быть использованы для избавления от некоторых проблем с первичным JNI.

AndroidJavaObject и AndroidJavaClass автоматизируют множество задач и используют кэширование для ускорения вызовов к Java. Комбинация AndroidJavaObject и AndroidJavaClass надстраивается над AndroidJNI и AndroidJNIHelper , но также содержит много логики сама по себе (для управления автоматизацией). Эти классы также идут в ‘static’ версии для доступа к статическим членам Java классов.

Вы можете выбрать в зависимости от того, что вам подходит, будь то первичный JNI с помощью методов класса AndroidJNI , или AndroidJNIHelper вместе с AndroidJNI , и в конце концов AndroidJavaObject/AndroidJavaClass для максимальной автоматизации и удобства.

UnityEngine.AndroidJNI является оберткой для вызовов JNI доступных в C (как описано выше). Все методы этого класса являются статическими и соответствуют 1:1 Java Native Interface. UnityEngine.AndroidJNIHelper предоставляет вспомогательный модуль, используемый на следующем уровне, но предоставляется как открытые методы, потому что они могут быть полезны для некоторых частных случаев.

Экземпляры UnityEngine.AndroidJavaObject и UnityEngine.AndroidJavaClass соответствуют один-в-один экземпляру java.lang.Object и java.lang.Class (или их подклассов) на стороне Java, соответственно. Они по существу обеспечивают 3 типа взаимодействия с Java:-

  • Вызов метода
  • Получить значения поля
  • Установить значение поля

Call (Вызов) разделяется на две категории: Call (Вызов) ‘void’ метода, и Call (Вызов) метода, возвращающего не-void тип. Универсальный тип используется для представления типа возвращаемого методами, которые возвращают не-void тип. Get и Set всегда берут универсальный тип, представляющий тип поля.

Пример 1

Здесь мы создаем экземпляр java.lang.String, инициализируемстроку на свой выбор и извлекаем хеш значение для этой строки.

Конструктор AndroidJavaObject принимает минимум один параметр, имя класса, экземпляр которого хотим создать. Любые параметры после имени класса предназначены для вызова конструктора объекта, в данном случае строка “some_string”. Последующий Call (Вызов) метода hashCode() возвращает ‘int’, который мы используем в качестве параметра универсального типа в Call (Вызове) метода.

Примечание: Вы не можете создать экземпляр вложенного класса Java с помощью разделения точкой. Внутренние классы должны использовать разделитель $, и это должно работать в точечном и слэш формате. Так \[android.view.ViewGroup$LayoutParams или android/view/ViewGroup$LayoutParams могут быть использованы, где LayoutParams класс вложенный в класс ViewGroup\] .

Пример 2

Один из примеров плагина выше показывал, как получить директорию кэша для текущего приложения. Вот, как вы могли бы сделать то же самое на C# без плагинов:-

В этом случае, мы начинаем с AndroidJavaClass вместо AndroidJavaObject , потому что мы хотим получить доступ к статическому члену com.unity3d.player.UnityPlayer , а не создавать новый объект (экземпляр создается автоматически в Android UnityPlayer ). Затем мы получаем доступ к статическому полю “currentActivity”, но на этот раз мы используем AndroidJavaObject как универсальный параметр. Потому что фактический тип поля (android.app.Activity) — это подкласс java.lang.Object), и любой не-примитивный тип обязательно должен быть доступен как AndroidJavaObject . Исключением из этого правила являются строки, которые могут быть доступны непосредственно, даже если они не представляют собой примитивный тип в Java.

После чего это уже просто вопрос обхода Activity через getCacheDir() для получения объекта File, представляющего папку кэша с последующим вызовом getCanonicalPath() для получения строкового представления.

Конечно, в настоящее время вам не нужно делать этого, чтобы получить каталог кэша, поскольку Unity предоставляет доступ к директории кэша и файлов приложения с Application.temporaryCachePath и Application.persistentDataPath.

Читайте также:  What is deodex android

Пример 3

Наконец, здесь есть уловка для передачи данных из Java в код скрипта с помощью UnitySendMessage .

Класс Java com.unity3d.player.UnityPlayer теперь имеет статический метод UnitySendMessage , что эквивалентно функции UnitySendMessage в нативной части iOS. Он может быть использован в Java для передачи данных в код скрипта.

Здесь, однако, мы вызываем непосредственно из кода скрипта, который по сути передает сообщение Java. Это посылает обратный вызов нативному/Unity коду, чтобы доставить сообщение объекту с именем “Main Camera”. Этот объект имеет скрипт, который содержит метод, называемый “JavaMessage”.

Лучшая практика при использовании плагинов Java с Unity

Так как этот раздел в основном ориентирован на людей, которые не имеют большого опыта работы с JNI, Java и Android, мы предполагаем, что подход с AndroidJavaObject/AndroidJavaClass был использован для взаимодействия с кодом Java из Unity.

Первое, что нужно отметить, это то, что любая операция выполненная с AndroidJavaObject или AndroidJavaClass дорогая в отношении производительности (как первичный JNI подход). Крайне желательно, чтобы количество переходов между управляемым и нативным/Java кодом было минимальным, ради производительности, а также ясности кода.

У вас может быть метод Java, чтобы сделать всю фактическую работу, а затем использовать AndroidJavaObject/AndroidJavaClass для взаимодействия с этим методом и получения результата. Однако стоит иметь в виду, что вспомогательные классы JNI попробуют кэшировать столько данных, сколько возможно, чтобы улучшить производительность.

Сборщик мусора Mono должен освободить все созданные экземпляры AndroidJavaObject и AndroidJavaClass после использования, но желательно держать их в операторе using()<> , чтобы они удалялись как можно скорее. Без этого вы не можете точно знать, когда они будут уничтожены. Если вы установите значение AndroidJNIHelper.debug в true, вы увидите запись деятельности сборщика мусора в журнале отладки.

Вы также можете непосредственно вызвать метод .Dispose() для гарантии, что нет сохранившихся Java-объектов. Фактически C# объект может жить немного дольше, но в конце концов будет удалён сборщиком мусора mono.

Расширение Java-кода UnityPlayerActivity

С Unity Android можно расширить стандартный класс UnityPlayerActivity (основной класс Java для Unity плеера на Android, аналогично AppController.mm на Unity iOS).

Приложение может переопределить любые и все основные взаимодействия между ОС Android и Unity Android. Вы можете cделать это, создав новую Activity, которая является производной от UnityPlayerActivity(UnityPlayerActivity.java можно найти в /Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/src/com/unity3d/player на Mac и обычно в C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\src\com\unity3d\player на Windows).

Чтобы сделать это, сначала найдите classes.jar , поставляемый с Unity Android. Он находится в папке установки (обычно C:\Program Files\Unity\Editor\Data (на Windows) или /Applications/Unity (на Mac)) в подпапке PlaybackEngines/AndroidPlayer/bin . Затем добавить PlaybackEngines/AndroidPlayer/bin в папку с классами, используемыми для компиляции новой Activity. Полученный(-ые) .class файл(ы) должны быть сжаты в .jar файл, а этот файл надо добавить в папку Assets->Plugins->Android . Поскольку манифест определяет запуск Activity, его также необходимо создать новый AndroidManifest.xml. Файл AndroidManifest.xml также должен быть помещен в папку Assets->Plugins->Android (размещение пользовательского манифеста полностью заменяет манифест Unity Android по умолчанию).

Новая Activity может выглядеть, как в следующем примере OverrideExample.java:

И соответствующий AndroidManifest.xml будет выглядеть так:

UnityPlayerNativeActivity

Кроме того, можно создать свой собственный подкласс UnityPlayerNativeActivity . Это будет иметь такой же эффект, как создать подкласс UnityPlayerActivity но с улучшенной задержкой ввода. Помните, однако, что NativeActivity был введен в Gingerbread и не работает со старыми устройствами. Поскольку события касания/движения обрабатываются в нативном коде, окна Java обычно не увидят эти события. Существует, однако, механизм переадресации в Unity, который позволяет, чтобы события распространялись на DalvikVM. Для доступа к этому механизму, необходимо изменить файл манифеста, выглядит следующим образом:-

Обратите внимание на атрибут “.OverrideExampleNative” в элементе Activity и два дополнительных элемента мета-данных. Первый элемент мета-данных является инструкцией по использованию библиотеки libunity.so для Unity. Второй обеспечивает события, которые будут переданы пользовательскому подклассу UnityPlayerNativeActivity.

Примеры

Пример нативного плагина

Простой пример использования кода нативного плагина можно найти здесь

В этом примере демонстрируется как код С может быть вызван из приложения Unity Android. Пакет содержит сцену, которая отображает сумму двух значений, рассчитанную нативным плагином. Пожалуйста, обратите внимание, что вам нужен будет Android NDKдля компиляции плагина.

Пример плагина Java

Используемый в примере код Java можно найти здесь

В этом примере демонстрируется как код Java может быть использован для взаимодействия с ОС Android, и как C++ создает мост между C# и Java. Сцена в пакете отображает кнопку, при нажатии на которую выдается каталог кэша приложения, как это определено в ОС Android. Пожалуйста, обратите внимание, что вам понадобится JDK и Android NDK для компиляции плагинов.

Здесь находиться подобный пример, но на основе предварительно собранной библиотеки JNI, чтобы обернуть нативный код в C#.

Источник

Оцените статью