twitter.com#Amazon2018 #WELT #スマートベルト です。腹回りを記録してくれます。2万円。ヘルスケアに対応していないのと、過去の履歴が1週間しか見ることができないのが残念です。アップデートに期待。 https://t.co/DBsrvemnce #Tech pic.twitter.com/fMB60QlJzv
— 植田達郎@ようやくひと息 (@weed_7777) 2018年5月11日
PrefabSpawnManagerを使ったHoloLensのシェアリング(Sharing)のしかた - 磁界学習アプリをシェアリングに対応させました
シェアリングで生成したオブジェクトをGameObject.Find()できない
HoloLensのシェアリングで生成したオブジェクトはデフォルトではSharingオブジェクトの子になります。Sharingオブジェクトは実行時にDontDestroyOnLoadに入ってしまうので、シーンからGameObject.Find()などでシェアリングで生成したオブジェクトを取得できません。
解決策としては、「SharingStage」のようなオブジェクトを作って、シェアリングでオブジェクトを生成する際はそれ(「SharingStage」)の子として生成するのが良いでしょう。
シェアリングのセッションから退室するとき、自分が生成したオブジェクトをすべて削除する
HoloLensのシェアリングのセッションから退室するとき、自分が生成したオブジェクトをすべて削除したいときがあります。不完全ではありますが、以下のようにすれば削除することができます。
private void DeleteMyMagnets() { var magnets = GameObject.FindGameObjectsWithTag("Magnet"); foreach (var magnet in magnets) { var syncModelAccessor = magnet.GetComponent<DefaultSyncModelAccessor>(); if (syncModelAccessor != null) { var syncSpawnObject = (SyncSpawnedObject)syncModelAccessor.SyncModel; if(syncSpawnObject.OwnerId == SharingStage.Instance.Manager.GetLocalUser().GetID()) { // 磁石のOnDestroyを走らせる Object.DestroyImmediate(magnet); spawnManager.Delete(syncSpawnObject); } } } }
なお、自分のUserIDは以下のように取り出すことができます:
int myUserId = SharingStage.Instance.Manager.GetLocalUser().GetID();
ちなみに、SharingStageにぶら下がっているSyncSpawnedObjectの一覧はUnityのインスペクタで見ることができます。