private void RoomManagerListener_OnRoomJoined(Room room, int userId) { if (SharingStage.Instance.Manager.GetLocalUser().GetID() == userId && SharingStage.Instance.CurrentRoom.GetID() == room.GetID()) { SharingStage.Instance.RoomManagerAdapter.AnchorUploadedEvent += RoomManagerListener_AnchorUploaded; SharingStage.Instance.RoomManagerAdapter.AnchorsChangedEvent += RoomManagerListener_AnchorsChanged; SharingStage.Instance.RoomManagerAdapter.AnchorsDownloadedEvent += RoomManagerListener_AnchorDownloaded; canUpdate = true; if (ShowDetailedLogs) { Debug.LogFormat("[SharingWorldAnchorManager] In room {0} with {1} anchors.", SharingStage.Instance.CurrentRoom.GetName().GetString(), SharingStage.Instance.CurrentRoom.GetAnchorCount()); } if (AnchorDebugText != null) { AnchorDebugText.text += string.Format("\nIn room {0} with {1} anchors.", SharingStage.Instance.CurrentRoom.GetName().GetString(), SharingStage.Instance.CurrentRoom.GetAnchorCount()); } } }
/// <summary> /// Called when anchors are changed in the room. /// </summary> /// <param name="room">The room where the anchors were changed.</param> private void RoomManagerListener_AnchorsChanged(Room room) { if (SharingStage.Instance.CurrentRoom.GetID() == room.GetID()) { if (AnchorDebugText != null) { AnchorDebugText.text += "\nRoom Anchors Updated! Clearing the local Anchor Store and attempting to download the update..."; } // Clear our local anchor store, and download all our shared anchors again. // TODO: Only download the anchors that changed. Currently there's no way to know which anchor changed. AnchorStore.Clear(); if (ShowDetailedLogs) { Debug.LogFormat("[SharingWorldAnchorManager] Anchors updated for room \"{0}\".\nClearing the local Anchor Store and attempting to download the update...", room.GetName().GetString()); } if (AnchorDebugText != null) { AnchorDebugText.text += string.Format("\nAnchors updated for room \"{0}\".\nClearing the local Anchor Store and attempting to download the update...", room.GetName().GetString()); } int roomAnchorCount = SharingStage.Instance.CurrentRoom.GetAnchorCount(); for (int i = 0; i < roomAnchorCount; i++) { GameObject anchoredObject; string roomAnchorId = SharingStage.Instance.CurrentRoom.GetAnchorName(i).GetString(); if (AnchorGameObjectReferenceList.TryGetValue(roomAnchorId, out anchoredObject)) { if (ShowDetailedLogs) { Debug.LogFormat("[SharingWorldAnchorManager] Found cached GameObject reference for \"{0}\".", roomAnchorId); } if (AnchorDebugText != null) { AnchorDebugText.text += string.Format("\nFound cached GameObject reference for \"{0}\".", roomAnchorId); } AttachAnchor(anchoredObject, roomAnchorId); } else { anchoredObject = GameObject.Find(roomAnchorId); if (anchoredObject != null) { if (ShowDetailedLogs) { Debug.LogFormat("[SharingWorldAnchorManager] Found a GameObject reference form scene for \"{0}\".", roomAnchorId); } if (AnchorDebugText != null) { AnchorDebugText.text += string.Format("\nFound a GameObject reference form scene for \"{0}\".", roomAnchorId); } AttachAnchor(anchoredObject, roomAnchorId); } else { Debug.LogWarning("[SharingWorldAnchorManager] Unable to find a matching GameObject for anchor!"); if (AnchorDebugText != null) { AnchorDebugText.text += "\nUnable to find a matching GameObject for anchor!"; } } } } } }