CrossRoadスマートフォン用の表示で見るCrossRoadAR、MR、VR、Babylon.jsを中心とした技術ブログ。開発情報(Unity以外)以前書いた記事のアクセス数が多いことと、最近注目されているARKitを使って、XCodeでいつかiOSアプリを作ることを想定し、Unityで作る場合との違いを比較してみました。Unityは使っているけど、XCodeはあまり知らない(私のことです、、)という方の参考になれば幸いです。以下の環境で確認しています。5.6.3p1ちなみに、今回は同じ内容のプロジェクトで比較したわけではなく、XCodeでこうだけどUnityだったらどうか、という観点で書いています。プロジェクトサイズたとえば、XCodeでは3DCGを描画できる機能のサンプルプロジェクトのサイズは、1.2MBです。(本ブログ後半に出てくる、飛行機のモデルを表示するだけのやつです)また、ARKitのサンプルコードは21.8MBでした。同じものを比較してないので参考程度という位置づけですが、Unityだとシンプルなものでも数十MB、CGモデルのアセットを入れるとあっという間に数百MBを超えるので、ここはだいぶ違うところかと思います。ワイヤレスデバッグ、デプロイXCode9以降、ワイヤレスデバッグができるようになりました。XCodeを搭載したPCとiOSデバイスが同じネットワークにあれば利用できます。Simulatorsを選択します。このように、Deviceに関する画面が表示されます。Networkにチェックを入れます。あとはケーブルを抜いてもデプロイができますし、端末のログが表示されるようになります。(HoloLensでもワイヤレスデプロイができますが、3DCGが少ない分、iOSアプリの方がデプロイ時間が短いです)ケーブルを気にしなくてよいのでけっこう楽です。自分で作ったアプリがクラッシュしてもちゃんとログを残してくれるので、デバッグするときにとくに困ることもありません。Remote5」という仕組みがあります。こちらでは、使い方がとても詳しく書かれており、大変参考になります。Remoteは、Unityでのリモートデバッグには非常に便利ですが、専用アプリのインストールが必要であり、環境構築に若干時間がかかるようにみえました。いう意味では、XCodeの方が便利と想いました。感覚的には、同程度の内容であればXCodeの方がビルドからデプロイまでが速い印象です。Editorの方が圧倒的に速いですね。4.シミュレータ(実機を使わない確認)XCodeはiOSシミュレータがあります。基本的な動作はこれで確認できますが、GPUを使うものはMacの実機の性能にかなり左右されます。GPUを使うものとして、Scenekitがあります。Scenekitとは、UnityのようにXCodeで3DCGアプリを作るためのフレームワークで、この後少し紹介しています。下記の動画の通り、Scenekitのサンプルプロジェクトがまともに動きませんでした。(3種類のiOSシミュレータを動かす+iPadAir2で動かす、をキャプチャして1つの動画にしています)デバイスを選択すると、若干描画性能が変わることはわかりましたが、CGの動きをシミュレータで確認するのはつらそうです。Editorの方が確実ですね。3DCGXcodeではSceneKitという仕組みを使います。ProjectでGame〜を作ると、サンプルとして飛行機(ship)モデルをタッチ操作でいろいろな角度から見る仕組みが入っています。これを表示させるコードは下記です。(長いため下記のリンクよりご確認ください)gist9c38a2f13a6aa7f1dee988ce5736be17このように、オブジェクト設定、ライト設定、位置調整を基本的に全てコードで書くことになります。ここだけをみると、Unityの方が簡単と想います。ちなみに、これはXCodeプロジェクトにCGモデルデータを含ませておいた場合の書き方ですが、UnityのResources.Loadのようにアプリの保存ディレクトリのモデルを表示、あるいはネットワーク経由でモデルを表示させようとすると、別の記述方法が必要です。そちらもUnityの方が簡単でした。ログ出力XCodeではObjective-CまたはSwiftでコードを書きます。ログを出したいときは、NSLogという関数を使います。これは出力したい文字の型を宣言しておく必要があります。とき、var1の値を出力したいとします。」という結果が出力されます。(Swiftの場合、let型で書いておくことで自動識別されます)gist1dd453cbda130e2bd9546128ca29c774Objective-Cの場合gist605daa3653dbc5c6cc08a61e6be000b2好みもあるかもしれませんが、私はUnityのC#で書く方が楽だと思いました。画面遷移Unityで実現したい場合、Sceneを変えるか、表示されているオブジェクトを消す、Cameraにフェードアウト/インをつける、などで画面遷移を表現することができます。XCodeの場合、一つずつ画面を定義していく必要があります。Builderという仕組みを使っていました。アプリの画面別にGUIで部品を配置し、ソースコード上のメソッドとつなげることで、プログラムに応じて画面を変化させることができます。その後、2012年頃より、Storyboardという機能が追加されました。Builderに似ていますが、複数の画面を一つの画面で表示させることができて、segue(セグエ)という手法によって、簡単な遷移ならばコードなしで可能です。(複数の画面を管理可能)ここに書かれている矢印でsegueを使っていることを示しています。左側の矢印は起動後に最初に表示される画面に対して発行されます。BuilderのときはAppDelegeteクラスの中でコードとして指定していたので、Storyboardの方が楽にできます。こちらも好みはありますが、Unityの方が楽だと感じました。私は何か困ったことがあると、対象となるキーワードかエラーログをきっかけに対処方法を探します。Unityの場合、大抵は誰かが解決策を書いてくださっています。iOSの場合はUnityに比べると情報量が少ない印象です。Unityとカテゴリが近いScenekitについても、最初の飛行機を動かす、追加でオブジェクトを配置する、以上の記事は数が少なかったです。Unityは使用者による情報交換が活発なのが強みだと、改めて感じました。終わりに冒頭に述べたきっかけからXCodeについて調べてみましたが、Unityがいかに開発者が使いやすいように構成されているかがよくわかりました。ソースコード記述とStoryboardにも利点はあるのですが、3DCGという1点においてはUnityが便利です。3DCGアプリを作る限りはXCodeを使ったアプリ開発の機会はあまりないかもしれませんが、最近はいつ何が必要になるかわからないので、今回調べたことが何かの役に立てばよいなと想います。次回は、並行して調べているMeta2について整理する予定です。2018の11日目の投稿です。»ProfileAR、MR、VR、Babylon.jsを中心とした技術ブログです。広く色々な技術を勉強するのが好きで、あれこれ書いています。詳細なプロフィールはこちらをご確認ください。2020)■プライバシーポリシー■こちらに記載しておりますのでご確認ください。■お問い合わせ■こちらよりお願いいたします。月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。