This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
ARPlusSystem/ARPlusSystem-250418/Assets/ARLocation/Experimental/NewPathLineRenderer.cs

79 lines
2.5 KiB
C#
Raw Permalink Normal View History

using UnityEngine;
namespace ARLocation
{
public class NewPathLineRenderer : MonoBehaviour
{
public LocationPath Path;
public int MaxNumberOfUpdates = 4;
private ARLocationProvider locationProvider;
private LineRenderer lineRenderer;
private Transform arLocationRoot;
bool initialized;
int updateCount;
void Start()
{
#if UNITY_EDITOR
MaxNumberOfUpdates = 1;
#endif
}
public void Init(LocationPath path, LineRenderer renderer)
{
Path = path;
lineRenderer = renderer;
arLocationRoot = ARLocationManager.Instance.gameObject.transform;
initialized = true;
locationProvider = ARLocationProvider.Instance;
locationProvider.OnLocationUpdatedDelegate += locationUpdatedHandler;
if (locationProvider.IsEnabled) {
locationUpdatedHandler(locationProvider.CurrentLocation, locationProvider.CurrentLocation);
}
}
private void locationUpdatedHandler(LocationReading locationReading, LocationReading _)
{
if (!initialized || updateCount >= MaxNumberOfUpdates)
{
return;
}
var points = new Vector3[Path.Locations.Length];
var cameraTransform = ARLocationManager.Instance.MainCamera.transform;
var location = locationReading.ToLocation();
for (int i = 0; i < points.Length; i++)
{
var loc = Path.Locations[i];
points[i] = Location.GetGameObjectPositionForLocation(arLocationRoot, ARLocationManager.Instance.MainCamera.transform, location, loc, true);
//points[i] = lineRenderer.gameObject.transform.worldToLocalMatrix.MultiplyPoint(points[i]);
points[i].y = points[i].z;
points[i].z = 0;
}
lineRenderer.useWorldSpace = false;
lineRenderer.positionCount = Path.Locations.Length;
lineRenderer.SetPositions(points);
lineRenderer.alignment = LineAlignment.TransformZ;
lineRenderer.gameObject.transform.localRotation = Quaternion.Euler(90, 0, 0);
updateCount++;
}
void Update()
{
if (!initialized)
{
return;
}
lineRenderer.gameObject.transform.localPosition = MathUtils.SetY(lineRenderer.gameObject.transform.localPosition, Camera.main.transform.position.y - 1.5f);
}
}
}