RealWorldTerrainLookLngLat.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* INFINITY CODE 2013-2019 */
  2. /* http://www.infinity-code.com */
  3. using System.Linq;
  4. using UnityEngine;
  5. namespace InfinityCode.RealWorldTerrain
  6. {
  7. public class RealWorldTerrainLookLngLat : MonoBehaviour
  8. {
  9. public float distance = 10;
  10. public float height = 5;
  11. public float lat;
  12. public float lng;
  13. public static bool GetRealWorldPoint(out Vector3 position, double lng, double lat)
  14. {
  15. position = new Vector3();
  16. RealWorldTerrainContainer[] targets = FindObjectsOfType<RealWorldTerrainContainer>();
  17. RealWorldTerrainContainer target = targets.FirstOrDefault(t => t.Contains(lng, lat));
  18. if (target == null)
  19. {
  20. Debug.Log("Target not found");
  21. return false;
  22. }
  23. return target.GetWorldPosition(lng, lat, out position);
  24. }
  25. public static void LookTo(float lng, float lat)
  26. {
  27. Vector3 position;
  28. if (!GetRealWorldPoint(out position, lng, lat)) return;
  29. Camera.main.transform.LookAt(position);
  30. }
  31. public static void MoveTo(float lng, float lat, float distance, float height)
  32. {
  33. Vector3 position;
  34. if (!GetRealWorldPoint(out position, lng, lat)) return;
  35. Vector3 direction = Camera.main.transform.position - position;
  36. direction.y = 0;
  37. Vector3 newPosition = position + direction.normalized * distance;
  38. newPosition.y += height;
  39. Camera.main.transform.position = newPosition;
  40. Camera.main.transform.LookAt(position);
  41. }
  42. }
  43. }