[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

尝试在 Unity 中使用 GPS 和 Google Map API

感谢您的辛勤工作。
我是横滨办事处系统开发部的松山。

距离上次已经有一段时间了。
暂时远离 AR,这次我将写一下 GPS 功能和 Google 地图。
现在,让我们尝试制作这样的东西。

做什么

・使用 GPS 获取您的当前位置
・显示以该点为中心的地图图像
・如果您定期移动,则更新地图
・在地图上显示您当前位置的图标

获取位置信息

首先,可以使用LocationService 类获取位置信息。
参考定位服务

首先,开始更新位置。
另外,请务必启用指南针功能。
参考指南针

输入.location.Start(); 输入.compass.enabled = true;

启动后无法获取信息,等待下面的判断。

// 不允许使用 GPS if (!Input.location.isEnabledByUser) Yield Break; // 等待服务状态为运行 while (Input.location.status != LocationServiceStatus.Running) Yield return null;

如果不允许使用 GPS,您将无能为力。

顺便请注意,如果您没有在ProjectSettings中设置位置使用描述,您
将无法获取实际设备上的位置信息!

位置信息(纬度和经度)可以在LocationService的lastData中查看。

LocationInfo curr = Input.location.lastData;

获得当前位置(纬度和经度)后,从这些坐标获取地图图像。

地图显示

要使用 Google 地图,您需要提前在 Google 地图平台注册。 (解释省略)
Google Maps Platform 官方

如果您想显示简单的地图图像,可以使用 Google Static Map API 获取它。
获取以 GPS 获取的当前位置为中心的图像。

① 在URL中指定参数

// 基本 URL 字符串 url = @"https://maps.googleapis.com/maps/api/staticmap?"; // 中心坐标 url += "center=" + curr.latitude + "," + curr.longitude ; // 缩放 url += "&zoom=" + 18; // 默认为 0,因此将其设置为适当的大小 // 图像大小(最大 640x640) url += "&size=" + 640 + "x" + 640; // API 密钥(Google 地图平台颁发的密钥) url += "&key=" + GoogleApiKey;

② 使用UnityWebRequest下载地图图像

url = UnityWebRequest.UnEscapeURL(url); UnityWebRequest req = UnityWebRequestTexture.GetTexture(url);

③ 将下载的图像显示为精灵

// 纹理生成Texture2D tex = new Texture2D(MapSpriteSize, MapSpriteSize); tex.LoadImage(data); // 动态生成精灵(实例) mapImage.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width) , tex.height), Vector2.zero);


我们使用协程来定期更新这个过程。
不需要不断更新地图,因此仅当您从先前的坐标移动一定量或更多时才更新地图。
距离是这样计算的。

///<summary> /// 1度纬度(经度)的距离(米) ///</summary>私有 const float Lat2Meter = 111319.491f; 私有 float getDistanceFromLocation(LocationInfo curr, LocationInfo prev) { Vector3 cv = new Vector3((float)curr.longitude, 0, (float)curr.latitude); )prev.经度, 0, (float)prev.纬度); returnVector3.Distance(cv, pv) * Lat2Meter;

将光标置于当前位置

将光标放在地图上,然后朝您面对的方向旋转。

this.transform.localEulerAngles = new Vector3(0, 0, 360 - Input.compass.trueHeading);

就是这样。

成品看起来像这样。

概括

这是一个有点简单的话题,但我就在这里结束这篇文章。
这是我的粗略印象。
・Google Map API 有很多功能,所以使用它会很有趣。
・GPS的误差较大。
・如果是这样的话,代码就可以变得非常简单。

既然我们有 AR 和地图(GPS),下次我们尝试将它们结合起来创造一些东西。
好了,现在就这些了。

以防万一,我会将其上传到 GitHub。
统一示例

最后

我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

如果您觉得这篇文章有帮助,请点赞!
1
加载中...
1 票,平均:1.00 / 11
8,202
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

松山贤章

他长期在一家游戏开发公司工作,从事程序和项目管理工作。
2019年加入超越株式会社。
在横滨办事处工作。 主要负责服务器端开发工作的项目管理。
(有时编程)我的爱好是骑自行车(公路赛车)和观看赛马。