Начиная с версии 2018.3 Unity позволяет добавлять .java файлы в проект Unity, и они компилируются при сборке проигрывателя Android.
1) Скопируйте выходной файл UnityAndroidLocation.java в каталог Активы / Плагины / Android в вашем проекте Unity.
2) Перейдите: [Файл]> [Настройки сборки]> [Настройки игрока]> [Плеер] и скопируйте имя пакета.
3) В обоих классах найдитеи замените "ual.ual.ual" имя пакета на то, которое вы скопировали на шаге 2) .
"UnityAndroidLocation.cs" класс:
using UnityEngine;
public class UnityAndroidLocation : MonoBehaviour
{
#if UNITY_ANDROID || UNITY_EDITOR
private static AndroidJavaObject plugin = null;
#endif
// Use this for initialization
void Awake()
{
#if UNITY_ANDROID && !UNITY_EDITOR
plugin = new AndroidJavaClass("ual.ual.ual.UnityAndroidLocation").CallStatic<AndroidJavaObject>("instance");
#endif
}
/// <summary>
/// <para>Open Google Map with Specific Adress.</para>
/// <para>Adress: [City, street]</para>
/// </summary>
/// <param name="Adress">Adress.</param>
public void GoogleMapWithAdress(string Adress)
{
plugin.Call("GoogleMapWithAdress", Adress);
}
/// <summary>
/// <para>Open Google Map with Specific Coordinate.</para>
/// <para>Zoom (integer number 2-23)</para>
/// </summary>
/// <param name="latitude">Latitude.</param>
/// <param name="longitude">Longitude.</param>
/// <param name="zoom">Zoom.</param>
public void GoogleMapWithCoordinate(float latitude, float longitude, int zoom)
{
plugin.Call("GoogleMapWithCoordinate", latitude, longitude, zoom);
}
}
"UnityAndroidLocation.java" класс:
package ual.ual.ual;
import android.content.Intent;
import android.net.Uri;
import com.unity3d.player.UnityPlayer;
public class UnityAndroidLocation {
private static UnityAndroidLocation _instance;
public UnityAndroidLocation() {
}
public void GoogleMapWithAdress(String Adress) {
String uri = "geo:0,0?q=" + Adress;
Intent mapIntent = new Intent("android.intent.action.VIEW", Uri.parse(uri));
UnityPlayer.currentActivity.startActivity(mapIntent);
}
public void GoogleMapWithCoordinate(float latitude, float longitude, int zoom) {
if (zoom < 2) {
zoom = 2;
}
if (zoom > 23) {
zoom = 23;
}
String uri = "geo:" + latitude + "," + longitude + "?z=" + zoom;
Intent mapIntent = new Intent("android.intent.action.VIEW", Uri.parse(uri));
UnityPlayer.currentActivity.startActivity(mapIntent);
}
public static UnityAndroidLocation instance() {
if (_instance == null) {
_instance = new UnityAndroidLocation();
}
return _instance;
}
}
Примечание: например, если имя вашего пакета - "com.my.app", результирующее имя будет выглядеть так:
Класс "UnityAndroidLocation.cs":
plugin = new AndroidJavaClass("com.my.app.UnityAndroidLocation").CallStatic<AndroidJavaObject>("instance");
Класс "UnityAndroidLocation.java":
package com.my.app;
import android.content.Intent;
import android.net.Uri;
import com.unity3d.player.UnityPlayer;