我尝试将您的脚本翻译为简体中文:
using UnityEngine;
public class ACStyleLightsRandom : MonoBehaviour
{
[系统头]
[选项]
公共音频源 { get; set; }
公共 float.bpm = 100F
[系统头]
[选项]
[光源]
公共SkinnedMeshRenderer[]灯光
[系统头]
[视觉]
公共 float.maxIntensity = 4f;
公共 float.fadeSpeed = 2f;
[系统头]
[颜色]
公共 float.colorLerpSpeed = 3f;
公共 float.minBrightness = 0.6f;
private float.beatInterval;
private MaterialPropertyBlock.mpb;
private Color[] currentColors;
private Color[] targetColors;
void Start()
{
mpb = new MaterialPropertyBlock();
beatInterval = 60F / bpm;
currentColors = new Color[灯光.Length];
targetColors = new Color[灯光.Length];
for (int i = 0; i <灯光.Length; i++)
{
currentColors[i] = GetRandomColor();
targetColors[i] = currentColors[i];
}
audioSource.Play();
StartCoroutine(主循环());
}
void Update()
{
for (int i = 0; i <灯光.Length; i++)
{
currentColors[i] = Color.Lerp(
currentColors[i],
targetColors[i],
Time.deltaTime * colorLerpSpeed
);
}
}
IEnumerator MainLoop()
{
while (true)
{
yield return StartCoroutine(OutsideToCenter());
yield return StartCoroutine(CenterToOutside());
}
}
IEnumerator OutsideToCenter()
{
int 左边 = 0;
int 右边 =灯光.Length - 1;
while (左边 <= 右边)
{
yield return StartCoroutine(AnimateLight(左边));
if (左边 != 右边)
{
yield return StartCoroutine(AnimateLight(右边));
}
左边++;
右边--;
}
}
IEnumerator CenterToOutside()
{
int 中心 =灯光.Length / 2;
for (int i = 0; i <= 中心; i++)
{
int 左边 = 中心 - i;
int 右边 = 中心 + i;
if (左边 >= 0)
{
yield return StartCoroutine(AnimateLight(左边));
}
if (右边 < 灯光.Length && 右边 != 左边)
{
yield return StartCoroutine(AnimateLight(右边));
}
}
}
IEnumerator AnimateLight(int 索引)
{
targetColors[索引] = GetRandomColor();
float t = 0F;
while (t < 1F)
{
t += Time.deltaTime * fadeSpeed;
float 强度 = Mathf.Lerp(0F, maxIntensity, t);
Apply(索引, 强度);
yield return null;
}
t = 0F;
while (t < 1F)
{
t += Time.deltaTime * fadeSpeed;
float 强度 = Mathf.Lerp(maxIntensity, 0F, t);
Apply(索引, 强度);
yield return null;
}
yield return new WaitForSeconds(beatInterval * 0.5F);
}
Color GetRandomColor()
{
float h = Random.value;
float s = Random.Range(0.6F, 1F);
float v = Random.Range(minBrightness, 1F);
return Color.HSVToRGB(h, s, v);
}
void Apply(int 索引, float 强度)
{
Color 最终 = currentColors[索引] * 强度;
lights[索引].GetPropertyBlock(mpb);
mpb.SetColor("_LightColor", 最终);
lights[索引].SetPropertyBlock(mpb);
}
}
上述脚本的核心功能是根据 Audio Souce 输出的音频信号调整几组 LED 灯的颜色和亮度,实现一系列的动态效果,其中包括了外向中间和中间向外的波动效果。
评论 (0)