📱

Reality Composer ProプロジェクトをXcodeに追加する

2024/03/22に公開

キービジュアル

概要

Apple Vision Pro向けアプリの開発にはReality Composer Proを利用してシーンを構築していくのが一般的です。

一方、PolySpatialを用いてUnityで開発を行う場合、基本的なシーン構築についてはUnityが出力したコードおよびアセットですべてが管理されており、Reality Composer Proのアセットは含まれていません。しかし、PolySpatial 1.1.4からはSwiftUIとの連携機能が追加されるなど、Xcodeで行う開発フローを取り込むことが可能となりました。

これを利用しようと思い、自分が開発しているUnityプロジェクトが出力したXcodeプロジェクトにReality Composer Proプロジェクトを追加しようとしたところプチハマりしてしまいました。

調べても記事が見つからなかったので手順をまとめておこうと思います。知っていれば大したことがない処理ではありますが、知らないとどうしたらいいか分かりづらいため、今後PolySpatialとXcodeでのハイブリッド開発をする場合のヒントになればと思います。

Xcodeでの利用方法について知る

まずはXcodeからReality Composer Proの内容を利用する方法をおさらいしておきましょう。ここでは、Xcodeプロジェクトの新規作成時に自動的に含まれる形から始めます。

Xcodeで新規プロジェクトを作成する際に、 Immersive Space Renderer の設定を RealityKit にすることでデフォルトでReality Composer Proプロジェクトが含まれた状態でプロジェクトが作成されます。

Immersive Space RendererにRealityKitを選択

プロジェクト作成直後の状態を見てみると以下のように Packages/RealityKitContent が含まれているのが分かります。これがReality Composer Proプロジェクトです。

Reality Composer Proプロジェクトが含まれている

Finderで見てみると以下のような構造になっています。

Reality Composer Proプロジェクトのフォルダレイアウト

この RealityKitContent フォルダがReality Composer Proのプロジェクトフォルダです。Reality Composer Proでプロジェクトを新規作成するとファイル構成が同じものが作成されます。

Reality Composer ProはSwiftパッケージとして定義されている

上記ファイルの中に Package.swift ファイルが含まれているのが分かります。作成された直後は以下の状態になっています。

// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "RealityKitContent",
    products: [
        // Products define the executables and libraries a package produces, and make them visible to other packages.
        .library(
            name: "RealityKitContent",
            targets: ["RealityKitContent"]),
    ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages this package depends on.
        .target(
            name: "RealityKitContent",
            dependencies: []),
    ]
)

通常のSwiftパッケージと同じように定義されているのが分かります。XcodeはReality Composer Proプロジェクトの内容を事前にビルドを行い、それをXcodeプロジェクトにリンクすることで連携を可能としているようです。

既存のXcodeプロジェクトにReality Composer Proプロジェクトを追加する

連携がどのように行われているのかが分かったところで、まだReality Composer Proを利用していない既存のXcodeプロジェクトにどうやって組み込むかを解説していきます。

これができるようになれば、Unityから出力したXcodeプロジェクトにも組み込むことができるようになります。

Reality Composer Proプロジェクトを作成する

まずはReality Composer Proのプロジェクトを作成します。Reality Composer Proアプリを起動してください。そして「Create New Project ...」を選択して新規プロジェクトを作成します。

Reality Composer Proプロジェクトを新規作成

作成したのち、サンプルとしてコーンをシーンに追加しました。

サンプルとしてコーンをシーンに追加

作成したReality Composer ProプロジェクトをXcodeに追加する

今回はこれをXcodeに読み込ませます。
まず、管理しやすいように新しいグループを追加します。今回は Packages という名前で作成しました。

新規グループを追加

そして対象のグループに、先ほど作成したReality Composer ProプロジェクトのルートフォルダをDrag & Dropして追加します。

Reality Composer Proのルートフォルダ
Reality Composer ProのルートディレクトリをDrag & Drop

するとXcode上でReality Composer Proのファイルなどが認識され(アイコンが専用のものになる)、Xcode上から選択、Reality Composer Proの起動などができるようになります。

Reality Composer ProプロジェクトをXcodeに追加

Reality Composer Proプロジェクトを認識させる

これでファイル自体は追加できました。しかし、Swiftから利用したりビルドして利用するにはもう少し設定を変える必要があります。

Reality Composer Proプロジェクトはバンドル化され、そのバンドルから対象シーンなどのファイルを読み込む必要があります。そのためにバンドルを特定する必要がありますが、自動作成されたコードには以下のように記述があるのですが、Reality Composer Proプロジェクトをただ追加しただけだと依存関係が作られておらず、このコードを利用しようとしてもエラーになってしまいます。

import Foundation

// この `sampleBundle` を利用したい
public let sampleBundle = Bundle.module

適切に依存が定義されていれば Sample.sampleBundle でアクセスできるのですが、今のままだとここで Sample がないというエラーが出てしまいます。

先ほどReality Composer Proはバンドル化されると書きましたが、それを設定する必要があります。手順は簡単で、Xcodeの Link Binary With Libraries セクションからプロジェクトを追加します。

Link Binary With Libraries

追加するには、セクションの下部にある「+」ボタンを押して表示されるリストから、Reality Composer Proのプロジェクト名の神殿のアイコンのものがあるので、それを選択して追加します。

Reality Composer Proプロジェクトをバイナリとして追加する

すると、以下のようにモデルの読み込みなどでバンドルを指定する際に利用できるようになります。

import Sample

VStack {
    Text("Hello, SwiftUI!")
    Model3D(named: "Scene", bundle: sampleBundle)
}

これを実行するとちゃんとコーンが表示されました。

Reality Composer Proの内容が読み込まれた

最後に

Reality Composer Proプロジェクトをバンドルとして追加するにあたって、 Link Binary With Libraries から追加するというのに気づくのに少し時間がかかりました。しかも「+」ボタンを押して出てくるリストの神殿アイコンのものを追加しないとダメでした。(フォルダをDrag & Dropしてもダメ)

知っていればすぐに対応できるものではありますが、調べても全然記事が見つからなかったので、誰かの参考になればと思い書かせてもらいました。

MESONからのお知らせ

エンジニア絶賛募集中!

MESONではUnityエンジニアを絶賛募集中です! XRのプロジェクトに関わってみたい! 開発したい! という方はぜひご応募ください!

https://careers.meson.tokyo/

体験会・勉強会実施のお知らせ

MESONでは、オフィスなどでのVision Pro体験会実施や企業向けの研修プログラムの提供を行っております。今回紹介したアプリもインストールされてますので、興味のある方はぜひお問い合わせフォームよりご連絡お待ちしております。

https://meson.typeform.com/to/q4omFL

企業のご担当者の方

Apple Vision Proのエントリー勉強会プログラム「Ready for Vision Pro」を提供開始しております。興味のある方は是非お気軽にお問い合わせ下さい。

https://prtimes.jp/main/html/rd/p/000000056.000032228.html

書いた人

えど

比留間 和也(あだな:えど)

カヤック時代にWEBエンジニアとしてリーダーを務め、その後VRに出会いコロプラに転職。 コロプラでは仮想現実チームにてXRコンテンツ開発に携わる。 DAYDREAM向けゲーム「NYORO THE SNAKE & SEVEN ISLANDS」をリリース。その後、ARに惹かれてMESONに入社。 MESONではARエンジニアとして活躍中。
またプライベートでもAR/VRの開発をしており、インディー部門でTGSに出展など公私関わらずAR/VRコンテンツ制作に精を出す。プライベートな時間でも開発しているように、新しいことを学ぶことが趣味で、最近は英語を学んでいる。

GitHub / Twitter

MESON Works

MESONの制作実績一覧もあります。ご興味ある方はぜひ見てみてください。

MESON Works

Discussion