69 lines
2.2 KiB
C#
69 lines
2.2 KiB
C#
using UnityEngine;
|
|
|
|
[ExecuteInEditMode]
|
|
public class WorldCurver : MonoBehaviour
|
|
{
|
|
[field: Range(-0.1f, 0.1f)]
|
|
[field: SerializeField] public float CurveStrengthY { get; private set; }
|
|
|
|
[field:Range(-0.1f, 0.1f)]
|
|
[field: SerializeField] public float CurveStrengthX { get; private set; }
|
|
|
|
[SerializeField] private Transform curveOrigin;
|
|
|
|
private int curveStrengthXID;
|
|
private int curveStrengthYID;
|
|
private int curveOriginID;
|
|
|
|
|
|
private void OnEnable()
|
|
{
|
|
curveStrengthYID = Shader.PropertyToID("_CurveStrength_y");
|
|
curveStrengthXID = Shader.PropertyToID("_CurveStrength_x");
|
|
curveOriginID = Shader.PropertyToID("_CurveOrigin");
|
|
}
|
|
|
|
public void Tick()
|
|
{
|
|
Shader.SetGlobalFloat(curveStrengthYID, CurveStrengthY);
|
|
Shader.SetGlobalFloat(curveStrengthXID, CurveStrengthX);
|
|
Shader.SetGlobalVector(curveOriginID, curveOrigin.position);
|
|
}
|
|
|
|
public void TurnWorldToLeft()
|
|
{
|
|
var startRange = -0.003f;
|
|
var endRange = 0.003f;
|
|
var oscilationRange = (endRange - startRange) / 2;
|
|
var oscilationOffset = oscilationRange + startRange;
|
|
//float time = Mathf.Lerp(Time.time * 0.05f, 1);
|
|
CurveStrengthX = Mathf.Lerp(startRange, endRange, Time.time);
|
|
}
|
|
public void SinCurveX()
|
|
{
|
|
var startRange = -0.003f; //your chosen start value
|
|
var endRange = 0.003f; //your chose end value
|
|
var oscilationRange = (endRange - startRange) / 2;
|
|
var oscilationOffset = oscilationRange + startRange;
|
|
|
|
CurveStrengthX = oscilationOffset + Mathf.Sin(Time.time) * oscilationRange;
|
|
//curveStrengthX = Mathf.Clamp(Mathf.Sin(Time.time),-0.001f,0.001f);
|
|
}
|
|
public void SinCurveY()
|
|
{
|
|
var startRange = -0.003f; //your chosen start value
|
|
var endRange = 0.003f; //your chose end value
|
|
var oscilationRange = (endRange - startRange) / 2;
|
|
var oscilationOffset = oscilationRange + startRange;
|
|
|
|
//CurveStrengthY = oscilationOffset + Mathf.Sin(Time.time) * oscilationRange;
|
|
|
|
//curveStrengthY = Mathf.Lerp(-0.003f, 0.003f, Time.deltaTime);
|
|
//CurveStrengthY = Mathf.PingPong(Time.time, endRange - startRange);
|
|
//PingPong between 0 and 1
|
|
float time = Mathf.PingPong(Time.time * 0.05f, 1);
|
|
CurveStrengthX = Mathf.Lerp(startRange, endRange, time);
|
|
//curveStrengthX = Mathf.Clamp(Mathf.Sin(Time.time),-0.001f,0.001f);
|
|
}
|
|
}
|