83 lines
3.0 KiB
C#
83 lines
3.0 KiB
C#
using System;
|
|
using UnityEditor.SettingsManagement;
|
|
using UnityEngine;
|
|
using UnityEngine.Splines;
|
|
|
|
namespace UnityEditor.Splines
|
|
{
|
|
/// <summary>
|
|
/// SplineGizmoUtility provides methods for drawing in-scene representations of Splines.
|
|
/// </summary>
|
|
public static class SplineGizmoUtility
|
|
{
|
|
[UserSetting]
|
|
internal static UserSetting<Color> s_GizmosLineColor = new UserSetting<Color>(PathSettings.instance, "Gizmos.SplineColor", Color.blue, SettingsScope.User);
|
|
|
|
[UserSettingBlock("Gizmos")]
|
|
static void GizmosColorPreferences(string searchContext)
|
|
{
|
|
s_GizmosLineColor.value = SettingsGUILayout.SettingsColorField("Splines Color", s_GizmosLineColor, searchContext);
|
|
}
|
|
|
|
static readonly Color s_OutlineColor = new Color(0f, 0f, 0f, .5f);
|
|
|
|
/// <summary>
|
|
/// Draw a line gizmo for a <see cref="ISplineContainer"/>.
|
|
/// </summary>
|
|
/// <param name="container">An object implementing the ISplineContainer interface. Usually this will be a MonoBehaviour.</param>
|
|
public static void DrawGizmos(ISplineContainer container)
|
|
{
|
|
var splines = container.Splines;
|
|
if (splines == null)
|
|
return;
|
|
|
|
Gizmos.matrix = ((MonoBehaviour)container).transform.localToWorldMatrix;
|
|
foreach (var spline in splines)
|
|
{
|
|
if(spline == null || spline.Count < 2)
|
|
continue;
|
|
|
|
Vector3[] positions;
|
|
SplineCacheUtility.GetCachedPositions(spline, out positions);
|
|
|
|
#if UNITY_2023_1_OR_NEWER
|
|
Gizmos.DrawLineStrip(positions, false);
|
|
#else
|
|
for (int i = 1; i < positions.Length; ++i)
|
|
Gizmos.DrawLine(positions[i-1], positions[i]);
|
|
#endif
|
|
}
|
|
Gizmos.matrix = Matrix4x4.identity;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draw a line gizmo for a <see cref="ISplineProvider"/>.
|
|
/// </summary>
|
|
/// <param name="provider">An object implementing the ISplineProvider interface. Usually this will be a MonoBehaviour.</param>
|
|
[Obsolete("Use the overload that uses " + nameof(ISplineContainer))]
|
|
public static void DrawGizmos(ISplineProvider provider)
|
|
{
|
|
var splines = provider.Splines;
|
|
if (splines == null)
|
|
return;
|
|
|
|
Gizmos.matrix = ((MonoBehaviour)provider).transform.localToWorldMatrix;
|
|
foreach (var spline in splines)
|
|
{
|
|
if (spline == null || spline.Count < 2)
|
|
continue;
|
|
|
|
Vector3[] positions;
|
|
SplineCacheUtility.GetCachedPositions(spline, out positions);
|
|
|
|
#if UNITY_2023_1_OR_NEWER
|
|
Gizmos.DrawLineStrip(positions, false);
|
|
#else
|
|
for (int i = 1; i < positions.Length; ++i)
|
|
Gizmos.DrawLine(positions[i-1], positions[i]);
|
|
#endif
|
|
}
|
|
Gizmos.matrix = Matrix4x4.identity;
|
|
}
|
|
}
|
|
} |