Buffer icon Проекты

12 апреля 2016-го

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Unity Android plugin

Как часто можно встретить на stackoverflow вопросы, про доступ к галереи картинок, или как получить снимок с камеры, или как показать браузер, или как работать с Play Services... Да что уж, я и сам задавал такие вопросы. А всё потому, что к сожалению, в Unity нет (пока) многих специфичных функций, которые зависят от платформы. Но есть возможность подключать нативные плагины, что очень хорошо. С помощью плагинов, можно организовать любое взаимодействие которое поддерживается платформой.

Раньше, плагины можно было компилировать в JAR файлы, закидывать в папку Assets/Plugins/Android и использовать. В общем-то, так можно делать и сейчас, но это подойдет для самых простых плагинов, не использующих ресурсы, которые нужно сохранять в папку res. А на такие вещи Unity стала ругаться и выдавать сообщение в консоль:

OBSOLETE — Providing Android resources in Assets/Plugins/Android/res is deprecated, please move your resources to an Android Library. See «Building Plugins for Android» section of the Manual.

Короче, надо делать Android Library. Если интересует, как сделать плагин по «старой технологии», могу рассказать, а пока — как надо.

Шаг 1.

Скачиваем Android Studio и Android SDK. Тут особых проблем возникнуть не должно.

Шаг 2.

Создаем новый Android Project. Далее, создаем новый модуль: File → New → New Module → Android Library

Шаг 3.

Скопируем JAR файл с классами Unity в папку libs нового модуля. И добавим в раздел с зависимостями Gradle файла строку с классами Unity. Где искать файл classes.jar можно прочитать в документации.

dependencies {
    provided files('libs/classes.jar')
    ...
}

Шаг 4.

Для примера сделаем плагин который показывает всплывающие сообщения, тосты (Toast). Создадим новый класс Plugin и добавим туда один метод show с параметром message. Не самый удачный пример, потому что не используются ресурсы, но самый простой.

package com.mycompany.toast;

import com.unity3d.player.UnityPlayer;
import android.widget.Toast;

public class Plugin {
	// Показать сообщение
	static void show(final String message) {
		UnityPlayer.currentActivity.runOnUiThread(new Runnable() {
			@Override
			public void run() {
				Toast.makeText(UnityPlayer.currentActivity, message, Toast.LENGTH_SHORT).show();
			}
		});
	}	
}

Шаг 5.

В Android Studio, справа в меню Gradle, ищем название модуля которое задали при создании и далее: Tasks → build → assembleRelease. Модуль скомпилируется в AAR файл, то что и нужно.

Шаг 6.

Копируем AAR плагин в папку Assets/Plugins/Android с Unity проектом. И пишем небольшой интерфейс для вызова функции show.

using UnityEngine;
using System.Collections;

public class Toast : MonoBehaviour {

	// Показываем всплывающее сообщение
	public static void Show (string message) {
		#if UNITY_ANDROID
			using (var plugin = new AndroidJavaClass("com.mycompany.toast.Plugin")) {
				plugin.CallStatic("show", message);
			}
		#endif
	}

Шаг 7.

Закидываем приложение на Android устройство и проверяем. Все должно работать.

Это конечно не самый интересный пример, в следующей заметке напишу как получить изображение с камеры или альбома и использовать его в Unity. Или как отобразить HTML страницу в браузере...

28 марта 2016   · · ·
← Ctrl →
· · ·   25 апреля 2016