private void CheckResolveProgress() { numOfSuccess = 0; numOfFailed = 0; numOfUnable = 0; for (i = 0; i < numOfToBeResolved; i++) { _arDebugManager.LogInfo($"#{i + 1}"); try { if (cloudAnchorList[i]) { CloudAnchorState cloudAnchorState = cloudAnchorList[i].cloudAnchorState; if (cloudAnchorState == CloudAnchorState.Success) { _arDebugManager.LogInfo($"#{i + 1}, CloudAnchorId: {cloudAnchorList[i].cloudAnchorId} resolved"); resolver.Invoke(cloudAnchorList[i].transform, i); // _arPlacementManager.ReCreatePlacement(cloudAnchor.transform, i); numOfSuccess++; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { _arDebugManager.LogError($"Fail to resolve Cloud Anchor #{(i + 1).ToString()} with state: {cloudAnchorState}"); numOfFailed++; } else { _arDebugManager.LogInfo($"CheckResolveProgress #{(i + 1).ToString()} id {cloudAnchorList[i].cloudAnchorId}"); } } else { numOfUnable++; _arDebugManager.LogError($"Unable to resolve cloud achor #{i + 1} id {cloudAnchorList[i].cloudAnchorId}, numOfUnable = {numOfUnable}"); } } catch (System.NullReferenceException e) { numOfUnable++; _arDebugManager.LogError($"Unable to resolve cloud achor #{i + 1} id {cloudAnchorList[i].cloudAnchorId}, numOfUnable = {numOfUnable}"); } } _arDebugManager.LogInfo($"numOfSuccess = {numOfSuccess}, numOfFailed = {numOfFailed}, numOfUnable = {numOfUnable}"); if (numOfUnable != 0 || numOfFailed != 0) { _arDebugManager.LogInfo($"Too much unable/failed to resolve, please resolve again"); anchorResolveInProgress = false; _arPlacementManager.RemovePlacements(); } if (numOfSuccess == numOfToBeResolved) { anchorResolveInProgress = false; AverageWorldOrigin(); } }
/// <summary> /// Update the anchor if resolving Cloud Anchor is success. /// </summary> private void UpdateResolvedCloudAnchor() { if (_cloudAnchor == null) { Debug.LogError("No Cloud Anchor."); return; } CloudAnchorState cloudAnchorState = _cloudAnchor.cloudAnchorState; if (cloudAnchorState == CloudAnchorState.Success) { transform.SetParent(_cloudAnchor.transform, false); _cloudAnchorsExampleController.OnAnchorResolved( true, "Successfully resolved Cloud Anchor."); _cloudAnchorsExampleController.WorldOrigin = transform; _anchorMesh.SetActive(true); // Mark resolving timeout passed so it won't fire OnResolvingTimeoutPassed event. _passedResolvingTimeout = true; _shouldUpdatePoint = false; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { _cloudAnchorsExampleController.OnAnchorResolved( false, "Fail to resolve Cloud Anchor with state: " + cloudAnchorState); _shouldUpdatePoint = false; } }
// Update is called once per frame void Update() { if (m_AppMode == AppMode.WaitingForResolvedReferencePoint) { OutputText.text = m_AppMode.ToString(); CloudAnchorState cloudReferenceState = m_CloudReferencePoint.cloudAnchorState; OutputText.text += " - " + cloudReferenceState.ToString(); if (cloudReferenceState == CloudAnchorState.Success) { GameObject cloudAnchor = Instantiate( ResolvedPointPrefab, Vector3.zero, Quaternion.identity); cloudAnchor.transform.SetParent( m_CloudReferencePoint.transform, false); m_CloudReferencePoint = null; j++; if (j == paths.Count - 1) { m_AppMode = AppMode.FinishApp; } printScreen(paths[j]); } } if (m_AppMode == AppMode.FinishApp) { OutputText.text = "Hedefe Ulaştınız!"; } }
/// <summary> /// Update the anchor if hosting Cloud Anchor is success. /// </summary> private void UpdateHostedCloudAnchor() { if (_cloudAnchor == null) { Debug.LogError("No Cloud Anchor."); return; } CloudAnchorState cloudAnchorState = _cloudAnchor.cloudAnchorState; if (cloudAnchorState == CloudAnchorState.Success) { Debug.Log("cloud id : " + _clouAnchorId); CmdSetCloudAnchorId(_cloudAnchor.cloudAnchorId); _cloudAnchorsExampleController.OnAnchorHosted( true, $"Successfully hosted Cloud Anchor. cloud id : {_clouAnchorId}"); _shouldUpdatePoint = false; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { _cloudAnchorsExampleController.OnAnchorHosted(false, "Fail to host Cloud Anchor with state: " + cloudAnchorState); _shouldUpdatePoint = false; } }
// Update is called once per frame void Update() { if (m_AppMode == AppMode.TouchToHostCloudReferencePoint) { OutputText.text = m_AppMode.ToString(); if (Input.touchCount >= 1 && Input.GetTouch(0).phase == TouchPhase.Began && !EventSystem.current.IsPointerOverGameObject( Input.GetTouch(0).fingerId)) { List <ARRaycastHit> hitResults = new List <ARRaycastHit>(); RaycastManager.Raycast(Input.GetTouch(0).position, hitResults); if (hitResults.Count > 0) { Pose pose = hitResults[0].pose; // dokundurulan yerde referans noktası oluşturuyor. ARAnchor referencePoint = AnchorManager.AddAnchor(hitResults[0].pose); // bulut referans noktasını oluşturuyor. m_CloudReferencePoint = AnchorManager.HostCloudAnchor(referencePoint); if (m_CloudReferencePoint == null) { OutputText.text = "Create Failed!"; return; } // Wait for the reference point to be ready. m_AppMode = AppMode.WaitingForHostedReferencePoint; } } } else if (m_AppMode == AppMode.WaitingForHostedReferencePoint) { OutputText.text = m_AppMode.ToString(); CloudAnchorState cloudReferenceState = m_CloudReferencePoint.cloudAnchorState; OutputText.text += " - " + cloudReferenceState.ToString(); if (cloudReferenceState == CloudAnchorState.Success) { GameObject cloudAnchor = Instantiate( HostedPointPrefab, Vector3.zero, Quaternion.identity); cloudAnchor.transform.SetParent( m_CloudReferencePoint.transform, false); panel.gameObject.SetActive(true); m_CloudReferenceId = m_CloudReferencePoint.cloudAnchorId; cloudAnchorId.text = m_CloudReferenceId; m_CloudReferencePoint = null; m_AppMode = AppMode.TouchToHostCloudReferencePoint; } } }
private void CheckHostingProgress() { numOfSuccess = 0; numOfFailed = 0; numOfUnable = 0; for (i = 0; i < numOfQueued; i++) { if (cloudAnchorList[i] != null) { CloudAnchorState cloudAnchorState = cloudAnchorList[i].cloudAnchorState; if (cloudAnchorState == CloudAnchorState.Success) { // _arDebugManager.LogError($"Anchor #{(i + 1).ToString()} successfully hosted"); // keep track of cloud anchors added anchorToResolveList[i] = cloudAnchorList[i].cloudAnchorId; numOfSuccess++; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { _arDebugManager.LogError($"Fail to host anchor #{(i + 1).ToString()} with state: {cloudAnchorState}"); numOfFailed++; } else { // arDebugManager.LogInfo($"CheckHostingProgress #{(i + 1).ToString()}"); // arDebugManager.LogInfo($"#{(i + 1).ToString()}: NumOfCloudAnchor() = {NumOfCloudAnchor().ToString()}"); } } else { numOfUnable++; _arDebugManager.LogError($"Unable to host cloud anchor #{(i + 1).ToString()}, numOfUnable ={numOfUnable}"); // TODO: Remove the broken anchor and allow ARPlacementManger to add one new anchor to pendingHostAnchorList } } if (numOfFailed != 0 || numOfUnable != 0) { _arDebugManager.LogInfo($"Too much unable/failed to host, please pick anchor again"); anchorUpdateInProgress = false; _arPlacementManager.RemovePlacements(); } if (numOfSuccess == numOfQueued) { anchorUpdateInProgress = false; numOfToBeResolved = numOfSuccess; for (i = 0; i < numOfSuccess; i++) { _arDebugManager.LogError($"Anchor #{(i + 1).ToString()} successfully hosted"); } _arCloudAnchorsMetaManger.SendUpdate(anchorToResolveList); } }
private void CheckHostingProgress() { numOfSuccess = 0; numOfFailed = 0; numOfUnable = 0; for (i = 0; i < numOfQueued; i++) { if (cloudAnchorList[i] != null) { CloudAnchorState cloudAnchorState = cloudAnchorList[i].cloudAnchorState; if (cloudAnchorState == CloudAnchorState.Success) { // _arDebugManager.LogError($"Anchor #{(i + 1).ToString()} successfully hosted"); // keep track of cloud anchors added anchorToResolveList[i] = cloudAnchorList[i].cloudAnchorId; numOfSuccess++; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { _arDebugManager.LogError($"Fail to host anchor #{(i + 1).ToString()} with state: {cloudAnchorState}"); numOfFailed++; } } else { numOfUnable++; // _arDebugManager.LogError($"Firsttttttttt #{(i + 1).ToString()}, numOfUnable ={numOfUnable}"); _arDebugManager.LogError($"Unable to host cloud anchor #{(i + 1).ToString()}, numOfUnable ={numOfUnable}"); } } if (numOfFailed != 0 || numOfUnable != 0) { _arDebugManager.LogInfo($"Too much unable/failed to host, please pick anchor again"); anchorUpdateInProgress = false; _arPlacementManager.RemovePlacements(); } if (numOfSuccess == numOfQueued) { anchorUpdateInProgress = false; numOfToBeResolved = numOfSuccess; // _cloudAnchorsMetaManager.join((int)quality); // _cloudAnchorsMetaManager.join(); // _cloudAnchorsMetaManager.uploadAnchorToResolveList(anchorToResolveList); for (i = 0; i < numOfSuccess; i++) { _arDebugManager.LogError($"Anchor #{(i + 1).ToString()} successfully hosted, id = {anchorToResolveList[i]}"); } _arDebugManager.LogError($"Cloud Anchors ID uploaded to session"); } }
private void CheckResolveProgress() { CloudAnchorState cloudAnchorState = cloudanchor.cloudAnchorState; if (cloudAnchorState == CloudAnchorState.Success) { debugtext.text = "Anchor successfully hosted"; anchorHostInProgress = false; anchorToResolve = cloudanchor.cloudAnchorId; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { anchorHostInProgress = false; debugtext.text = "Fail to host anchor with state"; } }
private void CheckHostingProgress() { CloudAnchorState cloudanchorstate = cloudanchor.cloudAnchorState; if (cloudanchorstate == CloudAnchorState.Success) { anchorHostInProgress = false; anchorToResolve = cloudanchor.cloudAnchorId; } else if (cloudanchorstate != CloudAnchorState.TaskInProgress) { anchorHostInProgress = false; debugtext.text = "state : CloudAnchorState.TaskInProgress"; } }
private void CheckHostingProgress() { CloudAnchorState cloudAnchorState = cloudAnchor.cloudAnchorState; if (cloudAnchorState == CloudAnchorState.Success) { // ARDebugManager.Instance.LogError("Anchor successfully hosted"); anchorUpdateInProgress = false; // keep track of cloud anchors added anchorToResolve = cloudAnchor.cloudAnchorId; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { // ARDebugManager.Instance.LogError($"Fail to host anchor with state: {cloudAnchorState}"); anchorUpdateInProgress = false; } }
private void CheckResolveProgress() { CloudAnchorState cloudAnchorState = cloudAnchor.cloudAnchorState; // ARDebugManager.Instance.LogInfo($"ResolveCloudAnchor state {cloudAnchorState}"); if (cloudAnchorState == CloudAnchorState.Success) { // ARDebugManager.Instance.LogInfo($"CloudAnchorId: {cloudAnchor.cloudAnchorId} resolved"); resolver.Invoke(cloudAnchor.transform); anchorResolveInProgress = false; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { // ARDebugManager.Instance.LogError($"Fail to resolve Cloud Anchor with state: {cloudAnchorState}"); anchorResolveInProgress = false; } }
/// <summary> /// Update the anchor if hosting Cloud Anchor is success. /// </summary> private void _UpdateHostedCloudAnchor() { if (m_CloudAnchor == null) { Debug.LogError("No Cloud Anchor."); return; } CloudAnchorState cloudAnchorState = m_CloudAnchor.cloudAnchorState; if (cloudAnchorState == CloudAnchorState.Success) { CmdSetCloudAnchorId(m_CloudAnchor.cloudAnchorId); m_CloudAnchorsExampleController.OnAnchorHosted( true, "Successfully hosted Cloud Anchor."); m_ShouldUpdatePoint = false; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { m_CloudAnchorsExampleController.OnAnchorHosted(false, "Fail to host Cloud Anchor with state: " + cloudAnchorState); m_ShouldUpdatePoint = false; } }
void Update() { if (m_AppMode == AppMode.TouchToHostCloudAnchor) { OutputText.text = m_AppMode.ToString(); if (Input.touchCount >= 1 && Input.GetTouch(0).phase == TouchPhase.Began && !EventSystem.current.IsPointerOverGameObject( Input.GetTouch(0).fingerId)) { List <ARRaycastHit> hitResults = new List <ARRaycastHit>(); RaycastManager.Raycast(Input.GetTouch(0).position, hitResults); if (hitResults.Count > 0) { Pose pose = hitResults[0].pose; // Create a reference point at the touch. ARAnchor anchor = AnchorManager.AddAnchor( hitResults[0].pose); // Create Cloud Reference Point. m_CloudAnchor = AnchorManager.HostCloudAnchor( anchor); if (m_CloudAnchor == null) { OutputText.text = "Create Failed!"; return; } // Wait for the reference point to be ready. m_AppMode = AppMode.WaitingForHostedAnchor; } } } else if (m_AppMode == AppMode.WaitingForHostedAnchor) { OutputText.text = m_AppMode.ToString(); CloudAnchorState cloudAnchorState = m_CloudAnchor.cloudAnchorState; OutputText.text += " - " + cloudAnchorState.ToString(); if (cloudAnchorState == CloudAnchorState.Success) { GameObject cloudAnchor = Instantiate( HostedPointPrefab, Vector3.zero, Quaternion.identity); cloudAnchor.transform.SetParent( m_CloudAnchor.transform, false); cloudAnchorIdQueue.Enqueue(m_CloudAnchor.cloudAnchorId); StartCoroutine(saveAnchor(m_CloudAnchor.cloudAnchorId, GPS.Instance.latitude, GPS.Instance.longitude)); createMessage(m_CloudAnchor.cloudAnchorId); m_CloudAnchor = null; m_AppMode = AppMode.ResolveCloudAnchor; } } else if (m_AppMode == AppMode.ResolveCloudAnchor) { OutputText.text = m_AppMode.ToString(); //if there is a breadcrumb left to load if (cloudAnchorIdQueue.Count >= 1) { m_CloudAnchorId = cloudAnchorIdQueue.Dequeue(); OutputText.text = m_CloudAnchorId; m_CloudAnchor = AnchorManager.ResolveCloudAnchorId(m_CloudAnchorId); startTime = DateTime.Now; if (m_CloudAnchor == null) { OutputText.text = "Resolve Failed!"; m_CloudAnchorId = string.Empty; //m_AppMode = AppMode.TouchToHostCloudAnchor; return; } m_CloudAnchorId = string.Empty; // Wait for the reference point to be ready. m_AppMode = AppMode.WaitingForResolvedAnchor; } else { //if the queue is empty, return to placing anchors m_AppMode = AppMode.TouchToHostCloudAnchor; } } else if (m_AppMode == AppMode.WaitingForResolvedAnchor) { OutputText.text = m_AppMode.ToString(); CloudAnchorState cloudAnchorState = m_CloudAnchor.cloudAnchorState; OutputText.text += " - " + cloudAnchorState.ToString(); if (cloudAnchorState == CloudAnchorState.Success) { GameObject cloudAnchor = Instantiate( ResolvedPointPrefab, Vector3.zero, Quaternion.identity); cloudAnchor.transform.SetParent( m_CloudAnchor.transform, false); StartCoroutine(getMessage(m_CloudAnchor.cloudAnchorId, cloudAnchor.GetComponentInChildren <Text>())); m_CloudAnchor = null; if (cloudAnchorIdQueue.Count <= 0) { //if there are no more anchors to process, go back to placing anchors m_AppMode = AppMode.TouchToHostCloudAnchor; } else { //if there are more anchors to resolve, do that. m_AppMode = AppMode.ResolveCloudAnchor; } } else if (cloudAnchorState == CloudAnchorState.TaskInProgress) { if (startTime.HasValue && (DateTime.Now - startTime.Value).TotalSeconds >= maxWait) { m_CloudAnchor = null; if (cloudAnchorIdQueue.Count <= 0) { //if there are no more anchors to process, go back to placing anchors m_AppMode = AppMode.TouchToHostCloudAnchor; } else { //if there are more anchors to resolve, do that. m_AppMode = AppMode.ResolveCloudAnchor; } } } else if (cloudAnchorState == CloudAnchorState.ErrorResolvingCloudIdNotFound) { m_CloudAnchor = null; if (cloudAnchorIdQueue.Count <= 0) { //if there are no more anchors to process, go back to placing anchors m_AppMode = AppMode.TouchToHostCloudAnchor; } else { //if there are more anchors to resolve, do that. m_AppMode = AppMode.ResolveCloudAnchor; } } } else if (m_AppMode == AppMode.WaitingForQueue) { if (isQueueReady) { m_AppMode = AppMode.ResolveCloudAnchor; return; } //check if the gps has initialized and the populate coroutine has not started else if (!isQueueStarted && GPS.Instance.latitude != 0) { StartCoroutine(PopulateAnchorQueue(GPS.Instance.latitude, GPS.Instance.longitude)); isQueueStarted = true; } } }
// Update is called once per frame void Update() { if (m_AppMode == AppMode.TouchToHostCloudReferencePoint) { OutputText.text = m_AppMode.ToString(); // If the user presses a non-ui part of the screen if (Input.touchCount >= 1 && Input.GetTouch(0).phase == TouchPhase.Began && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) { // Raycast where the user touched the screen List <ARRaycastHit> hitResults = new List <ARRaycastHit>(); RaycastManager.Raycast(Input.GetTouch(0).position, hitResults); // If the user touched a surface in AR if (hitResults.Count > 0) { // Create a cloud anchor where the user touches in world space Pose pose = hitResults[0].pose; ARAnchor m_anchor = AnchorManager.AddAnchor(pose); m_CloudAnchor = AnchorManager.HostCloudAnchor(m_anchor); if (m_CloudAnchor == null) { Debug.LogError("Create Failed!"); return; } // Flag program to wait for the cloud anchor to register m_AppMode = AppMode.WaitingForHostedReferencePoint; } } } else if (m_AppMode == AppMode.WaitingForHostedReferencePoint) { OutputText.text = m_AppMode.ToString(); CloudAnchorState cloudAnchorState = m_CloudAnchor.cloudAnchorState; OutputText.text += " - " + cloudAnchorState.ToString(); if (cloudAnchorState == CloudAnchorState.Success) { // Place a HostedPointPrefab where the cloud anchor successfully spawned GameObject cloudAnchor = Instantiate(HostedPointPrefab, Vector3.zero, Quaternion.identity); cloudAnchor.transform.SetParent(m_CloudAnchor.transform, false); m_CloudReferenceId = m_CloudAnchor.cloudAnchorId; // Make the user resolve the anchor next m_AppMode = AppMode.TouchToResolveCloudReferencePoint; } } else if (m_AppMode == AppMode.TouchToResolveCloudReferencePoint) { OutputText.text = m_CloudReferenceId; // If the user taps the screen if (Input.touchCount >= 1 && Input.GetTouch(0).phase == TouchPhase.Began && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) { // Attempt to resolve the anchor that you just instantiated m_CloudAnchor = AnchorManager.ResolveCloudAnchorId(m_CloudReferenceId); if (m_CloudAnchor == null) { OutputText.text = "Resolve failed!"; m_CloudReferenceId = string.Empty; m_AppMode = AppMode.TouchToHostCloudReferencePoint; return; } m_CloudReferenceId = string.Empty; m_AppMode = AppMode.WaitingForResolvedReferencePoint; } } else if (m_AppMode == AppMode.WaitingForResolvedReferencePoint) { OutputText.text = m_AppMode.ToString(); CloudAnchorState cloudAnchorState = m_CloudAnchor.cloudAnchorState; if (cloudAnchorState == CloudAnchorState.Success) { GameObject cloudAnchor = Instantiate(ResolvedPointPrefab, Vector3.zero, Quaternion.identity); cloudAnchor.transform.SetParent(m_CloudAnchor.transform, false); m_CloudAnchor = null; m_AppMode = AppMode.TouchToHostCloudReferencePoint; } else if (cloudAnchorState != CloudAnchorState.TaskInProgress) { OutputText.text = "Invalid ID"; m_AppMode = AppMode.TouchToHostCloudReferencePoint; } Debug.Log(m_CloudReferenceId); } }