T Out Parameter for Get Nearest Point
This commit is contained in:
parent
56e460a95b
commit
5fba9784c2
@ -4,16 +4,19 @@ using System;
|
|||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Splines;
|
using UnityEngine.Splines;
|
||||||
using static SplineImporter;
|
|
||||||
using static SplineData;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Unity.Mathematics;
|
using Unity.Mathematics;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
[CustomEditor(typeof(SplineImporter))]
|
namespace FrameJosh.SplineImporter
|
||||||
public class SplineImporterEditor : Editor
|
|
||||||
{
|
{
|
||||||
|
using static SplineImporter;
|
||||||
|
using static SplineData;
|
||||||
|
|
||||||
|
[CustomEditor(typeof(SplineImporter))]
|
||||||
|
public class SplineImporterEditor : Editor
|
||||||
|
{
|
||||||
public override void OnInspectorGUI()
|
public override void OnInspectorGUI()
|
||||||
{
|
{
|
||||||
DrawDefaultInspector();
|
DrawDefaultInspector();
|
||||||
@ -126,11 +129,11 @@ public class SplineImporterEditor : Editor
|
|||||||
AssetDatabase.Refresh();
|
AssetDatabase.Refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[RequireComponent(typeof(SplineContainer))]
|
[RequireComponent(typeof(SplineContainer))]
|
||||||
public class SplineImporter : MonoBehaviour
|
public class SplineImporter : MonoBehaviour
|
||||||
{
|
{
|
||||||
public TextAsset splineData;
|
public TextAsset splineData;
|
||||||
|
|
||||||
public float scale = 1;
|
public float scale = 1;
|
||||||
@ -149,11 +152,11 @@ public class SplineImporter : MonoBehaviour
|
|||||||
z = vector.y
|
z = vector.y
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class SplineData
|
public class SplineData
|
||||||
{
|
{
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public struct Position
|
public struct Position
|
||||||
{
|
{
|
||||||
@ -185,6 +188,7 @@ public class SplineData
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Spline[] splines = new Spline[0];
|
public Spline[] splines = new Spline[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
@ -2,13 +2,15 @@ using Unity.Mathematics;
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Splines;
|
using UnityEngine.Splines;
|
||||||
|
|
||||||
public class SplinePlus : MonoBehaviour
|
namespace FrameJosh.SplineImporter
|
||||||
{
|
{
|
||||||
|
public class SplinePlus : MonoBehaviour
|
||||||
|
{
|
||||||
public SplineContainer splineContainer;
|
public SplineContainer splineContainer;
|
||||||
|
|
||||||
public SplineContainer deformContainer;
|
public SplineContainer deformContainer;
|
||||||
|
|
||||||
public int resolution;
|
public int resolution = 1;
|
||||||
|
|
||||||
public void Evaluate(int splineIndex, float anchor, float distance, out Vector3 position, out Quaternion rotation)
|
public void Evaluate(int splineIndex, float anchor, float distance, out Vector3 position, out Quaternion rotation)
|
||||||
{
|
{
|
||||||
@ -30,6 +32,40 @@ public class SplinePlus : MonoBehaviour
|
|||||||
EvaluateSpline(t, out position, out rotation);
|
EvaluateSpline(t, out position, out rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GetNearestPoint(int splineIndex, Vector3 point, out Vector3 position, out Quaternion rotation, out float t)
|
||||||
|
{
|
||||||
|
position = Vector3.zero;
|
||||||
|
|
||||||
|
rotation = Quaternion.identity;
|
||||||
|
|
||||||
|
t = 0;
|
||||||
|
|
||||||
|
float nearestDistance = Mathf.Infinity;
|
||||||
|
|
||||||
|
for (int i = 0; i < splineContainer.Splines.Count; i++)
|
||||||
|
{
|
||||||
|
int resolutionScale = Mathf.CeilToInt(splineContainer.Splines[i].GetLength()) * resolution;
|
||||||
|
|
||||||
|
for (float j = 0; j <= resolutionScale; j++)
|
||||||
|
{
|
||||||
|
Evaluate(i, j / resolutionScale, 0, out Vector3 thisPosition, out Quaternion thisRotation);
|
||||||
|
|
||||||
|
float thisDistance = Vector3.Distance(point, thisPosition);
|
||||||
|
|
||||||
|
if (thisDistance < nearestDistance)
|
||||||
|
{
|
||||||
|
position = thisPosition;
|
||||||
|
|
||||||
|
rotation = thisRotation;
|
||||||
|
|
||||||
|
t = j / resolutionScale;
|
||||||
|
|
||||||
|
nearestDistance = thisDistance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void GetNearestPoint(Vector3 point, out Vector3 position, out Quaternion rotation)
|
public void GetNearestPoint(Vector3 point, out Vector3 position, out Quaternion rotation)
|
||||||
{
|
{
|
||||||
position = Vector3.zero;
|
position = Vector3.zero;
|
||||||
@ -168,7 +204,7 @@ public class SplinePlus : MonoBehaviour
|
|||||||
upVector = splineContainer.transform.TransformDirection(upVector);
|
upVector = splineContainer.transform.TransformDirection(upVector);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDrawGizmos()
|
void OnDrawGizmosSelected()
|
||||||
{
|
{
|
||||||
if (!splineContainer || !deformContainer) return;
|
if (!splineContainer || !deformContainer) return;
|
||||||
|
|
||||||
@ -192,4 +228,5 @@ public class SplinePlus : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
using Unity.Mathematics;
|
using Unity.Mathematics;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class SplineEvaluateDebug : MonoBehaviour
|
namespace FrameJosh.SplineImporter.Samples
|
||||||
{
|
{
|
||||||
|
public class SplineEvaluateDebug : MonoBehaviour
|
||||||
|
{
|
||||||
[SerializeField] SplinePlus splinePlus;
|
[SerializeField] SplinePlus splinePlus;
|
||||||
|
|
||||||
[SerializeField] float anchor;
|
[SerializeField] float anchor;
|
||||||
@ -45,4 +47,5 @@ public class SplineEvaluateDebug : MonoBehaviour
|
|||||||
|
|
||||||
Gizmos.DrawRay(position, transform.forward * matrixSize);
|
Gizmos.DrawRay(position, transform.forward * matrixSize);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class SplineNearestPointDebug : MonoBehaviour
|
namespace FrameJosh.SplineImporter.Samples
|
||||||
{
|
{
|
||||||
|
public class SplineNearestPointDebug : MonoBehaviour
|
||||||
|
{
|
||||||
[SerializeField] SplinePlus splinePlus;
|
[SerializeField] SplinePlus splinePlus;
|
||||||
|
|
||||||
[SerializeField] float cubeSize;
|
[SerializeField] float cubeSize;
|
||||||
@ -14,4 +16,5 @@ public class SplineNearestPointDebug : MonoBehaviour
|
|||||||
|
|
||||||
Gizmos.DrawCube(position, Vector3.one * cubeSize);
|
Gizmos.DrawCube(position, Vector3.one * cubeSize);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user