За основу взят этот ролик:
Создавать плагин для Unity мы будем в Android Studio, а только потом его подключать к Unity.
Шаг первый — создание плагина
1.
2. На экране выбора шаблона проекта нам будет достаточно использовать «No Activity»:
3. Заполняем все необходимые поля и жмём «Finish»:
4. Когда откроется проект, нужно будет добавить новый модуль:
▶ ▶
5. Выбираем из доступных вариантов «Android Library», после чего нажимаем «Next»:
6. Вводим название для модуля, например «AndroidLibrary», после этого можно нажать «Finish»:
7. В окошке «Project» раскрываем наш модуль androidlibrary\java и нажимаем правую кнопку мыши на com.example.androidlibrary, после чего выбираем ▶ :
8. Задаём название класса, выбираем для него тип «Singleton» и нажимаем «OK»:
9. В итоге будет создан файл MyPlugin.java:
package com.example.androidlibrary;
public class MyPlugin
{
private static final MyPlugin ourInstance = new MyPlugin();
public static MyPlugin getInstance()
{
return ourInstance;
}
private MyPlugin()
{
}
}
10. Изменим код, добавив в него публичный метод getElapsedTime для подсчёта прошедшего времени:
package com.example.androidlibrary;
import android.util.Log;
public class MyPlugin
{
private static final MyPlugin ourInstance = new MyPlugin();
private static final String LOGTAG = "dentnt.trmw.ru";
public static MyPlugin getInstance()
{
return ourInstance;
}
private long startTime;
private MyPlugin()
{
Log.i (LOGTAG, "MyPlugin is created");
startTime = System.currentTimeMillis();
}
public double getElapsedTime()
{
return (System.currentTimeMillis()-startTime)/1000.0f;
}
}
11. Теперь можно выбрать вариант сборки:
▶ ▶
12. Нажимаем
▶
13. Готовый файл плагина androidlibrary-release.aar можно будет найти здесь:
C:\Users\Denis\ApkProjects\Plugin4Unity\androidlibrary\build\outputs\aar\androidlibrary-release.aar
Шаг второй — подключение плагина в Unity
14. В дереве Проекта в папке Assets создадим папку Plugins, а в ней папку Android:
15. Копируем туда файл androidlibrary-release.aar из п.13.
16. В проекте Unity просто добавим на сцену куб:
▶ ▶
17. К кубу добавим скрипт RotateCube.cs, этот скрипт будет просто вращать куб:
using UnityEngine;
public class RotateCube : MonoBehaviour
{
float speed = 30f;
// Update is called once per frame
void Update()
{
transform.Rotate(speed * Time.deltaTime, 2 * speed * Time.deltaTime, -speed * Time.deltaTime);
}
}
18. На камеру Main Camera добавим скрипт PluginTest.cs:
using UnityEngine;
public class PluginTest : MonoBehaviour
{
const string pluginName = "com.example.androidlibrary.MyPlugin";
// Plugin getters
static AndroidJavaClass _pluginClass;
static AndroidJavaObject _pluginInstance;
public static AndroidJavaClass PluginClass
{
get
{
if (_pluginClass == null)
{
_pluginClass = new AndroidJavaClass(pluginName);
}
return _pluginClass;
}
}
public static AndroidJavaObject PluginInstance
{
get
{
if (_pluginInstance == null)
{
_pluginInstance = PluginClass.CallStatic<AndroidJavaObject>("getInstance");
}
return _pluginInstance;
}
}
private void Start()
{
Debug.Log("Elapsed time: " + getElapsedTime());
}
float elapsedTime = 0f;
private void Update()
{
elapsedTime += Time.deltaTime;
if (elapsedTime >= 5)
{
elapsedTime -= 5;
Debug.Log("Tick: " + getElapsedTime());
}
}
double getElapsedTime()
{
if (Application.platform == RuntimePlatform.Android)
{
return PluginInstance.Call<double>("getElapsedTime");
}
Debug.LogWarning("Wrong platform");
return 0;
}
}
19. Если теперь собрать проект и запустить его на смартфоне, то в Android Studio мы увидим записи в LogCat:
2020-05-10 22:57:44.778 2572-2591/? I/dentnt.trmw.ru: MyPlugin is created
2020-05-10 22:57:44.843 2572-2591/? I/Unity: Elapsed time: 0.0160000007599592
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
2020-05-10 22:57:49.917 2572-2591/? I/Unity: Tick: 5.11299991607666
Благодаря методу getElapsedTime() из плагина мы можем получать необходимые данные.
- WordPress: Ошибка в плагине WpDiscuz - 08.10.2024
- Windows 10: Уменьшить размер виртуальной машины WSL - 06.10.2024
- Windows 10: Событие EventID 63 в Журнале Приложений - 28.09.2024