中间版本

This commit is contained in:
2024-10-14 13:30:01 +08:00
parent c23683cc6f
commit 2aa29dfc5c
8 changed files with 285 additions and 156 deletions
@@ -4,51 +4,49 @@ using RainbowArt.CleanFlatUI;
public class OscilloscopeController : MonoBehaviour
{
public List<Transform> targetPoints; // 目标点列表
public float maxDistance = 1f; // 最大检测距离
public WaveformVisualizer waveformVisualizer;
public ErrorWaveformVisualizer errorWaveformVisualizer;
public SliderCircular phaseSlider;
//public WaveformVisualizer errorWaveformVisualizer; // 错误波形
private float phaseShiftMax = Mathf.PI * 2f;
private Plug plug;
public SliderCircular phaseSlider; // 控制相位偏移的旋钮
private float phaseShiftMax = Mathf.PI * 3f; // 最大相位偏移量
private Transform closestTarget; // 最近的目标点
private float clarity; // 清晰度(根据距离计算)
private bool isCaptured = false; // 是否已拍照(冻结波形)
void Start()
{
plug = FindObjectOfType<Plug>();
errorWaveformVisualizer.SetWaveformVisualizer(waveformVisualizer);
}
void Update()
{
if (!isCaptured)
if (plug != null)
{
DetectClosestTarget();
var currentSocket = plug.currentSocket;
if (closestTarget != null)
if (currentSocket != null && currentSocket.targetData != null)
{
var targetData = closestTarget.GetComponent<TargetPointData>();
var targetData = currentSocket.targetData;
if (targetData != null)
{
waveformVisualizer.clarity = clarity;
waveformVisualizer.waveformType = targetData.waveformType;
// 处理相位偏移
waveformVisualizer.clarity = 1;
float phaseShift = 0f;
if (phaseSlider != null)
{
float sliderPhase = (phaseSlider.Value / 10f) * phaseShiftMax;
phaseShift = sliderPhase + targetData.initialRandomPhase; // 加上随机初始相位
phaseShift = sliderPhase + targetData.initialRandomPhase;
}
waveformVisualizer.SetPhaseShift(phaseShift);
waveformVisualizer.gameObject.SetActive(true);
if (phaseShift > 1)
if (targetData.isCorrect)
{
waveformVisualizer.SetPhaseShift(phaseShift);
errorWaveformVisualizer.gameObject.SetActive(false);
}
else
{
waveformVisualizer.SetPhaseShift(0);
errorWaveformVisualizer.SetWaveformVisualizer(waveformVisualizer);
errorWaveformVisualizer.gameObject.SetActive(true);
}
}
}
@@ -58,31 +56,13 @@ public class OscilloscopeController : MonoBehaviour
}
}
}
void ResetVisualizer()
{
waveformVisualizer.clarity = 0f;
waveformVisualizer.waveformType = WaveformType.Noise;
waveformVisualizer.clarity = 0;
waveformVisualizer.ResetWaveform();
waveformVisualizer.gameObject.SetActive(true);
errorWaveformVisualizer.gameObject.SetActive(false);
}
void DetectClosestTarget()
{
float minDistance = float.MaxValue;
closestTarget = null;
clarity = 0f;
foreach (var target in targetPoints)
{
float distance = Vector2.Distance(transform.position, target.position);
if (distance <= maxDistance && distance < minDistance)
{
minDistance = distance;
closestTarget = target;
}
}
if (closestTarget != null)
{
clarity = Mathf.Clamp01(1f - (minDistance / maxDistance));
}
}
}
}