using UnityEngine; using UnityEngine.UI; public class FrequencyController : MonoBehaviour { public Slider frequencySlider; // 频率调节滑动条 public Slider claritySlider; // 频率调节滑动条 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("目标频率已找到!"); // 你可以在这里添加找到目标后的逻辑,例如播放音效、触发动画等 } }