51 lines
1.6 KiB
C#
51 lines
1.6 KiB
C#
/* INFINITY CODE */
|
|
/* https://infinity-code.com */
|
|
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace InfinityCode.RealWorldTerrain
|
|
{
|
|
public class RealWorldTerrainLookLngLat : MonoBehaviour
|
|
{
|
|
public float distance = 10;
|
|
public float height = 5;
|
|
public float lat;
|
|
public float lng;
|
|
|
|
public static bool GetRealWorldPoint(out Vector3 position, double lng, double lat)
|
|
{
|
|
position = new Vector3();
|
|
|
|
RealWorldTerrainContainer[] targets = RealWorldTerrainUtils.FindObjectsOfType<RealWorldTerrainContainer>();
|
|
RealWorldTerrainContainer target = targets.FirstOrDefault(t => t.Contains(lng, lat));
|
|
|
|
if (target == null)
|
|
{
|
|
Debug.Log("Target not found");
|
|
return false;
|
|
}
|
|
|
|
return target.GetWorldPosition(lng, lat, out position);
|
|
}
|
|
|
|
public static void LookTo(float lng, float lat)
|
|
{
|
|
Vector3 position;
|
|
if (!GetRealWorldPoint(out position, lng, lat)) return;
|
|
Camera.main.transform.LookAt(position);
|
|
}
|
|
|
|
public static void MoveTo(float lng, float lat, float distance, float height)
|
|
{
|
|
Vector3 position;
|
|
if (!GetRealWorldPoint(out position, lng, lat)) return;
|
|
Vector3 direction = Camera.main.transform.position - position;
|
|
direction.y = 0;
|
|
Vector3 newPosition = position + direction.normalized * distance;
|
|
newPosition.y += height;
|
|
Camera.main.transform.position = newPosition;
|
|
Camera.main.transform.LookAt(position);
|
|
}
|
|
}
|
|
} |