У меня есть такой скрипт:
Синтаксис:
Используется csharp
public float movementSpeed = 5f, waitTime = 10.0f;
[SerializeField]
private float currScroll, pastScroll;// Эти две переменные будут проверять,
//увеличилось ли значение у scrollbar. currScroll - нынешнее значение, pastScroll - предыдущее значение
[SerializeField]
private float timeOfVoice, oneSecondOfVoice;
public bool waited = false, coroutine_running = false;
public Scrollbar SB;
public AudioSource VoiceSource;
// Start is called before the first frame update
void Start()
{
timeOfVoice = VoiceSource.clip.length;
oneSecondOfVoice = 1 / timeOfVoice;
StartCoroutine(moveToBottom());
}
// Update is called once per frame
void Update()
{
if (SB.value > 0 && coroutine_running == false)
{
StartCoroutine(moveToBottom());
}
}
private void FixedUpdate()
{
currScroll = SB.value;
if (currScroll > pastScroll)
{
VoiceSource.time -= 5f;
}
if (currScroll < pastScroll)
{
VoiceSource.time += 5f;
}
pastScroll = currScroll;
}
IEnumerator moveToBottom()
{
coroutine_running = true;
if (waited == false)
{
yield return new WaitForSeconds(waitTime);
waited = true;
}
while (SB.value > 0)
{
yield return new WaitForFixedUpdate();
SB.value -= movementSpeed * Time.fixedDeltaTime;
}
coroutine_running = false;
}
[SerializeField]
private float currScroll, pastScroll;// Эти две переменные будут проверять,
//увеличилось ли значение у scrollbar. currScroll - нынешнее значение, pastScroll - предыдущее значение
[SerializeField]
private float timeOfVoice, oneSecondOfVoice;
public bool waited = false, coroutine_running = false;
public Scrollbar SB;
public AudioSource VoiceSource;
// Start is called before the first frame update
void Start()
{
timeOfVoice = VoiceSource.clip.length;
oneSecondOfVoice = 1 / timeOfVoice;
StartCoroutine(moveToBottom());
}
// Update is called once per frame
void Update()
{
if (SB.value > 0 && coroutine_running == false)
{
StartCoroutine(moveToBottom());
}
}
private void FixedUpdate()
{
currScroll = SB.value;
if (currScroll > pastScroll)
{
VoiceSource.time -= 5f;
}
if (currScroll < pastScroll)
{
VoiceSource.time += 5f;
}
pastScroll = currScroll;
}
IEnumerator moveToBottom()
{
coroutine_running = true;
if (waited == false)
{
yield return new WaitForSeconds(waitTime);
waited = true;
}
while (SB.value > 0)
{
yield return new WaitForFixedUpdate();
SB.value -= movementSpeed * Time.fixedDeltaTime;
}
coroutine_running = false;
}
Проблема в том, что он работает правильно, но не так, как мне нужно. Первое условие в FixedUpdate выполняется правильно, то есть при свайпе вниз голос на несколько секунд, скажем так, возвращается назад, но вот второе тупо отправляет воспроизведение в самый конец. Контент у меня постепенно опускается вниз, а мне нужно, чтобы при свайпе и при этом постепенном движении я мог сделать свайп вверх и перемотать голос чуть вперёд. Как это можно сделать?