zawazawa雑記

ARKit2.0の状態保存と端末同期を使ってARPetを作ってみた

やったこと

ARKit2.0がぼちぼち出てきます出ました。それに伴いより多くの人が簡単に

  • Persistent AR Experience / 状態保存
  • Multiuser AR Experience / 端末同期

を実装し、多くの人に届ける事ができるようになります。これをいち早くキャッチアップし、実装しようと思いました。

どうやったか

ただ実装するだけではつまらないと感じたので、システム全体の流れがわかるようなアプリケーションにしました。また、今回はAR表現の進歩で実現が可能になりそうな「ARPet」を作ってみることにしました。

開発環境

  • macOSX
  • Unity-ARKit-Pluginのarkit2.0_beta branch
  • iOS12
  • Unity2017.4.2
  • Photon Unity Network
  • Xcode10

状態保存

UnityARWorldMapシーンをそのものを使えば基本的に大丈夫です。 このシーンでやってることは、「検出した平面や空間情報を端末に保存するやで。ロードする時は端末に保存されてるファイルを読み込んで保存した時と同じ風景を探すやで」って感じです。

またこの方法ではオブジェクトの保存ができません。参考に↓

f:id:zawazawahtn:20180831181226p:plain

ARWorldmapのSave&Loadにオブジェクトを結びつけたい場合は自分でそのオブジェクトのTransform情報の入ったjsonファイルを作成する必要があるみたいです。他にいい方法があれば教えてください。

端末同期

個人的に鬼門でした。実装を始めた当初は公式でも言及していたSharedSpheresを使用するつもりだったのですが、実装を始めて間も無くこの記事が出てしまいました。

blogs.unity3d.com

そうです、SharedSpheresは今後死んでしまうunetを使用していたのです。

そこで今回はPhoton Unity Networkを使用することにしました。

具体的には、

  • ARWorldMapを作成して受信端末に送信するためにARWorldMapをシリアライズする
byte[] locWorldBytes = localWorldMap.SerializeToByteArray(); 
  • PhotonではRPCでバイト列を送受信できるので(可能な型)受信端末に送信する
photonViewWorld.RPC("ShareWorldMap", PhotonTargets.OthersBuffered, locWorldBytes); 
  • 受信端末で以下のコードが動き、バイト列がデシリアライズされてARWorldMapが復元される
[PunRPC]
void ShareWorldMap(byte[] world_bytes){
    ARWorldMap worldMap = ARWorldMap.SerializeFromByteArray(world_bytes); 
・・・
  • その後受信端末側でAR体験をするためのconfig情報(検出平面や検出平面のexpandをするかどうかなど)を設定したsessionを開始する

おわりに

こちらのアプリはメルカリでサマーインターンをした時に作成したものです。そちらの記事もよかったら読んで下さい。

zawazawahtn.hatenablog.com

© UTJ/UCL

メルカリSummer Internship 2018に参加してみた

長いことブログの更新をしていませんでした。というのもこの1ヶ月間、とてもありがたいことに株式会社メルカリのサマーインターン (詳細) に参加していました。この記事ではその経験をつらつら書いていきたいと思います。

今後メルカリで働きたい、雰囲気を知りたい、インターンで何をやっていたか気になる、という人たちにとって有益なものとなれば幸いです。

こんな感じの内容を書きます。

成果物に関しては別の記事で書くことにします。

メルカリに入ってみて

レベルが高い

まずこの一言につきます。会社のValueの一つとしても掲げられているように、皆さん「Be Professional」の意識が高い。個人的に結構びっくりしたことがあって、それは入社オリエンの時に言われた一言。

「Bottomに合わせない。必要な情報は自分で取ってくる。」

これを言える、言ってのけてしまうあたり最初はちょっとビビりました。なんか久しぶりのビシビシした空気を感じました。 もちろんインターン生に対しても求められるレベルは高く、「成果出してね笑」とも言われました(もらえる日給を考えれば至極当たり前・これを言われて俄然やる気出た)。

情報が転がってる

次にこれに驚きました。本当に情報が転がってるんです。技術的な話ではありません(技術的に足りない部分はネットなり本なり読んでください、それぐらいのことはできますよね、ってことだと思う)。

ここでいう情報とは、企業の売り上げとか新規プロジェクト、採用フロー、個人の日報などです。もちろん、インサイダー情報になるものもあるので扱いに慎重にならなければいけないのですが、社員はおろかインターン生にも見せてしまうのか...といった感じ。その分やはり企業への帰属意識とかも高まるでしょうし、無駄な権限のアレコレをしなくて済んで開発やコミュニケーションの効率が上がります。 強い攻めの姿勢を感じました。

下は歓迎会の様子

サマーインターンの様子

自分は今年から募集開始のR4DのXRコースに参加していました。他のコースとは違い、VR/ARに関するテーマを自分で持ってきてoutputする形式だったので本流のアプリには直接的には関わることがありません。しかしR4Dとしては自分たちが研究している技術領域でメルカリに貢献することを目指しています。

インターンの課題としては、インターン生(4人)それぞれの自由な持ち込み型のものでした。テーマとしては、

  • ARkit2を使ったデジタルペットアプリ(自分)
  • 音声信号を振動に変える触覚デバイスを使ったハプティクス体験の開発
  • Hololensでの人体テクスチャのリアルタイム取得・生成を用いた擬似幽体離脱体験
  • Android端末とUnityのシリアル通信ライブラリの開発とVRアプリケーションの開発

って感じでした。綺麗にテーマがVR/MR/AR/ハプティクスと別れていたのはメンターの@ikkouの計らいか...?

業務

基本的に10時~19時(?だったと思います)ですがわりと前後してました。かなり自由。朝会と夕会以外のMTG的なものは週一の全体会ぐらいで、会議に時間を取られるということは全くありませんでした(メンターさんが忙しそうでしたが)。集中できる環境でした。

インターン同期

チームの同期とよく昼ごはんとか行ってたのですが、ちょくちょく社内イベントで他のチームの同期とも顔を合わせられました。おかげで同期にどんな人がいて、どんなに優秀か知れて刺激になりました。

最終日の発表

さて次に、初日に「成果出してね笑」と言われた成果物発表です。1人約7分の発表で1ヶ月の成果をおさめるのがなかなか難しかったですが、どの人の発表を聞いていても勉強になりました。(とは言っても自分の知識ではアプリ側のフロントやバックエンドなどの話は3割ぐらいしか理解できませんでしたが...)

個人的に面白かったのがAIチームの人たちの発表で、商品の画像から自動で商品タイトルを生成する時に、名詞だけでなく商品固有のキーフレーズを抽出してそれも考慮して生成する、というものがあり感動しました。

そこで感じたのが、やはり自分たち(R4DXRチーム)のやってることはまだまだメルカリのビジネスの上に乗っかってないなと思いました。自分の突き詰めたい技術・世界とメルカリのビジネス領域でうまく合致するポイントを見つけてそこを皆さんに聞いて知って欲しいと感じました。

f:id:zawazawahtn:20180915173518j:plain:w400
発表の様子

こちらも合わせて読んでみてください。

mercan.mercari.com

毎日が楽しい

なんでかって言うと、毎晩どこかしらでパーティやら社内部活やらで盛り上がってるところです。

一番印象に残ってるのがコレ

マグロの解体ショー&流しそうめん大会

...最初は意味が分からなかった。一応プロダクトチーム全体の打ち上げ的な名目だったけどそれ以外の人たちもわんさかいて盛大なパーティになっていました。こーゆーイベントがたくさんあるのも、社内に外国からの社員の方がたくさんいて(それでも全然まだまだ日本人がほとんどですが)、異文化交流の一つの姿なのかなって思いました。

パーティが苦手な人もいるかとは思いますが、個人的にはこれはとてもありがたかったです。というのも、うまく進捗が産めなかった日も、一人で帰って落ち込んだままベッドに入るより、帰りがけに楽しいイベントがあれば明日も頑張ろうってなります。精神的に健全さが保たれました。いのちだいじに。

CEDEC2018参加してみた

f:id:zawazawahtn:20180827223138j:plain:w150

目次

CEDEC2018←こちらが公式サイトです。

参加に至った文脈としては、現在(2018/8)1ヶ月間サマーインターンに参加しているメ社のR4DXRチームで行く機会があったって感じです。

ゲーム・XRを中心とした現場の開発や研究のsessionを主に聞いてきましたが、結論として「とてもいい経験でした」。参加の機会をくださったメ社とR4DXRチームの皆さんには感謝です。

自分の聞いたsesisonはこちらです。インタラクションは全部やりました(多分)

  • [SIGGRAPH Asia×CEDECコラボセッション] SIGGRAPH Asia 2018 の楽しみ方
  • ハシラスが考えるこれからのVR
  • 「ジャンプチ ヒーローズ」「FINAL FANTASY XV」でのPhoton採用事例紹介
  • VRにおけるディープラーニング利用: 手の位置のみの簡易なモーションキャプチャのリアリティを向上する研究
  • 8000種類のカードを見分ける、ディープラーニングを使用した画像認識
  • Google マップで現実世界のゲームを作ろう
  • ミックスドリアリティ・アトラクション『PAC IN TOWN』におけるリアルとデジタルの融合を象徴する新たな遊び”collaborative play”の紹介とVRDC@GDC 2018に登壇して思ったこと
  • VR/AR/MRの融合:高実在感コンテンツの未来
  • Saya -Virtual Human Projects-
  • IT の未来を語る:PlayStation® x IT 教育がつくる次世代エンタテインメント
  • 空撮フォトグラメトリー技術とレーザースキャン技術の融合による広大な現実空間の3Dデータ化方法

セッションピックアップ

ハシラスが考えるこれからのVR

内容はこちらの記事の内容が包括的だと感じました。 jp.ign.com

ハシラスはゲームセンターなどに据え置ける大型のアトラクションを中心としたアーケードゲームを中心に開発を行なっているが、その文脈での未来を発表してくださった。 そこでは下の記事にみられる「オルタランド」を提唱しており、そこでは「別の自分になって、別の世界に行って、仲間と過ごすこと」ができるという。

www.moguravr.com

確かにこのようなアーケードゲームにおいて人件費は赤字直結の課題であるのでこれがうまく解決できればアーケードゲーム内のVRコーナーはもっと大きなものになると感じた。

ただ一方で、「別の自分になって、別の世界に行って、最高の一人の空間を楽しむ」という未来の可能性もあると感じてきていて、本来根暗の自分にはこっちの方がありがたかったりする。

VR/AR/MRの融合:高実在感コンテンツの未来

こちらはCygames Reserachの発表でした。

最高のXR体験をユーザーに提供するためには、

  • リアルだけ頑張ってもダメ(リアル脱出ゲーム的な)
  • バーチャルだけ頑張ってもダメ(HMD搭載型VRアトラクション的な)
  • 両方をシームレスに繋ぐ必要がある(これはとても共感できる)

日常の中の非日常などではなく、永遠に続く非日常こそユーザーが真に受け取りたいものだという仮定。 そのような強烈な体験をユーザーが体験するためには

  • 圧倒的な没入感
  • 圧倒的な実在感
  • 没入感と実在感の両立させるための取り組み(Hololensを使ったMRコンテンツ)

(ここで「実在感」とは例えばCGコンテンツが現実のコンテキスト・コンテンツと齟齬なく感じられること、と仰っていました。目の前にあたかもキャラがいる!みたいな)

取り組みとして「VR四騎士」を挙げての説明でした。(いち騎空士としてこのイベントは行っておきたかったなー。こちらの方の体験記がとてもリアルでよく伝わりました)

privatter.net

個人的な意見として、

  • この事例で行なったことは、リダイレクションの研究と逆行するもの
  • リダイレクションの研究は、いかに現実世界の形をVR空間内でごまかすかに主眼を置いたもの
  • ではVR空間でのリダイレクションを行なっているコンテンツは「実在感」を失ってしまうのか?そうは思わない。
  • コンテンツやユーザー体験で重視するポイントを洗い出し、「実在感」を出す部分と「現実世界を歪める」部分とを使い分けすれば良い
Saya -Virtual Human Projects-

www.youtube.com

telyuka←こちらが製作者の方たちのHPです。

正直自分はSXSWも行ってなくメディアを通してしか知らなかったので、直接(?)Sayaさんにお会いしたのは初めてでした。

とにかくこの一言に尽きる

「すっごく可愛いです!!!」

現在は「揺らぎ」と「不確実性」を内包する彼女にできることを模索中だそうで、今後の活動もチェックしたいです。

モーションの動きにもひと手間ふた手間かかっていて、一つのモーションをループさせるのに最初と最後のフレームでのつじつま合わせを極めていらっしゃいました。(よくあるキャラがピョンッて飛んじゃうやつ) まずボーンのつじつま合わせをし、それでも髪の毛や服のシワなどのシミュレートの結果に微妙なズレが生じてしまうのでそれもつじつま合わせをし、って感じでした。根気のいる作業です。

個人的な意見

  • あまりにもリアルすぎるところがこのプロジェクトの鋭いところ
  • ここまで来てようやく一般人にも伝わる凄さ、というのが辛い現実だと思っている
  • だからこそ一般に広がるチャンスを持っている
  • 不気味の谷超えてるな。。。
    • Q: 越えるためのテクニックは?
    • A:
    • →そんなに意識していない
    • →この年代の美しさ、可愛さは一番大事にしないといけない(思いが伝わる一言)
    • →ただひたすらに作り込みをする

インタラクション展示

導電繊維を用いた軽量かつ多彩な手形状計測用データグローブ

上司のツイートを引用

こちらが公式のページのようです。これは現状ハプティクデバイスではなく、指の曲げや指と指の接触判定を行え、また予めチップ的なものを埋め込まれているものを把持すれば自分が何を掴んでいるか把握することができる、といったものです。

各指に周波数の違う電流を流しているということでしたが、結構アバウトな作りでちゃんと周波数帯が別れて取得できるのはすごいな(素人並感)と思いました。

簡易脳波計を用いた「脳波VRゲーム」、「脳波MRゲーム」、「脳波VRライブ」

またしても上司のツイートの引用

おでこ二箇所と耳の後ろ一箇所(アース)の簡易的なものでしたが、初体験だったのでいい経験になりました。

説明の際に、「集中する」と反応するみたいなことを言われたのですが、「集中とはww」ってなりました笑。まあでも別のこと考えたり色々脳裏で想像してたりしたら反応したのでよかったです笑。

最後に

自分は敢えて一枚も写真を取らなかったのですが、すぐにこれはよくなかったなと思いました(見る方だけに集中しようとしていた)。なのでこれからはなるべく写真撮ってSNS発信しようと思います。

一緒に参加してきたインターン生の書いたレポートもありますのでこちらも参考に[FYI]

xsmiledur8x7.hatenablog.com

フォトグラメトリーやってみました

みなさん、フォトグラメトリーって知ってますか。 恥ずかしながら自分はついこの間知りました。とても恥ずかしかったので、払拭するために実際にやってみることにしました。

フォトグラメトリーとは

フォトグラメトリとは、3次元の物体を複数の観測点から撮影して得た2次元画像から、視差情報を解析して寸法・形状を求める写真測量のこと。 航空写真から地図の等高線を作成するために発達した手法で、最近ではデジタルカメラを用いた3次元測定機(3D CMM)に応用されている。(weblio辞書より)

らしいっす。はい、見せた方が早いっすね。こちらがフォトグラメトリーという技術を使って駅を3次元化したものらしいです。(お借りします)

使ったソフト・環境

  • AutodeskのRECAPとRECAP Photo
  • MeshLab
  • WindowsPC

を使って作成しました。また、こちらの記事を参考に進めました。ところどころ仕様?が変わってることころがあり、その差分を含めて説明したいと思います。

shiropen.com

製作フロー

  1. RECAPをダウンロード(自分はStudentの権限を使ってPro版を手に入れることができました)。また、テストデータセットとして97枚の井戸の写真がここに入ってます。

  2. このnew projectからphoto to 3Dを選択 f:id:zawazawahtn:20180818182004p:plain

  3. Create 3DObjectを選択 f:id:zawazawahtn:20180818182008p:plain

  4. 作成したオブジェクトの写真群を選択し、project titleを設定してcreate f:id:zawazawahtn:20180818182016p:plain

  5. するとMyCloudDriveに作ったprojectが作成されてダウンロードができるようになります f:id:zawazawahtn:20180818182024p:plain

  6. またweb上では3Dviewができるようになっています f:id:zawazawahtn:20180818182020p:plain

  7. .obj形式でダウンロードすることもでき、MeshLabなど3D編集ソフトへのimportなども可能です

研究室のデスク周りを3次元化してみた

とりあえず身の回りのものを3次元化してみようと思ったので、研究室の自デスク周りを撮ります。

  1. 動画をとってそこから画像を切り出します
    • やり方は色々あると思うのですが、自分は最終的にffmpegを使いました。フリーソフト色々試してみたけどどれもクソ。ffmpeg使いやすい。
  2. だいたい2分の動画をとって700フレームに切り出しました
  3. ちょっとここで不満点が。どうやらrecap photoは100枚の画像までしか扱えないようです。せっかく700枚も用意したのに...
  4. 仕方がないので100枚単位で3次元化させてみました。次やるときはこれに気をつけよう。。。

とここまでやってきたのですが、結果はどれもエラーが吐かれてしまいました。

なんでだろう。後から動画から手でスクショ撮ってたやつと混ぜて作ったら手動でスクショしたやつのみで3次元化されたから、なにやらffmpegが悪さしてる...? これは15枚入れて9枚が使用された結果です。

もうちょっと精度あげたい

せっかくなので、いい感じになるように動画ではなく手動でたくさんの写真を撮ります。どこまで精度が上がるのか知りたい。

  1. 手動で根気よく100枚写真を撮ります
  2. あとは同じフローで3次元化してやります
  3. 結構時間かかります(30分ぐらいかな)
  4. できた

前よりはたくさんの正しいメッシュが生成されてる感じ!だいたい100枚中50枚くらいがつかわれた感じだ。ちゃんと認識してくれる撮り方とかアングルが分かったので次やるときはもうちょいうまくできるかな。

写真から3次元空間を構築する技術は他にも方法が色々あって、今回はそのうちの1種類を試してみました。

おしまい

はじめてのさくひんてんじ

某大学の制作展という授業で作品展示をする機会があったので、そこでの色々な話をつらつら書きます。

www.iiiexhibition.com

そもそも

「制作展」とは、某大学の一年かけて行う授業で、メディアアート作品を中心に、何かしらを表現したい人たちが集まって互いに意見を出し合ってグループや個人で形にする、という授業です。

今回は本番である11月の展示に向けたpreのものとして7月に行われた展示について書いていきます。

ちなみにこの制作展は毎年名前が変わっており、今回は「Dest-logy」というタイトルです。

あとちなみにかつて落合陽一さんも参加していたようです。

つくったさくひん

今回自分らが作った作品がこちらです。本来は色々派手に音が鳴ります。

f:id:zawazawahtn:20180712002450j:plain

youtu.be

youtu.be

かるーく説明すると、 テクノロジーの力によって様々な力吸収した人間は、繁栄した明るい世界を実現するのか、それとも適合できずに崩壊してしまうのか。どっちに転ぶのだろうか。というストーリーを表現しています。

一応Gitに上げていますが、UnityでのGitを用いたチーム開発はあまりオススメしません笑

えられたこと・わかったこと

  1. Unity公式のpost processing behaviour はできる子ということ。一気に見栄えがよくなります。

    f:id:zawazawahtn:20180706195529p:plain
    Before

    f:id:zawazawahtn:20180706195552p:plain
    After

  2. プロトタイプはなる早で作るべし。

  3. 作品をどこまで説明してどこから体験者に想像させるかの設計が難しい。アート作品なのかゲーム作品なのかによって変わりそう。

  4. アート作品に振るかゲーム作品に振るかにした方が良い。(個人的に、ゲーム作品として土台を作成してそれにアート性を加える方が得意だと感じた)

  5. 作品作ると、「面白い」「ありがとう」と言われる回数がめちゃくちゃ多いからこっちも楽しい。

  6. 宣伝大事

    1. TwitterとかのSNS
    2. 口コミ
    3. 名刺や作品のビジュアルをかっこよく写したカード的なもの(持って帰れる用)
  7. デバッグキー大事

  8. 本番用にBuild大事

  9. 作品展示にアクシデントはつきもの。自分らの作品は全日程を通して非常に安定した挙動をしてくれて特にメンテナンスなどは必要なかったが、ハードウェアに凝りだすと闇を見ることになる。(ハード使った方が作品の規模も体験の質も随分変わるのでそこはトレードオフだと思う)

  10. 展示が終わった後の打ち上げが超が5個つくくらい楽しい。終わった後にあーだこーだ言い合ったり、ぶっちゃけ話とかしたり、一緒に苦労して展示を作り上げた人たちと笑い会えるのは気持ちいい。

これらのことを活かして今後のモノづくりに活かそうと思います!

11がつのもみにきてね

今回の展示に見に来てくださった方々、ありがとうございました。途中でトラブルもあり()、4日目の終わりの方はバタバタしてしまいましたが、頑張って11月も展示できるようにしたいので、もし11月の展示が開催されれば是非またいらしてください!

シャリだけでも美味しく寿司が食える方法

くだらないネタ考えたのでやりました

先日のxR Tech Tokyoでこの記事の話が出ました。

www.wantedly.com

いろんな人がこれをネタに持って行こうとしているようなので自分もそれに乗っかろうとして、思いついたのが、

「シャリにARマーカーくっつけて自分の好きなネタ乗せれば良くない??」

f:id:zawazawahtn:20180625123501p:plain:w100

です。ネタを思いついてしまった以上責任を持って実現をさせようというくだらない記事です。

別に寿司ネタとかけてるわけじゃないんだからね。

ちょうどいい機会

XR分野の研究を始めて1ヵ月ぐらいで、ちょうどいい機会だったのでVuforiaを初めて使ってみました。

Developer登録とかDatabaseのtargetimage追加とかのフローはいくらでも記事があるのでそちらをみてください。

出来上がってしまったネタ

寿司ネタを3つ(2つと1体)用意しました。お粗末なマグロとタマゴと可愛いユニティちゃんです。

作ってる途中で「これ、正当な寿司ネタだけじゃなくても乗せられるよね??」と思ってしまった自分、たちが悪いです。

f:id:zawazawahtn:20180625114332p:plain
途中でバカバカしくなって笑いながら作ってました

ARマーカーは海苔で作ろう

シャリにはやっぱり海苔でARマーカーつけるのが最適でしょう。 ということで海苔を買って切ってARマーカーにしようと思います。近くに海苔を売ってるところがなかったのでおにぎりの海苔を使いました。パリパリしてなくて、引っぺがしたらご飯もくっついてました。ここがくだらなさポイントの頂点です。

f:id:zawazawahtn:20180625114233j:plain:w200
おにぎり買ってきた

f:id:zawazawahtn:20180625114239j:plain:w200
ARマーカーできた笑

薄々感じてはいた

だめかーー

f:id:zawazawahtn:20180625114422p:plain
認識してくれなかった泣

ふにゃふにゃの海苔を使ったのがまずいけない笑。エッジもクソもない。 あと海苔の光沢もダメだろう。

(そもそもおにぎりを使ってシャリを使わなかったんかいというツッコミはナシでお願いします。金欠でした。)

ちなみに正確なマーカーではうまくいきました

f:id:zawazawahtn:20180625120028p:plain

f:id:zawazawahtn:20180625120036p:plain

f:id:zawazawahtn:20180625120042p:plain

得られた知見

まず何より食べ物で実験すると、その後美味しくいただきましたができる。

あとはiphone上で動かそうとすると、画面が真っ暗になる状態に陥りました。環境はvuforia7+Xcode9.3+iOS11.3。どうやらvuforia側の問題のようです。参考

システム的なコンフリクトに立ち向かうのも無駄だと思ったので今回はPCでやりました。いつかチャチャっと直せるようになりたいです。

ユニティちゃんのロゴもちゃんと載せないと。

f:id:zawazawahtn:20180625114137p:plain:w100

【Unity】ボタンの下にあるオブジェクトへのタップイベントを無効化する

想定

UnityでiPhoneのARkitを使った簡単なアプリを作っている時にぶつかった課題です。

ボタンの下は押したくない

uGUIを設置した時に、ボタンの下に検出された平面のタッチイベントまで取得してしまって、意図しない挙動をしてしまった。

なんだか色々解決策がある...

でも絶対もっと簡単にやれるって!って思って調べたところ本当に簡単にできました。

あくまで、自分のケースですが。

手法

UnityARHitTestExample.csスクリプトのUpdate関数内の条件分岐に一言「ボタンがあればタッチイベントを無視しますよ」と加えるだけ。

あ、あとスクリプトの頭にusing UnityEngine; using UnityEngine.EventSystems;の2行を加えるだけ。

        // Update is called once per frame
        void Update () {
           #if UNITY_EDITOR   //we will only use this script on the editor side, though there is nothing that would prevent it from working on device
            if (Input.GetMouseButtonDown (0)) {
                Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
                RaycastHit hit;
                
                //we'll try to hit one of the plane collider gameobjects that were generated by the plugin
                //effectively similar to calling HitTest with ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent
                if (Physics.Raycast (ray, out hit, maxRayDistance, collisionLayer)) {
                    //we're going to get the position from the contact point
                    m_HitTransform.position = hit.point;
                    Debug.Log (string.Format ("x:{0:0.######} y:{1:0.######} z:{2:0.######}", m_HitTransform.position.x, m_HitTransform.position.y, m_HitTransform.position.z));

                    //and the rotation from the transform of the plane collider
                    m_HitTransform.rotation = hit.transform.rotation;
                }
            }
           #else
            if (Input.touchCount > 0 && m_HitTransform != null)
            {
                var touch = Input.GetTouch(0);

###################### ここのした一行に手を加えるだけ!!! ###################### 
                if ((touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved) && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) 
############################################################################
                {
                    var screenPosition = Camera.main.ScreenToViewportPoint(touch.position);
                    ARPoint point = new ARPoint {
                        x = screenPosition.x,
                        y = screenPosition.y
                    };

                    // prioritize reults types
                    ARHitTestResultType[] resultTypes = {
                        ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent, 
                        // if you want to use infinite planes use this:
                        //ARHitTestResultType.ARHitTestResultTypeExistingPlane,
                        ARHitTestResultType.ARHitTestResultTypeHorizontalPlane, 
                        ARHitTestResultType.ARHitTestResultTypeFeaturePoint
                    }; 
                    
                    foreach (ARHitTestResultType resultType in resultTypes)
                    {
                        if (HitTestWithResultType (point, resultType))
                        {
                            return;
                        }
                    }
                }
            }
           #endif

        }

本当に簡単にできた。優勝。

ポイントはEventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)っぽいですね。

参考にさせていただいたサイト

nn-hokuson.hatenablog.com