トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

久しぶりのVisionOS開発【主にUnity】

Lab向けに作ってた時以来、8ヶ月ぶりにVisionPro向けの開発する〜

VisionPro

os2.0を使用。

ちなみにbetaしかなかったころは設定のソフトウェアダウンロードで、有料開発アカウントを入力したら、実機のVisionOS内で直接betaのVisionOS2.0をインストールできた。

VisionOSのメインのアカウントと違っていい。

17日に正式リリースされた後、betaから正式にする方法がわからなかったが、いつの間にか正式版に置き換わってたっぽい・・・?

corriente.jp

ちなみにOS2で一番変わったのはコントロールパネルの出し方。目線上じゃなくて指で出す。

あとゲストモードに30日記憶機能とか、平面画像の3D化とか

OS1.0をそんなに触ってないので細かい違いはわからない・・・

Xcode

まずXcodeと実機を繋ぐには同じWiFi同じiCloudが必要らしい

ペアリング

最初VisionPro側でコードが表示されなかったが、何回か状況変えてやったら表示された。

あとは普通にビルドできた。

 

サンプル

久しぶりに見たら色々サンプル追加されてた

developer.apple.com

前回触ったのはこの記事bibinbaleo.hatenablog.com

ロボットかわいかった。

 

--

テーブルキットも気になる

1planet.co.jp

ここからサンプルダウンロードできた。サイコロ投げたりコマを置いたりカードを並べたりできたけど、ルールはわからない・・・

developer.apple.com

--

手を使ってキューブを倒すもの。これも昔からあるがシミュレーターでは試せないので、Labで試した気がする

developer.apple.com

--

360度世界を表示するサンプル。画像じゃなくて3D空間っぽい。

developer.apple.com

Unity

Unity6を使う。少しでも新しいもの使ってみたいだけで特に理由はない。

テンプレート

前やった時はテンプレートプロジェクトから作るのがうまくいったようなのでそれをする。

bibinbaleo.hatenablog.com

 

ここからダウンロード

docs.unity3d.com

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

docs.unity3d.com

testflightをVisionProに入れて起動はできた。

UnityでVisionProで表示されているIP入れて設定した

だがStatusが繋がらない。UnityEditorでプレイしても何も起こらない

https://discussions.unity.com/t/play-to-device/309359

 

翌日試したらできた。でもまたすぐできなくなった。

不安定・・・

動きももっさりしてた。

サンプル

サンプルもある

docs.unity3d.com

テンプレートプロジェクトに入れていく。

ここから入れるはず

なのも変わらないから入ってないのかと思ったが、Assetsの下にあった。元から入ってたのかな・・・?

SwiftUIのサンプル気になる

docs.unity3d.com

何か作る

MetaXRSDKでできたような手でオブジェクト掴むというのをやりたい。床に落ちた時は床にとどまって欲しい。

手で掴む

物理の働いてるものを手で掴むのはサンプルの中のManipulationが該当

XRIバージョンとノーマルバージョンがあった。

今回はノーマルバージョンにしてみる。

 

用意したオブジェクトに同じようにコライダーとリジッドボディをつけてみたけどそれだけだと手で掴めない。

 

これをつける必要があった。

リスポーンはこれか

ちなみにビルドしなくてもUnityで実行したらマウスで掴めるので、設定がうまく言ってるかはEditorだけでわかる!

Vision OS  Hover Effectは目線で見た時の影響。今回はなくていいので外した。

 

あとマテリアルは現実の反射を入れたい。

Smoothnessをいっぱいにしたら普通に反映された。

部屋Mesh

部屋へのメッシュはMeshingというサンプルが対応している

このシーンにさっきのものたちを移植してきた

これで一応ものを掴んで落としたら床に落ちるというのはできた。

ただものを持ってる感があんまりない。手が認識されてるわけではなく、OSのUI操作と同じように目線で認識して指のピンチで掴んでいるだけ。

遠くからでも操作できるし、指が視界に入ってなくても操作できる。

 

落ちないもの

動かせるけど落ちないものは、RigidbodyのUseGravityをオフにするだけで良さそう。ただしそのままだと何か別のコライダーとかにぶつかるとフワーって移動する。

このスクリプトを改変するといい。

ものを掴んだ時だけisKinematicがオンになっているので、常にオンになるようにしたらいい。

つまむのではなく掴みたい(できてない)

指先でつまむ仕草ではなく、MetaXRSDKみたいにオブジェクト掴みたい。今のは掴んでる感がない・・・

あと手のひらの上に乗せたりしたい。

そういうサンプル見当たらなかった。

手の形にcubeが表示されるのはPortalとかのサンプルにあった。

これがあればいいのかな?

これやっても変わらなかった。

 

ちなみに全然関係ないけどポータルの仕組みはこんな感じ。AR>BasicOcclusionというシェーダーを使えばいいのか〜

 

色々アプリ触ってもあんまり持つって感じのないし無理なのかな・・・

zenn.dev

ボタン

適当な空中ボタンが欲しい

サンプルの戻るボタンを置いてみたが、普通のボタンイベントみたいな口になってない

めっちゃとりあえずだけど、サンプルシーン改造する時は、HubButtonというのを継承した上で、以下のように書いたものをくっ付ければ反応した

public override void Press()
{
base.Press();
ボタン押された時の処理>
}

LoadLevelButton.cs参照

ただせっかく作ったけど、親オブジェクトにコライダーがついている状態で、子にこのボタンを置いたら、親のコライダーをクリックした時にボタンが反応する・・・

ボタンの意味がない。

 

uGUIのボタン(うまくいかない)

サンプルシーンにあるものを持ってきてEventSystemも持ってきてそのままだと動いたけど、要素を少なくしていくと動かなくなる・・・コライダーっぽい緑の枠が見えるけどあれが何に紐づいてるのかわからない

note.com

Particle(微妙)

サンプルシーンにある炎はプレハブ化したものは動いた。

今パーティクルは3種類のモードがある

docs.unity3d.com

Particle System Mode

デフォルトはReplicare Properties

大きさが変わる。実際UnityEditorでは普通なのに、実機だとなんか変。大きくなってるだけとは思えない・・・

BaketoTextureをしたら大きさはいい感じになったけど、透過のパーティクルが透過される時とされない時がある。ビルドごとに変わるとかじゃなくて、きっかけはわからないが同じ実行の中で変わる。

あとサンプルの炎が表示されなくなる><

VisionOSのLTでも話があったが、モードによって動くパーティクルと動かないパーティクルがあるんだよね・・・そしてモードはプロジェクト単位でしか設定できない

AudioSourceの3D

AudioSourseのSpatial blendを3Dにしても、音の方向は合わない。距離の減衰はする。

完全にはサポートされてないと書いてあった。

ライティング

影を落とすには?

docs.unity3d.com

一番したのにしたら影落ちた。

でも部屋のメッシュのオクルージョンモードだとそのオクルージョンのシェーダーに対しては影落ちなかった。

仮想物体同士は落ちる。