中间版本
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user