ARKit 2.0のサンプルコード集「ARKit-Emperor」を公開しました！

## ARKit-Emperor

iOS 12のリリースと同日に、ARKitのサンプル集「**ARKit-Emperor**」をオープンソースで公開しました。

[ARKit-Emperor](https://github.com/kboy-silvergym/ARKit-Emperor)

<img width="900" alt="thum.png" src="https://qiita-image-store.s3.amazonaws.com/0/111366/eafe50e5-e6fe-972d-177d-b9958b41794f.png">

**お分かりでしょうか？**

**完全に[堤さん](https://qiita.com/shu223)の[ARKit-Sampler](https://qiita.com/shu223/items/e55e1426c9e036254761)を意識しています。**

ARKit-Samplerと同様、「余計な実装を混ぜずに、できるだけシンプルな実装で伝える」というところに気をつけています。また、現在作成中のUdemyのARKit2.0 講座で利用するために用意したものとなっています。

https://github.com/kboy-silvergym/ARKit-Emperor

↑是非スターをお願いします🙏

## ビルド方法

最新のXcode10でビルドしてiOS 12端末にインストール

## サンプル一覧

今のところ8個のサンプルが入っています。随時追加していきます。

### Doodle (ARKit 1.0~)

![doodle](https://github.com/kboy-silvergym/ARKit-Emperor/raw/master/images/drawing.gif)

ARKit-Samplerにも[AR Drawing](https://github.com/shu223/ARKit-Sampler/tree/master/ARKit-Sampler/Samples/ARDrawing)がありますが、このコードはもっとシンプルで短いコードとなっています。線を描くことが意外にシンプルなんだなとわかると思います。

[GRAFFITY - ARビデオ通話 -](https://itunes.apple.com/app/id1277452876?mt=8)ではもっとパフォーマンスの良いコードとなっていますが、そっちは企業秘密です。笑

### Placing pictures (ARKit 1.0~)

![picture](https://github.com/kboy-silvergym/ARKit-Emperor/raw/master/images/picture.gif)

額縁をSceneKitで作ってみました。中の画像は変数となっているのでカメラロールの写真にしたりすることができます。また、額縁の柄や色もmaterialをいじって変更することができます。

### Rich Plane Detection (ARKit 1.5~)

![doodle](https://github.com/kboy-silvergym/ARKit-Emperor/raw/master/images/plane.gif)

ARKit 1.5から使える矩形だけではない平面認識に、イケてる画像マテリアルとfadeInOutのアニメーションをつけてみました。

### Tongue Detection (舌の認識) (ARKit 2.0~)

![doodle](https://github.com/kboy-silvergym/ARKit-Emperor/raw/master/images/tongue.gif)

Face DetectionはiPhoneX, XS, XS Max, XRだけで使うことができます。ARKit 2.0から舌を認識できるようになったので舌を出している時だけ飛行機が回転するデモを作ってみました。見苦しいですねw

### Persistent Memo (ARKit 2.0~)

![doodle](https://github.com/kboy-silvergym/ARKit-Emperor/raw/master/images/memo.gif)

ARKit 2.0から使えるARWorldMapを端末にアーカイブして保存し、再起動時にconfigurationに渡してloadすることで、デモではゴミ箱の位置に「**WEDNESDAY**」という文字を保存することに成功しています。（**渋谷区では水曜日は資源ごみの日となっております**）

### Mirror (ARKit 2.0~)

<img src="https://qiita-image-store.s3.amazonaws.com/0/111366/6c9dbaf1-a1a7-d5c8-ef69-f51ba0eb6cd9.gif" width=160>

environmental texturingのautomaticを使って、部屋の風景をバーチャル物体が反射しているというデモです。完璧に鏡とまでは行きませんが、いい感じに反射していることを体感できます。(早稲田のダンスサークルはこのレベルの反射の鏡でダンスしてましたよw)

### Business Card (ARKit 2.0~)

|読み取りと表示|インタラクション|
|:-:|:-:|
|<img src="https://qiita-image-store.s3.amazonaws.com/0/111366/01a8fbb9-e4b4-7044-5de8-f17deca7182d.gif" width=200>|<img src="https://qiita-image-store.s3.amazonaws.com/0/111366/26389af3-7695-6e07-958a-18cfafb496ec.gif" width=200>|

名刺の画像を読み込んでおいて、それを認識したらSceneKitで作成したボタンとサムネイルをちょいアニメーションさせて表示してます。

タップイベントはhitTestがボタンのnodeにぶつかったら判定して、safariを開いています。

### Detecting your Remote (ARKit 2.0~)

![remote](https://github.com/kboy-silvergym/ARKit-Emperor/raw/master/images/remote.gif)

[Apple公式のサンプルコード](https://developer.apple.com/documentation/arkit/scanning_and_detecting_3d_objects)がめちゃめちゃ複雑だったのでシンプルにしたいと思ってたんですが、**まだ途中です。。** ARReferenceObjectはARKit 2.0の新しいAPIの中で一番扱いが難しいです。

## Coming soon...

- Detecting your Remoteの完成(ARKit2.0~)
- ピンチインアウトや平行移動などのGesture(ARKit1.0~)
- [FirebaseCloudAnchorのサンプル](https://github.com/kboy-silvergym/CloudAnchorsSample-Swift)を合体させる

「ちょっと動かしてみたよー」というサンプルではなく、見ていて面白くて実用的な雰囲気のある、それでいてシンプルなrepositoryを目指していきたいです。

## 関連リンク
- [Qiita | ARKit 2.0の何が凄いのか
](https://qiita.com/k-boy/items/d935b76fed67e11b9fb2)
- [Qiita | ARKitのための3D数学
](https://qiita.com/k-boy/items/775633fe3fd6da9c5fb6)

## スターください

https://github.com/kboy-silvergym/ARKit-Emperor

↑是非スターをお願いします🙏