90 lines
2.5 KiB
C#
90 lines
2.5 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class FrequencyController : MonoBehaviour
|
|
{
|
|
public Slider frequencySlider; // 频率调节滑动条
|
|
public float targetFrequency = 50f; // 目标频率
|
|
public float lockThreshold = 0.5f; // 锁定阈值
|
|
public Renderer screenRenderer; // 显示Shader效果的Renderer
|
|
public Renderer screenNoise; // 显示噪波效果的Renderer
|
|
|
|
private Material material; // 目标材质
|
|
private Material noiseMaterial; // 噪波材质
|
|
|
|
void Start()
|
|
{
|
|
if (frequencySlider != null)
|
|
{
|
|
frequencySlider.onValueChanged.AddListener(OnFrequencyChanged);
|
|
}
|
|
if (screenRenderer != null)
|
|
{
|
|
material = screenRenderer.material;
|
|
}
|
|
if (screenNoise != null)
|
|
{
|
|
noiseMaterial = screenNoise.material;
|
|
}
|
|
}
|
|
|
|
void OnFrequencyChanged(float value)
|
|
{
|
|
float distance = Mathf.Abs(value - targetFrequency);
|
|
UpdateShaderParameters(distance);
|
|
CheckIfFound(distance);
|
|
}
|
|
|
|
void UpdateShaderParameters(float distance)
|
|
{
|
|
if (noiseMaterial != null)
|
|
{
|
|
if (distance > 5f)
|
|
{
|
|
noiseMaterial.SetFloat("_FullAlphaDissolveFade", 1f);
|
|
}
|
|
else if (distance <= 5f && distance > 4.5f)
|
|
{
|
|
float alpha = Mathf.InverseLerp(5f, 4.5f, distance);
|
|
noiseMaterial.SetFloat("_FullAlphaDissolveFade", alpha);
|
|
}
|
|
else
|
|
{
|
|
noiseMaterial.SetFloat("_FullAlphaDissolveFade", 0f);
|
|
}
|
|
}
|
|
|
|
if (material != null)
|
|
{
|
|
if (distance > 4.5f)
|
|
{
|
|
material.SetFloat("_FadingFade", 1f);
|
|
}
|
|
else if (distance <= 4.5f && distance >= 0.1f)
|
|
{
|
|
float fadingFade = Mathf.InverseLerp(4.5f, 0f, distance);
|
|
material.SetFloat("_FadingFade", fadingFade);
|
|
}
|
|
else
|
|
{
|
|
material.SetFloat("_FadingFade", 0f);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CheckIfFound(float distance)
|
|
{
|
|
if (distance < lockThreshold)
|
|
{
|
|
frequencySlider.interactable = false;
|
|
OnFrequencyFound();
|
|
}
|
|
}
|
|
|
|
void OnFrequencyFound()
|
|
{
|
|
Debug.Log("目标频率已找到!");
|
|
// 你可以在这里添加找到目标后的逻辑,例如播放音效、触发动画等
|
|
}
|
|
}
|