2022-08-22 21:09:09 +03:00

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);
}
}