loudixvmuniu/Assets/GCSeries/Core/Scripts/Extensions/LineRendererExtensions.cs
shenjianxing 6b341ae2b4 适配VR
2025-04-01 16:16:45 +08:00

100 lines
3.5 KiB
C#

////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2007-2020 , Inc. All Rights Reserved.
//
////////////////////////////////////////////////////////////////////////////////
using UnityEngine;
namespace GCSeries.Core.Extensions
{
public static class LineRendererExtensions
{
////////////////////////////////////////////////////////////////////////
// Public Extension Methods
////////////////////////////////////////////////////////////////////////
/// <summary>
/// Update the positions of the line renderer to comform to
/// a quadratic bezier curve based on the specified control points.
/// </summary>
///
/// <param name="p0">
/// First control point defining the quadratic bezier curve.
/// </param>
/// <param name="p1">
/// Second control point defining the quadratic bezier curve.
/// </param>
/// <param name="p2">
/// Third control point defining the quadratic bezier curve.
/// </param>
public static void SetBezierCurve(
this LineRenderer l, Vector3 p0, Vector3 p1, Vector3 p2)
{
l.SetBezierCurve(0, l.positionCount, p0, p1, p2);
}
/// <summary>
/// Update the positions of the line renderer (defined by the specified
/// start index) to comform to a quadratic bezier curve based on the
/// specified control points.
/// </summary>
///
/// <param name="startIndex">
/// The index of the first position to update.
/// </param>
/// <param name="p0">
/// First control point defining the quadratic bezier curve.
/// </param>
/// <param name="p1">
/// Second control point defining the quadratic bezier curve.
/// </param>
/// <param name="p2">
/// Third control point defining the quadratic bezier curve.
/// </param>
public static void SetBezierCurve(this LineRenderer l,
int startIndex, Vector3 p0, Vector3 p1, Vector3 p2)
{
l.SetBezierCurve(startIndex, l.positionCount - startIndex, p0, p1, p2);
}
/// <summary>
/// Update the positions of the line renderer (defined by the specified
/// start index and length) to comform to a quadratic bezier curve
/// based on the specified control points.
/// </summary>
///
/// <param name="startIndex">
/// The index of the first position to update.
/// </param>
/// <param name="length">
/// The number of positions to update.
/// </param>
/// <param name="p0">
/// First control point defining the quadratic bezier curve.
/// </param>
/// <param name="p1">
/// Second control point defining the quadratic bezier curve.
/// </param>
/// <param name="p2">
/// Third control point defining the quadratic bezier curve.
/// </param>
public static void SetBezierCurve(this LineRenderer l,
int startIndex, int length, Vector3 p0, Vector3 p1, Vector3 p2)
{
float t = 0;
float step = 1 / (float)(length - 1);
for (int i = startIndex; i < startIndex + length; ++i)
{
Vector3 position =
Vector3Extensions.ComputePointOnBezierCurve(p0, p1, p2, t);
l.SetPosition(i, position);
t += step;
}
}
}
}