Files
2026-02-21 16:45:37 +08:00

65 lines
1.5 KiB
C#

using UnityEngine;
namespace Crosstales.Radio.Demo.Util
{
[HelpURLAttribute("https://www.crosstales.com/media/data/assets/radio/api/class_crosstales_1_1_radio_1_1_demo_1_1_util_1_1_random_scaler.html")]
public class RandomScaler : MonoBehaviour
{
public Vector3 ScaleMin = Vector3.zero;
public Vector3 ScaleMax = Vector3.one;
public bool Uniform;
public Vector2 ChangeInterval = new Vector2(10f, 45f);
private Transform tf;
private Vector3 endScale;
private float elapsedTime;
private float changeTime;
private Vector3 startScale;
private float lerpTime;
public void Start()
{
tf = base.transform;
elapsedTime = (changeTime = Random.Range(ChangeInterval.x, ChangeInterval.y));
startScale = tf.localScale;
}
public void Update()
{
elapsedTime += Time.deltaTime;
if (elapsedTime > changeTime)
{
if (Uniform)
{
endScale.x = (endScale.y = (endScale.z = Random.Range(ScaleMin.x, Mathf.Abs(ScaleMax.x))));
}
else
{
endScale.x = Random.Range(ScaleMin.x, Mathf.Abs(ScaleMax.x));
endScale.y = Random.Range(ScaleMin.y, Mathf.Abs(ScaleMax.y));
endScale.z = Random.Range(ScaleMin.z, Mathf.Abs(ScaleMax.z));
}
changeTime = Random.Range(ChangeInterval.x, ChangeInterval.y);
lerpTime = (elapsedTime = 0f);
}
tf.localScale = Vector3.Lerp(startScale, endScale, lerpTime);
if (lerpTime < 1f)
{
lerpTime += Time.deltaTime / (changeTime - 0.1f);
}
else
{
startScale = tf.localScale;
}
}
}
}