在Android的Unity3D中运行Google Maps App,立即开始导航

对于我正在构建的一个小示例,我试图通过打开诸如Application.OpenURL( "https://www.google.com/maps?daddr=Some+Address" );之类的URL,直接在Unity3D应用中运行Google Maps导航。尽管这会导致Google Maps应用正确打开,并为我提供了可能的路线的概述,但我想跳过这一点并立即开始导航,例如,使用最短的路线(或任何路线,这都没关系) 。我认为它可以usually be accomplished with Intents,但似乎Unity对此没有显示接口。

还有其他方法可以做到这一点吗?

kyo0616 回答:在Android的Unity3D中运行Google Maps App,立即开始导航

自版本 2018.3 起,Unity允许您将 .java 文件添加到Unity项目中,并在构建Android播放器时进行编译。

1)将输出 UnityAndroidLocation.java 文件复制到Unity项目中的 Assets / Plugins / Android 目录中。

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,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;
本文链接:https://www.f2er.com/3159385.html

大家都在问