// called by the recorder when he is done recording public void PutHoloRecordingIntoPlayer(string id, HoloRecording recording, GameObject anchoredObject, AnchorStore store, bool openKeyboard = true) { recordingId = id; holoRecording = recording; anchorStore = store; anchor = anchoredObject; // update UI StartCoroutine(AddScreenshotToRepresentation(recording.pathToScreenshot)); // set the screenshot of the representation, done asynchronously because it loads from disk if (openKeyboard) { OpenSystemKeyboard(); // open keyboard to give the representation a title. instructionObject.SetActive(true); // the instructionobject tells the user that he has to type the title of the recording buttons.SetActive(false); } else { // If recording is loaded from anchors, open keyboard not needed buttons.SetActive(true); instructionObject.SetActive(false); titleOfRepresentation.text = recording.titleOfClip; } timerText.text = recording.lengthOfClip.ToString() + "s"; InstantiateHandAndSetInactive(leftHand, ref instantiatedLeftHand, ref anchoredObject); // the hands should only become visible when the animation is running InstantiateHandAndSetInactive(rightHand, ref instantiatedRightHand, ref anchoredObject); // add animationclip to hand prefabs and audio clip of recording to the audiosource of the representation (AnimationClip leftHandClip, AnimationClip rightHandClip) = GetAnimationClipsFromAllKeyFrames(recording.allKeyFrames); Debug.Log("AnimationClips were loaded"); instantiatedLeftHand.GetComponent <Animation>().AddClip(leftHandClip, "leftHand"); instantiatedRightHand.GetComponent <Animation>().AddClip(rightHandClip, "rightHand"); }
/// <summary> /// Called when a remote anchor has been deserialized. /// </summary> /// <param name="status"></param> /// <param name="anchorBatch"></param> private void ImportComplete(SerializationCompletionReason status, WorldAnchorTransferBatch anchorBatch) { bool successful = status == SerializationCompletionReason.Succeeded; GameObject objectToAnchor = null; if (successful) { if (ShowDetailedLogs) { Debug.LogFormat("[SharingWorldAnchorManager] Successfully imported \"{0}\" anchors.", anchorBatch.anchorCount.ToString()); } if (AnchorDebugText != null) { AnchorDebugText.text += string.Format("\nSuccessfully imported \"{0}\" anchors.", anchorBatch.anchorCount.ToString()); } string[] anchorNames = anchorBatch.GetAllIds(); for (var i = 0; i < anchorNames.Length; i++) { if (AnchorGameObjectReferenceList.TryGetValue(anchorNames[i], out objectToAnchor)) { AnchorStore.Save(anchorNames[i], anchorBatch.LockObject(anchorNames[i], objectToAnchor)); } else { //TODO: Figure out how to get the GameObject reference from across the network. For now it's best to use unique GameObject names. Debug.LogWarning("[SharingWorldAnchorManager] Unable to import anchor! We don't know which GameObject to anchor!"); if (AnchorDebugText != null) { AnchorDebugText.text += "\nUnable to import anchor! We don\'t know which GameObject to anchor!"; } } } } else { Debug.LogError("[SharingWorldAnchorManager] Import failed!"); if (AnchorDebugText != null) { AnchorDebugText.text += "\nImport failed!"; } } if (AnchorDownloaded != null) { AnchorDownloaded(successful, objectToAnchor); } anchorBatch.Dispose(); rawAnchorDownloadData = null; isImportingAnchors = false; }
public virtual async void Start() { anchorStoreInstance = new GameObject(); anchorStoreInstance.AddComponent <AnchorStore>(); anchorStore = anchorStoreInstance.GetComponent <AnchorStore>(); anchorStore.Init(); instantiatedAnchorIds = new HashSet <string>(); base.Start(); }
/// <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!"; } } } } } }