58 lines
1.5 KiB
C#
58 lines
1.5 KiB
C#
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
|
|
public class OscilloscopeController : MonoBehaviour
|
|
{
|
|
public List<Transform> targetPoints;
|
|
public float maxDistance = 5f;
|
|
|
|
public WaveformVisualizer waveformVisualizer;
|
|
|
|
private Transform closestTarget;
|
|
private float clarity;
|
|
|
|
void Update()
|
|
{
|
|
DetectClosestTarget();
|
|
|
|
waveformVisualizer.clarity = clarity;
|
|
|
|
if (clarity > 0 && closestTarget != null)
|
|
{
|
|
var targetData = closestTarget.GetComponent<TargetPointData>();
|
|
if (targetData != null)
|
|
{
|
|
// 设置波形类型
|
|
waveformVisualizer.waveformType = targetData.waveformType;
|
|
|
|
if (Input.GetKeyDown(KeyCode.Space)) // Example input for triggering shock
|
|
{
|
|
waveformVisualizer.TriggerShock(targetData.isCorrect);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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(1 - (minDistance / maxDistance));
|
|
}
|
|
}
|
|
}
|