本日、AROWのオープンテストバージョンが公開されました!
発表・事前登録されて以来、どんなSDKになるか期待していたので早速使ってみます。
AROWとは
位置情報・3Dマップを利用してARやゲームアプリの開発ができるUnity SDKです。
株式会社ドリコムの新規事業開発部門「DRIP(ドリップ)」部が手掛けているそうです。
なお、ドリコムさんといえば・・・きららファンタジア!
NEW GAME!、ゆるキャン△、スロウスタートなど、きらら作品のキャラクター達が作品を越えてコラボする夢の作品です。
jyukoはきららファンタジアを応援しています。
追伸:★5ひふみんの専用ぶきと★5ねねっちの実装を心よりお待ちしております。
さて、話を元に戻しましょう。
AROWは2019年4月現在、オープンテストバージョンとして公開されています。
テストバージョンとあって、商用・非商用・個人・法人を問わず、比較的自由に利用できるライセンスになっています。
アプリとしてリリースする場合、AROWの著作権表示が求められているので、きちんと守りましょう。
また、地図データにOpenStreetMapが使われており、OSMのクレジット表示も必要になります。
サンプルを動かす
無料のデベロッパー登録を行うと、SDKダウンロードのページからzipファイルがダウンロードできるようになり、解凍するとUnitypackageが格納されています。
SDKをダウンロードしたら、AROWスターティングガイドに沿ってサンプルを実行していきます。
https://arow.zendesk.com/hc/ja/categories/360001495392-AROW%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%AC%E3%82%A4%E3%83%89
まず、Unityで新規プロジェクトを作成して、ArowSDK.unitypackage
をインポートします。
次にAssets/ArowSample/_StartScene
とAssets/ArowSample/Scenes/以下
のScene達をScenes In Buildに追加していきます。
一瞬、どうやるんだ?と思いましたが、ドラッグ&ドロップで追加できたんですね(知らなかった)
スターティングガイドではScripting Runtime Version
を.NET 4.6
にするという手順がありましたが、Unity2019.1.0f2ではデフォルトが.NET 4.x
になっており、変更なしでビルドは通りました。
プラットフォームをiOSにして、実機で動かしてみました。
AROWのサンプル動かしてみました。とりあえず、スマホでもサクサクなのでよい。#AROW pic.twitter.com/LpMJWu63ga
— jyuko (@jyuko49) 2019年4月23日
Android実機でも試して、問題なく動作することを確認。
サンプルの構成を理解する
Scene_WalkInCreatedMapを参考にして、サンプルが行っている処理を理解していきます。
SceneのHierarchyを見ると以下のようになっており、GameMainにアタッチされたスクリプトArowSampleGameMain_RouteSearch.cs
が3Dマップを生成する処理を行っていることがわかります。
ArowSampleGameMain_RouteSearch.cs
が何をしているかというと、Initialize()
でArowDemoMain.cs
をAddComponentしています。
private ArowDemoMain arowDemoMain; void Start() { Initialize(); } private void Initialize() { ... arowDemoMain = gameObject.AddComponent<ArowDemoMain>(); }
Update()
の処理はstate
に応じて処理が分かれているのですが、じっと眺めていると、arowDemoMain.Initialize()
、arowDemoMain.CreateRoads()
、arowDemoMain.CreateBuildingsNonCollider()
を順に実行していることが読み取れます。
ここまでの処理をトレースするため、新規のシーンで一から作成してみます。
GameObjectを作成し、
動作テスト用のスクリプトArowTest.cs
をアタッチし、
ArowTest.cs
に以下のコードを書きます。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ArowTest : MonoBehaviour { void Start() { var arowDemoMain = gameObject.AddComponent<ArowSampleGame.SampleScripts.ArowDemoMain>(); arowDemoMain.Initialize(); arowDemoMain.CreateRoads(); arowDemoMain.CreateBuildingsNonCollider(); } }
Unity Editorで実行してみると・・・、
3Dマップが表示されました。
実行時のSceneでは、road_parent
、building_parent
というGameObjectが動的に作成されており、この中に道路と建物のメッシュが格納されているようです。
もうちょっと見てみる
ArowDemoMain.cs
ではどういう処理をしているんでしょうか。
マップデータは.arowmap
ファイルから読み込んで、arowMapObjectModel
を生成しています。データはサーバから配信も可能だと思います。
private readonly string AROW_FILE_NAME = "shibuya.arowmap"; public void Initialize() { // AROWマップデータの読み込み var filePath = Path.Combine(Application.streamingAssetsPath, AROW_FILE_NAME); mapDataBytes = File.ReadAllBytes(filePath); arowMapObjectModel = ArowMapObjectModel.LoadByData(mapDataBytes); }
サンプルのファイルサイズは数MBのオーダーです。
ビルの生成では、先程のarowMapObjectModel
を用いてメッシュを生成しているようです。
// 「BuildingのMesh生成」に必要な設定を行う var buildingMeshCreator = new BuildingCreator .Builder(arowMapObjectModel.BuildingDataModels) .SetWorldCenter(worldCenter) .SetWorldScale(MapUtility.WorldScale) .SetConfig(config) .IsExtractWithTaskAsync(true) .SetOnMeshBuildType(BuildingCreator.BUILD_TYPE.BUILDING) .SetOnMeshCreatedCallBack((BuildingDataModelWithMesh buildingDataWithMesh) => { // Mesh生成が完了するたびに、そのmeshをGameObject化する CreateBuildingMeshScripts.CreateBuildingGameObject(buildingDataWithMesh, p.transform, worldCenter, MapUtility.WorldScale, config); }) .SetOnCompletedCreateMeshCallBack((List<BuildingDataModelWithMesh> list) => { // 全てのmeshを生成し終えたら、state切り替え isEndOfFunction[MAP_CREATE.BUILDING] = true; }); // 「BuildingのMesh生成」の開始 buildingMeshCreator.Build();
ここで使われているAPIは、スターティングガイドのサンプルAPIの紹介でも軽く触れられており、あとはリファレンスを読んでくださいとのこと。
とりあえず、3Dマップが表示されるところまではできたので、リファレンスを読みつつ、AR表示などやってみたいと思います。