Unity VideoPlayer: отсутствует метод перемотки - PullRequest
0 голосов
/ 17 января 2019

Идея состоит в том, чтобы взять 360-градусное видео и отобразить его на скайбокс, используя «Образец видео Unity Interactive 360» из сцены хранилища ресурсов. Камера прошла через торговый центр во время записи.

Мы хотим, чтобы зритель видео мог «идти вперед», «идти назад», «стоять на месте» в торговом центре в VR в Unity во время выполнения.

Для этого мы хотим использовать джойстик oculus, чтобы перемещать плеер по видео. То есть, прокручивая текущее время видеоклипа вперед и назад во время выполнения, используя значение от Input.GetAxis("Vertical").

Работает: движение вперед работает как шарм.
Не работает: перемещение назад не работает, поскольку скорость воспроизведения не может быть отрицательной.

Это текущий скрипт:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;

public class OculusInput_VideoControl : MonoBehaviour {

    VideoPlayer videoPlayer = null;

    // Use this for initialization
    void Start () {
        videoPlayer = (VideoPlayer)FindObjectOfType(typeof(VideoPlayer));

    }

    // Update is called once per frame
    void Update () {

        float joystickPosition_from_minusone_to_one = Input.GetAxis("Vertical");

        videoPlayer.playbackSpeed = joystickPosition_from_minusone_to_one;

        OVRDebugConsole.print(videoPlayer.playbackSpeed + " ### " + joystickPosition_from_minusone_to_one );

    }
}

Это спецификации системы:

System specs

Как мы встраиваемся, идя назад?

if (joystickPosition_from_minusone_to_one < 0) videoPlayer.time -= (int) Mathf.Abs(joystickPosition_from_minusone_to_one);

отстает!

if (joystickPosition_from_minusone_to_one < 0) videoPlayer.frame -= (int) Mathf.Abs(joystickPosition_from_minusone_to_one * 10);

тоже отстает!

1 Ответ

0 голосов
/ 17 января 2019

Отрицательная скорость воспроизведения зависит от платформы.

Если он отстает, то это может быть из-за вашей платформы.

Вы можете и должны, однако, умножить значение, которое хотите вычесть, на Time.deltaTime. Это, вероятно, улучшит вашу проблему с задержкой, но может не решить ее полностью.

Кроме того, зачем приводить Mathf.Abs к int? Есть ли для этого особая причина?

Приведение к int округляет ваш float, что может быть нежелательным поведением.

Попробуйте следующий код

if (joystickPosition_from_minusone_to_one < 0) 
{
    videoPlayer.time -= Mathf.Abs(joystickPosition_from_minusone_to_one) * Time.deltaTime;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...