- Home /
 
               Question by 
               Chizukoo · Aug 29, 2019 at 02:59 PM · 
                augmented-realityaugmented realitygpscompassaugmentedreality  
              
 
              ARCore - prefab doesn't spawn at correct position
The prefab I'm trying to spawn is still all over the place. Sometimes infront of me, sometimes left, but mostly on top of the player (should be the same place always and not the player location). Am I missing something? Does anybody see where It's going wrong?
     using GoogleARCore;
     using System.Collections;
     using System.Collections.Generic;
     using UnityEngine;
 
     public class LocationManager : MonoBehaviour
     {
         private const float meterRadiusOfEarth = 6371000;
 
         [SerializeField]
         private GameObject _container;
 
         [SerializeField]
         private TiltManager _tiltManager;
         
         private void Awake()
         {
             print(Camera.main.transform.rotation.eulerAngles);
         }
 
         private IEnumerator Start()
         {
             print(Camera.main.transform.rotation.eulerAngles);
             // First, check if user has location service enabled
             yield return new WaitUntil(() => Input.location.isEnabledByUser);
 
             //Debug.Log("Location = {0}", );
             
             Input.compass.enabled = true;
             // Start service before querying location
             Input.location.Start();
 
             // Wait until service initializes
             int maxWait = 20;
             while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
             {
                 yield return new WaitForSeconds(1);
                 maxWait--;
             }
 
             // Service didn't initialize in 20 seconds
             if (maxWait < 1)
             {
                 print("Timed out");
                 yield break;
             }
 
             // Connection has failed
             if (Input.location.status == LocationServiceStatus.Failed)
             {
                 print("Unable to determine device location");
               
                 yield break;
             }
             else
             {
                 // Access granted and location value could be retrieved
                 var target = GPSEncoder.GPSToUCS(52.370216f, 4.895168f);
                 var currentPosition = GPSEncoder.GPSToUCS(Input.location.lastData.latitude, Input.location.lastData.longitude);
 
                 Pose pose = new Pose(target - currentPosition, Quaternion.identity);
                 Anchor sessionAnchor = null;
 
                 do
                 {
                     sessionAnchor = Session.CreateAnchor(pose);
 
                     if (sessionAnchor == null)
                     {
                         Debug.Log("failed making session");
                         yield return new WaitForSeconds(1);
                     }
                 }
                 while (sessionAnchor == null);
                 
                 Debug.LogFormat("session {0}", sessionAnchor.transform.position);
 
                 yield return new WaitUntil(() => _tiltManager.Balanced);
                 
                 _container.transform.rotation = Quaternion.Euler(0, -Input.compass.trueHeading + Camera.main.transform.rotation.eulerAngles.y, 0);
                 _container.transform.SetParent(sessionAnchor.transform, false);
 
                 for (int i = 0; i < _container.transform.childCount; i++)
                 {
                     var child = _container.transform.GetChild(i);
                     child.localPosition = child.position;
                 }
 
                 _container.transform.localPosition = -_container.transform.position;
 
                 Debug.LogFormat("{0} ||| {1}", Camera.main.transform.position, Camera.main.transform.rotation.eulerAngles);
 
                 print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp);
 
             }
            
             // Stop service if there is no need to query location updates continuously
             Input.location.Stop();
         }
         
         private void Update()
         {
             if (Input.GetKeyDown(KeyCode.Escape))
             {
                 Debug.Log(_container.activeInHierarchy);
                 Debug.Log((_container.transform.GetChild(0).position - Camera.main.transform.position).magnitude);
             }
         }
     }
 }
               Comment
              
 
               
              Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
               
 
			 
                