first commit
This commit is contained in:
55
Assets/Scripts/KnobController.cs
Normal file
55
Assets/Scripts/KnobController.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class KnobController : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private MassController _massController;
|
||||
[SerializeField] private float _rotationDuration = 0.3f;
|
||||
[SerializeField] private Vector3[] _positions;
|
||||
|
||||
private int _currentIndex = 0;
|
||||
private bool _isRotating = false;
|
||||
|
||||
private void OnMouseDown()
|
||||
{
|
||||
if (_isRotating) return;
|
||||
|
||||
RotateToNextPosition();
|
||||
|
||||
if (_massController != null)
|
||||
_massController.SwitchUnit();
|
||||
}
|
||||
|
||||
private void RotateToNextPosition()
|
||||
{
|
||||
_currentIndex++;
|
||||
|
||||
if (_currentIndex >= _positions.Length)
|
||||
_currentIndex = 0;
|
||||
|
||||
StartCoroutine(RotateTo(_positions[_currentIndex]));
|
||||
}
|
||||
|
||||
private IEnumerator RotateTo(Vector3 targetEuler)
|
||||
{
|
||||
_isRotating = true;
|
||||
|
||||
Quaternion start = transform.rotation;
|
||||
Quaternion end = Quaternion.Euler(targetEuler);
|
||||
|
||||
float time = 0f;
|
||||
|
||||
while (time < _rotationDuration)
|
||||
{
|
||||
time += Time.deltaTime;
|
||||
float t = time / _rotationDuration;
|
||||
|
||||
transform.rotation = Quaternion.Slerp(start, end, t);
|
||||
yield return null;
|
||||
}
|
||||
|
||||
transform.rotation = end;
|
||||
_isRotating = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user