Files
GameDevTVObstacleDodge/Library/PackageCache/com.unity.cinemachine@5342685532bb/Samples~/Shared Assets/Scripts/RandomizedDollySpeed.cs

44 lines
1.6 KiB
C#

using System;
using UnityEngine;
using UnityEngine.Splines;
namespace Unity.Cinemachine.Samples
{
[Serializable]
public class RandomizedDollySpeed : SplineAutoDolly.ISplineAutoDolly
{
[Tooltip("Minimum speed the cart can travel")]
public float MinSpeed = 2;
[Tooltip("Maximum speed the cart can travel")]
public float MaxSpeed = 10;
[Tooltip("How quickly the cart can change speed")]
public float Acceleration = 1;
float m_Speed;
float m_TargetSpeed;
void SplineAutoDolly.ISplineAutoDolly.Validate() => MaxSpeed = Mathf.Max(MaxSpeed, MinSpeed);
void SplineAutoDolly.ISplineAutoDolly.Reset() => m_Speed = m_TargetSpeed = (MinSpeed + MaxSpeed) / 2;
bool SplineAutoDolly.ISplineAutoDolly.RequiresTrackingTarget => false;
public float GetSplinePosition(
MonoBehaviour sender, Transform target,
SplineContainer spline, float currentPosition,
PathIndexUnit positionUnits, float deltaTime)
{
if (Application.isPlaying && deltaTime > 0)
{
if (Mathf.Abs(m_Speed - m_TargetSpeed) < 0.01f)
m_TargetSpeed = UnityEngine.Random.Range(MinSpeed, MaxSpeed);
if (m_Speed < m_TargetSpeed)
m_Speed = Mathf.Min(m_TargetSpeed, m_Speed + Acceleration * deltaTime);
if (m_Speed > m_TargetSpeed)
m_Speed = Mathf.Max(m_TargetSpeed, m_Speed - Acceleration * deltaTime);
return currentPosition + m_Speed * deltaTime;
}
return currentPosition;
}
}
}