You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.0 KiB
103 lines
3.0 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class MathExamples : MonoBehaviour
|
|
{
|
|
// REFERENCES
|
|
public Transform steppedTrans;
|
|
public Transform badSmoothTrans;
|
|
public Transform smoothedTrans;
|
|
|
|
// PARAMETERS
|
|
public Color clrA;
|
|
public Color clrB;
|
|
|
|
public Vector3 a;
|
|
public Vector3 b;
|
|
|
|
[Range(0f, 1f)]
|
|
public float t;
|
|
|
|
public bool useTime = false;
|
|
public AnimationCurve easingCurve;
|
|
|
|
public float smoothingRate;
|
|
public float smoothingFactor;
|
|
public float smoothingHalflife;
|
|
|
|
// INTERNALS
|
|
private Vector3 _offsetA = Vector3.zero;
|
|
private Vector3 _offsetB = Vector3.zero;
|
|
|
|
private float _lastSmoothingTime = 0f;
|
|
private float _badSmooth = 0f;
|
|
private float _smoothed = 0f;
|
|
|
|
// LIFECYCLE
|
|
private void Awake()
|
|
{
|
|
this._offsetA = Random.insideUnitSphere * 100f;
|
|
this._offsetB = Random.insideUnitSphere * 100f;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
//this.ShowLerpSmoothing();
|
|
//this.ShowLerp(a, b);
|
|
this.ShowNoise();
|
|
}
|
|
|
|
// BEHAVIORS
|
|
private void ShowLerpSmoothing()
|
|
{
|
|
float s = Mathf.Round(Mathf.Sin(Time.time * 0.75f) * 2f);
|
|
|
|
if ((Time.time - this._lastSmoothingTime) > this.smoothingRate)
|
|
{
|
|
this._lastSmoothingTime = Time.time;
|
|
|
|
this._badSmooth = Mathf.Lerp(this._badSmooth, s, this.smoothingFactor);
|
|
this._smoothed = MathExtras.LerpSmooth(this._smoothed, s, smoothingRate, this.smoothingHalflife);
|
|
}
|
|
|
|
this.steppedTrans.position = new Vector3(Time.time, s, 0.5f);
|
|
this.badSmoothTrans.position = new Vector3(Time.time, this._badSmooth, 0f);
|
|
this.smoothedTrans.position = new Vector3(Time.time, this._smoothed, 0f);
|
|
}
|
|
|
|
private void ShowNoise()
|
|
{
|
|
//Vector3 newA = this.a + Random.insideUnitSphere;
|
|
//Vector3 newB = this.b + Random.insideUnitSphere;
|
|
|
|
//Vector3 newA = this.a + (Vector3.up * Mathf.PerlinNoise1D((Time.time * 2f) + 1234f));
|
|
//Vector3 newB = this.b + (Vector3.up * Mathf.PerlinNoise1D((Time.time * 2f) + 1234f));
|
|
|
|
Vector3 newA = this.a + MathExtras.CheapPerlin3d((Time.time * Vector3.one) + this._offsetA);
|
|
Vector3 newB = this.b + MathExtras.CheapPerlin3d((Time.time * Vector3.one) + this._offsetB);
|
|
|
|
this.ShowLerp(newA, newB);
|
|
}
|
|
|
|
private void ShowLerp(Vector3 a, Vector3 b)
|
|
{
|
|
Debug.DrawLine(a, b, Color.white);
|
|
|
|
float tmp = (this.useTime ? Mathf.PingPong(Time.time * 0.2f, 1f) : this.t);
|
|
|
|
Vector3 pt = Vector3.Lerp(a, b, tmp);
|
|
this.DrawGizmo(pt, Color.green);
|
|
|
|
pt = Vector3.Lerp(a, b, this.easingCurve.Evaluate(tmp));
|
|
this.DrawGizmo(pt, Color.blue);
|
|
}
|
|
|
|
private void DrawGizmo(Vector3 pt, Color clr)
|
|
{
|
|
Debug.DrawLine(pt + Vector3.up, pt + Vector3.down, clr);
|
|
Debug.DrawLine(pt + Vector3.right, pt + Vector3.left, clr);
|
|
Debug.DrawLine(pt + Vector3.forward, pt + Vector3.back, clr);
|
|
}
|
|
}
|