はじめに

久々にAppleから心踊る製品の発表がありました。今までのVRゴーグルも新たな体験が出来る素晴らしいものだとは思いますが、さすがAppleの製品はiPhoneの登場の時と同じぐらいの新しいコンピューティング体験をもたらしてくれるものではないかと思います。

そんなApple Vision Proを早く体験したくて堪らないのですが、発売は来年を予定しておりまだまだそれを体験出来るのはずいぶん先になりそうです。

そんな中、先日Vision OS SDKの案内が届いていました。

ということは実際にVision Proは触れなくてもシミュレーターで疑似体験が出来そうです。

ということで試してみました。

準備

2023年6月28日現時点でVision OS SDKを試すためにはMac OSのバージョンが13.4.1以上でXcode 15 beta2が必要になります。

Xcode 15 beta2とiOS17 beta2及びvisionOS 1 betaで合計17GBのファイルをダウンロードすることになります。

サンプルアプリを動かしてみる

こちらにいつものHello Worldが用意されているので早速ダウンロードしてみます。

以下は実際に試して画面をキャプチャしていますが、リンクには動画での紹介があるので実際の動きを見たい方はリンクの動画をご確認ください。

ダウンロードしたサンプルプロジェクトを開き、シミュレーターを選択して実行してみます。

すると出てきました!これがVision OSの画面です。

Hello Worldアプリが表示されました。

これがVision Proで見た時のイメージに近いもののようです。

Vision Proを付けた時、実際は自分がいる周りが透けて見えるはずですがシミュレーターでは背景を3Dで表現していました。Macのトラックパッドのジェスチャーで拡大・縮小、移動、視線の移動などが再現出来ます。

アプリの上の小さいボタンのところをクリックするとデフォルトのアプリが表示され、SafariによるWebサイト、YouTubeなどをみることも可能です。

再度、HelloWorldアプリ内のメニューを押してみたところ全画面が宇宙に切り替わって地球や月などをみる事ができました。これはVRのように仮想空間内に入り込む事が出来るモードのようです。Vision ProはARだけではなく、VRとしても使えるんですね。

ちなみに地球の周りをクルクル飛び回っているものがあるんですがスーパーマンが飛んでいるようです。面白い演出ですね。w

アプリを作ってみる

サンプルアプリの確認が出来たので今度は最初からアプリを作ってみたいと思います。

普段のアプリ開発のように「Create New Project…」するとプラットフォームにvisionOSがあるのでそこでAppを作ります。

生成されたプロジェクトのContentView.swiftを選択するとシミュレーターを起動しなくてもプレビューでアプリコンテンツを見る事ができます。

デフォルトでは単に球体が表示されていました。

球体を別のオブジェクトに変えてみたいので「Package.realitycomposerpro」を選択すると、球体が現れるので右上にある「Open In Reality Composer Pro」ボタンを押します。

するとUnityのような見た目のReality ComposerProというアプリが起動しました。

ここで球体ではない違う3Dオブジェクトを置きたいので下のScene.usdzというファイルを選択して削除しちゃいます。USDZはAppleが推進する3D/ARフォーマットです。

その後、右上の「+」ボタンを押すとすぐに使える3Dオブジェクトが表示されるのでここからギターを選択し

読み込まれたオブジェクトをドラッグして元の球体があったところに配置します。

このままのスケールだとちょっと大きく見えてしまうので画面右にあるTransformという項目からScaleを適当に0.3など小さめに設定してReality ComposerProは閉じちゃいます。

プレビューでギターが表示されることを期待したのですが、プレビューでエラーになったりXcodeがクラッシュしたりと動作が安定しません。

なぜエラーになるのかとコードを見てみたらsceneを読み込んでいるところのEntity名が先ほど削除したSceneのままなのが原因のようです。

if let scene = try? await Entity(named: “Scene“, in: realityKitContentBundle) {

                    content.add(scene)

                }

Entity名をSceneからAcousticGuitarに変更しました。

if let scene = try? await Entity(named: “AcousticGuitar“, in: realityKitContentBundle) {

                    content.add(scene)

                }

//
//  ContentView.swift
//  visiontest
//
//  Created by leewj on 2023/06/28.
//

import SwiftUI
import RealityKit
import RealityKitContent

struct ContentView: View {

    @State var enlarge = false

    var body: some View {
        VStack {
            RealityView { content in
                // Add the initial RealityKit content
                if let scene = try? await Entity(named: "AcousticGuitar", in: realityKitContentBundle) {
                    content.add(scene)
                }
            } update: { content in
                // Update the RealityKit content when SwiftUI state changes
                if let scene = content.entities.first {
                    let uniformScale: Float = enlarge ? 1.4 : 1.0
                    scene.transform.scale = [uniformScale, uniformScale, uniformScale]
                }
            }
            .gesture(TapGesture().targetedToAnyEntity().onEnded { _ in
                enlarge.toggle()
            })

            VStack {
                Toggle("Enlarge RealityView Content", isOn: $enlarge)
                    .toggleStyle(.button)
            }.padding().glassBackgroundEffect()
        }
    }
}

#Preview {
    ContentView()
}

これで無事差し替えたオブジェクトが表示されるようになりました。

ベータ版なのでXcodeがよくクラッシュしたりというトラブルに遭いましたがVision Proの挙動や開発の仕方をざっくり体験する事が出来ました。

ちょっと個人で買うにはなかなか躊躇してしまう価格になりそうですが発売が待ち遠しいです。

おわりに

TC3は「Gig Innovated.」のスローガンを掲げ、ギグ・エコノミーとの共創を通してソフトウェア開発やAI開発を支援する会社です。ギグ・エコノミーとの共創による開発には、ツール、プロセスなどの観点で様々な課題も存在しています。このような世界を一緒に作っていく仲間をTC3では募集していますので、カジュアル面談などお気軽にお問い合わせください!(参考:リクルートサイト