Lab向けに作ってた時以来、8ヶ月ぶりにVisionPro向けの開発する〜
VisionPro
os2.0を使用。
ちなみにbetaしかなかったころは設定のソフトウェアダウンロードで、有料開発アカウントを入力したら、実機のVisionOS内で直接betaのVisionOS2.0をインストールできた。
VisionOSのメインのアカウントと違っていい。
17日に正式リリースされた後、betaから正式にする方法がわからなかったが、いつの間にか正式版に置き換わってたっぽい・・・?
ちなみにOS2で一番変わったのはコントロールパネルの出し方。目線上じゃなくて指で出す。
あとゲストモードに30日記憶機能とか、平面画像の3D化とか
OS1.0をそんなに触ってないので細かい違いはわからない・・・
Xcode
まずXcodeと実機を繋ぐには同じWiFi同じiCloudが必要らしい
ペアリング
最初VisionPro側でコードが表示されなかったが、何回か状況変えてやったら表示された。
あとは普通にビルドできた。
サンプル
久しぶりに見たら色々サンプル追加されてた
前回触ったのはこの記事bibinbaleo.hatenablog.com
ロボットかわいかった。
--
テーブルキットも気になる
ここからサンプルダウンロードできた。サイコロ投げたりコマを置いたりカードを並べたりできたけど、ルールはわからない・・・
--
手を使ってキューブを倒すもの。これも昔からあるがシミュレーターでは試せないので、Labで試した気がする
--
360度世界を表示するサンプル。画像じゃなくて3D空間っぽい。
Unity
Unity6を使う。少しでも新しいもの使ってみたいだけで特に理由はない。
テンプレート
前やった時はテンプレートプロジェクトから作るのがうまくいったようなのでそれをする。
ここからダウンロード
PolySpatial2.0が入ってる
VisionOSにSwitchPlatform
そのままだとビルドがうまくいかなかったが調べたらEnable Burst Complicationをオフにしたらいい。
https://discussions.unity.com/t/visionos-0-7-1-unity-2022-3-16f1-xcode-build-error/322262/3
壁などの平面をを認識して、タップしたらそこにこのオブジェクトが出た
Tutorialもあったがあまりよくわからなかった。Unityでこういうチュートリアル出せるようになったということが驚き。初めて見た。
Play to device
以前うまくいかなかったPlay to device
testflightをVisionProに入れて起動はできた。
UnityでVisionProで表示されているIP入れて設定した
だがStatusが繋がらない。UnityEditorでプレイしても何も起こらない
https://discussions.unity.com/t/play-to-device/309359
翌日試したらできた。でもまたすぐできなくなった。
不安定・・・
動きももっさりしてた。
サンプル
サンプルもある
テンプレートプロジェクトに入れていく。
ここから入れるはず
なのも変わらないから入ってないのかと思ったが、Assetsの下にあった。元から入ってたのかな・・・?
SwiftUIのサンプル気になる
何か作る
MetaXRSDKでできたような手でオブジェクト掴むというのをやりたい。床に落ちた時は床にとどまって欲しい。
手で掴む
物理の働いてるものを手で掴むのはサンプルの中のManipulationが該当
XRIバージョンとノーマルバージョンがあった。
今回はノーマルバージョンにしてみる。
用意したオブジェクトに同じようにコライダーとリジッドボディをつけてみたけどそれだけだと手で掴めない。
これをつける必要があった。
リスポーンはこれか
ちなみにビルドしなくてもUnityで実行したらマウスで掴めるので、設定がうまく言ってるかはEditorだけでわかる!
Vision OS Hover Effectは目線で見た時の影響。今回はなくていいので外した。
あとマテリアルは現実の反射を入れたい。
Smoothnessをいっぱいにしたら普通に反映された。
部屋Mesh
部屋へのメッシュはMeshingというサンプルが対応している
このシーンにさっきのものたちを移植してきた
これで一応ものを掴んで落としたら床に落ちるというのはできた。
ただものを持ってる感があんまりない。手が認識されてるわけではなく、OSのUI操作と同じように目線で認識して指のピンチで掴んでいるだけ。
遠くからでも操作できるし、指が視界に入ってなくても操作できる。
落ちないもの
動かせるけど落ちないものは、RigidbodyのUseGravityをオフにするだけで良さそう。ただしそのままだと何か別のコライダーとかにぶつかるとフワーって移動する。
このスクリプトを改変するといい。
ものを掴んだ時だけisKinematicがオンになっているので、常にオンになるようにしたらいい。
つまむのではなく掴みたい(できてない)
指先でつまむ仕草ではなく、MetaXRSDKみたいにオブジェクト掴みたい。今のは掴んでる感がない・・・
あと手のひらの上に乗せたりしたい。
そういうサンプル見当たらなかった。
手の形にcubeが表示されるのはPortalとかのサンプルにあった。
これがあればいいのかな?
これやっても変わらなかった。
ちなみに全然関係ないけどポータルの仕組みはこんな感じ。AR>BasicOcclusionというシェーダーを使えばいいのか〜
色々アプリ触ってもあんまり持つって感じのないし無理なのかな・・・
ボタン
適当な空中ボタンが欲しい
サンプルの戻るボタンを置いてみたが、普通のボタンイベントみたいな口になってない
めっちゃとりあえずだけど、サンプルシーン改造する時は、HubButtonというのを継承した上で、以下のように書いたものをくっ付ければ反応した
LoadLevelButton.cs参照
ただせっかく作ったけど、親オブジェクトにコライダーがついている状態で、子にこのボタンを置いたら、親のコライダーをクリックした時にボタンが反応する・・・
ボタンの意味がない。
uGUIのボタン(うまくいかない)
サンプルシーンにあるものを持ってきてEventSystemも持ってきてそのままだと動いたけど、要素を少なくしていくと動かなくなる・・・コライダーっぽい緑の枠が見えるけどあれが何に紐づいてるのかわからない
Particle(微妙)
サンプルシーンにある炎はプレハブ化したものは動いた。
今パーティクルは3種類のモードがある
Particle System Mode
デフォルトはReplicare Properties
大きさが変わる。実際UnityEditorでは普通なのに、実機だとなんか変。大きくなってるだけとは思えない・・・
BaketoTextureをしたら大きさはいい感じになったけど、透過のパーティクルが透過される時とされない時がある。ビルドごとに変わるとかじゃなくて、きっかけはわからないが同じ実行の中で変わる。
あとサンプルの炎が表示されなくなる><
VisionOSのLTでも話があったが、モードによって動くパーティクルと動かないパーティクルがあるんだよね・・・そしてモードはプロジェクト単位でしか設定できない
AudioSourceの3D
AudioSourseのSpatial blendを3Dにしても、音の方向は合わない。距離の減衰はする。
完全にはサポートされてないと書いてあった。
ライティング
影を落とすには?
一番したのにしたら影落ちた。
でも部屋のメッシュのオクルージョンモードだとそのオクルージョンのシェーダーに対しては影落ちなかった。
仮想物体同士は落ちる。