以下の内容はhttps://bibinbaleo.hatenablog.com/entry/2024/12/11/163952より取得しました。


AppleVisionProの本2つやったメモ

本当にメモです

Apple Vision Proアプリ開発入門

www.shuwasystem.co.jp

ホロラボさんの本。Swift特化。教科書はVisionOSのバージョンが1だが、私は2でやったので色々詰まった。

Swiftのことを理解して、Tabletopkitも使えるようになればいいな〜と思いこの本を始めたが、難しくて私には無理かもしれない・・・と思った。

Chapter1~3

Digital Crownを2回押したら今出てるアプリとかが全部消えて現実空間が見えるようになった。知らなかった。

RealityComposerProから直接AVP実機にシーンを送れるの便利

用意されていた地球アセットが驚くほど精細。地形も反映されて雲まである。こんな地球初めてみた

RealityComposerProから高解像度のスクショや動画キャプチャをとれる。Macのデスクトップに保存されるので転送必要ないのは便利。

1枚のスクショで3840 × 2160で7.6MBもあった
本体でスクショを撮ると1920x1080

 

拡張子が本では表示されてるけど、デフォルトは表示されない。設定変えた

qiita.com

xcode用のgithub copilot入れれた!

qiita.com

サジェストされるものが教科書通りになる

最近の不具合なのか?プレビューが見れない。結局毎回ビルドしたけど不便。GithubCopilot入れたせいなのか?

forums.developer.apple.com

chapter 4 オブジェクトビューワー作成

Swiftには回転とかのアニメーションの関数がデフォルトであるのか〜

volumeのデフォルトサイズを変えても見た目変わらない。ずっと同じいい感じの大きさに自動になる

ドラッグジェスチャで3Dモデルを回転させるのにこんなにコードがいるのか・・・

chapter 5イマーシブでのロケットアプリ

リバーシなどのアプリにあった大きくするボタンみたいなのはボリュームモードからイマーシブスペースモードにしていたのか。周りに他のアプリが表示されなくなる以外に、実装していたら空間のここに固定!みたいなのもできる。

OS2の環境でやっているが、イマーシブモードのテンプレートのcontentviewがOS1の環境の本と全然違う。トグルが別ファイルに切り出されたのか

イマーシブスペースの原点はユーザーの足元
位置設定せずに物を置いたらそこに出てくる。

swiftでもタップに反応するためにはcollisionなどのコンポーネントを付与することが必要

nullじゃなくてnil

本と違う箇所が多くて脱落しかけたが、なんとかなった。

無料の個人アカウントだと3つまでしかデバイスにアプリをビルドできないという知見を得た

chapter 6RealityComposerPro

RCPでRenameがオブジェクトの選択肢になくなっている・・・

長押しか何回かクリックしたら変えられるからいいが

axes(axisの複数形) 

マテリアルもオブジェクトと同列のオブジェクト扱いなのがUnityと違う

教科書はMaterial>Customだが私の環境ではMaterial>ShaderGraphという名前になっている

shadergraphによってオブジェクトの位置を変えれる

花火、煙、雨、雪、火花、Magicのパーティクルがあらかじめ用意されている



OS2ではAppModelが最初からある。じゃあこの本のAppModelはなんなんだ。元からあるAppModelの中身を置き換えじゃダメなのかな

AppModel関連でエラーが出て脱落

RCPで設定したものをXcodeから操作するのこんなに大変なのか・・・

Chapter7 ARKit!手でシューティング

オブジェクトを名前で管理する(嫌だ〜)

entityA、entityBはどこから来たんだ

またうまくいかなかった

Chapter8 ARKit!手でシューティング

空間認識!

ARKitのSceneReconstructionで現実環境のデータが渡ってきて、それを更新したり、コリジョンつけたりの処理は自分で書く必要がある><

@Published

ImageTrackingはWebARとかよりは全然精度いいけど微妙に揺れは発生している

ChapterRea9 Shareplay!

SharePlayを利用するには有料プログラムが必要!

ちゃんと有料アカウントをteamにしてないと、CapacityでGroupActivitiesを選べなかった

まずテストしやすくするため、iPhoneとVisionProでやりとりできる部分から実装するらしい。
iOSのシミュレーターを入れるのに8GBかかる・・・別にシミュレーターなくてもいい気もする

これでアクティビティのタイプを設定できる。ゲームや動画視聴などがあるらしい
/// グループアクティビティに関するメタデータ
struct SampleActivity: GroupActivity {
  // アクティビティについて説明する情報の提供
  var metadata: GroupActivityMetadata {
    var data = GroupActivityMetadata()
    data.title = "Sample App"
    data.type = .generic
    return data
  }
}

$state

Cannot find 'manager' in scope

 

最後のサンプルアプリの解説は見る人が見ればすごく勉強になりそう。HappyBeamもそういえばShareplay要素あった

 

Apple Vision Proアプリ開発ガイド 〜visionOSではじめる空間コンピューティング実践集

2冊目!

gihyo.jp

Unityも含めて色々紹介されている。

1章以外は写経して1から作るというより、サンプルプロジェクトのコードなどの解説。

また公開されているサンプルコードにはコメントがないけど、本にはコメントがついているものもある。

導入

AVPのほかと違うところは「自然」
AVPは現実空間の形状を認識しているので、音の反響の仕方も空間に合わせている!?

ゴリラ腕問題という言葉初めて聞いた

atmarkit.itmedia.co.jp

第1章 ノーコード・ローコード

iPhoneやMacからusdzのファイルをAVPにAirDropで送って表示。逆はやってたけど確かにこの使い方も楽しい。スキャンした人形とかを送って空間に置いておくと癒し

 

OS2からはRealityKitでもSpatialTrackingSessionを利用したらARKitを使わなくても一部のトラッキングデータにアクセスできる。

developer.apple.com

もう一冊も含めていっぱいサンプルプロジェクトをビルドしていたら

Your maximum App ID limit has been reached. You may create up to 10 App IDs every 7 days.

と出た。

RealityComposerPro(以下RCP)でのノーコード実装。

自転させるのにもコリジョンやPhysicsMaterialが必要

Anchoringを使えばノーコードで手や指にオブジェクトを追従できる!便利!

AnchoringとARKitのハンドトラッキング両方あると動かない

RCPでの非表示は右クリックからdeactivate(下の方)

info.plistに書くNSHandsTrackingUsageDescriptionを誤字するとビルドは成功するが途中でPauseしてアプリが何も表示されない

 

ローコードというかRCP用のコンポーネントになるコードを著者が提供してくれてるので、それを使ってほぼローコードという感じだった。他でも使えそうなのでありがたい。
あとドラムのアプリは普通に楽しい。Questでもあるんだろうか?Questってちゃんとゲームになってないとリリースできなそうだからあういうシンプルなの逆にないのかな?
手に棒がくっついているので掴む動作も不要。でもやっぱり持つ系はコントローラーあった方が楽しいだろうな

第2章 SwiftUI

WWDCのデザイン系のセッションでの発表を忠実に独自アプリで解説してくれている感じでよかった!

swiftuiのチュートリアルを公式がだしてる。なお英語

developer.apple.com

Geminiはswift向けのライブラリ?を出している。これを使ってAI会話

qiita.com

サンプルプロジェクトはうまく動かなかった。APIを設定しないと入力UIとかも出ないのだろうか?

ただインプットフィールドだけの入力UIめっちゃかっこいい。未来感ある。

3DモデルとUIもVstackなどで並べ替えできる

@Environmentは複数のViewの階層間でデータを共有するための強力なツール

第3章 ARKit

ARKitを使った空間に置くタイマーアプリ

Realitykitで空間をタップするにはメッシュが必要。でも広い空間だと壁とかがないのでタップする対象がない。なので目の前にメッシュを追従させている

os1.1時点だとAVPのARKitで取れるデータは5種類
・手の位置
・ImageTracking
・周囲の形状
・周囲の平面
・WorldTracking(端末の位置、回転)

(ちなみにホロラボ本も含め2冊ともやると全部網羅できる↑)

現在の時間を渡して今の位置を取得する。未来の時間を渡して予測データを取得することもできるらしい!ただし重い

Update関数みたいなの使わずに1秒間に90回呼び出すというのを手動?でしている。

AVPは基本90Hz

spatialTapGesture()で、「物をタップしたらXX」を実行みたいなのができる

developer.apple.com

UserDefaultsで端末内にデータを保存できる。(UnityのPlayerPrefs的なもの?)

qiita.com

ローカル通知はデフォルトはアプリがバックグラウンドの時しか送信されないが、アクティブな時にも表示できるようにできる 

ScenePhaseでアプリがアクティブか非表示になっているか取得できる

developer.apple.com

第4章 Sunny Tune

Volumeのサイズは単位がmmだがコンテンツの位置はm単位

Volumeには余白があるからギリギリに置いても表示されない

ボリュームのサイズをユーザーの操作で変更できるようになった 

.defaultWorldScaling(.dynamic)

developer.apple.com

設定したらオブジェクトのサイズも追従させることもできる

windowはユーザーの方を常に向く(WidgetSmithもこのせいで時計とかが壁に沿わないのか〜)

Volumeはデフォルトだと床と水平のまま動く。

ユーザーの方を向かせることもできるようになった.volumeWorldAligment(.adaptive)

 

シェーダーグラフでカメラ位置を取得できる!

天気や風の強さ向などはWeatherKitなるものから取得している

SunnyTuneの木は1日かけて大きくなって、翌日にはまた新しい木になっていたらしい。知らなかった。時間経過を示している

木の成長はL-systemというアルゴリズム

第5章 Unity

何も設定せずにCanvasだけ置いたらUnityのあの背景も一緒に表示されるWindow

Spaceはうまく動かないらしい

WorldCanvasのボタンにboxcolliderをつけてゲームオブジェクトと同じようにタップを扱っている

Demissionの値は同じ値を入れないと歪む

Unboundedの時はVolumeCameraが初期の描画位置になる

またYが地面の0位置になる。

 

spatialPointState.targetObjectでタップしたオブジェクトを取得できる

SpatialPointerPhase.Beganだとタップを始めたということ

こちらが詳しい

zenn.dev

XRHandsパッケージを入れてハンドトラッキング

 

Upper Limb Visibilityが手がコンテンツをオクルージョンするかに関わっているらしい。


内容と関係ないけどUnity2022でcom.unity.polyspatial.visionosパッケージを入れて、その後やっぱりUnity6にしよう!と思ってアップデートして、Volumeシーンを作ってアップデートしたらIL2cPP系のエラーが出た。

Unity6とPolySpatialのバージョンがあっていないのが問題だったっぽい。

PolySpatial系のパッケージを全部2.0.4を指定して入れ直したらUnityではビルドできた。でもXcodeではエラーでて結局ビルド成功せず

docs.unity3d.com

第6章 Unityでできることできないこと

最適化されたアニメーションはサポート外。

カリングが利用できない。裏側を描画できない

SwiftUIをUnityで利用できる。UIだけじゃなくてVisionOSならではの機能も利用できる?

文字入力できないんだ!

現状PolySpatial単体では文字入力に対応していないために、SwiftUIを介して入力するというものを実現しました。

zenn.dev

最後に

勉強になった。RCPは使ってみようという気持ちになれた。Unity周りは素直に参考になる!




以上の内容はhttps://bibinbaleo.hatenablog.com/entry/2024/12/11/163952より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14