Поскольку MovieTexture устарел после Unity 5.6.0b1, я использую VideoPlayer Api для воспроизведения видео по RawImage для Android, используя ссылку здесь. Я пытаюсь добавить переключатель, чтобы переключиться с начального размера видео, воспроизводимого над текстурой RawImage, на полный экран и вернуться к оригиналу после остановки видео.
У меня есть отлично воспроизводимое видео, и до сих пор я могу изменить преобразование видео, чтобы растянуть его на весь экран с помощью этого кода.
void Update () {
if (Input.GetButtonDown("Jump"))
{
image.rectTransform.offsetMax = Vector2.Lerp(Vector2.up, Vector2.down, 100);
image.rectTransform.offsetMin = Vector2.Lerp(Vector2.left, Vector2.right, 100);
image.rectTransform.rotation = Quaternion.AngleAxis(Mathf.Lerp(0f, 90f, 50), Vector3.forward);
}
}
Первые две строки внутри блока if
способны к полноэкранному режиму RawImage, на котором воспроизводится видео эффект, показанный в разделе 2 изображения. Здесь docs для Vector2.
Для третьей строки кода вращения я взял ссылку на эту дискуссию на форуме Unity, но все же я не получаю эффекта, поскольку я хотел привести к разделу 3. Я хотел повернуть содержимое RawImage, но я вращаю сам RawImage, возможно, потому, что ссылка не описывает поворот содержимого.
Может ли кто-нибудь помочь мне узнать, как я могу его решить. Если это помогает версии Unity, которую я использую, это Unity 5.6.0b11 Beta, и загрузите образец проекта, если вы хотите протестировать его на своем устройстве. Unity Video Player.zip 18.33MB Вы также можете следить за этим видеоуроком по новым VideoPlayer из YouTube.
Обновление 1
Пока что единственное, что я получил, я пробовал только с кодом вращения и удалив первые две строки внутри блока if
, я смог повернуть видео, но когда я пытаюсь растянуть RawImage, это растягивается за пределы экрана. Смотрите здесь изображение
Обновление 2
После многих исследований, хитов и испытаний. Я, наконец, сделал полноэкранный режим и поворот RawImage, чтобы воспроизводить полноэкранные видео на Unity с помощью этого кода.
image.rectTransform.offsetMin = new Vector2(-560, 560);
image.rectTransform.offsetMax = new Vector2(560, -560);
Но, как вы видите, значения, которые я предоставляю для вектора, являются статическими числами и не гарантируют работу с несколькими размерами экрана. Ну, вращение RawImage сбивало с толку, когда ось вращается вместе с RawImage, но некоторые компоненты не изменялись и не менялись, а при изменении значений смещения RawImage менял его значение в отношении более старого Rect (я действительно не знаю, что происходит здесь).
Вращающийся RawImage вращает ось, прикрепленную к ней. На изображении выше вы можете увидеть, что RawImage повернут и, в свою очередь, вращает ось. Но даже когда изображение поворачивается, вы можете увидеть там какую-то опорную линию.
Как я попытался исправить проблему? [Ошибка]
Я попытался решить проблему по-новому, я создал новый RawImage, который подходит к холсту и уже повернут и прикреплен к script StreamVideo.cs
как предыдущий RawImage. Первоначально он находится в неактивном режиме и переключается на активный, когда пользователь вводит команду в полноэкранный режим. Когда он переходит в полноэкранный режим, видео воспроизводится в новом RawImage.
public void playFullScreen() {
isFullScreen = true;
imageFullScreen.gameObject.SetActive(true);
imageFullScreen.texture = videoPlayer.texture;
image.gameObject.SetActive(false);
}
Но, с этим у меня возникла проблема с запуском видео из того же фрейма на новом RawImage, когда он переключен на полный экран, и с той же проблемой при переключении на маленький экран.
Резюме:
Глядя на обновление 2, я могу играть, пауза, полный экран и поворачивать видео, но с помощью простых числовых значений на offsetMax
и offsetMin
. Я пытаюсь узнать, есть ли способ оценить это значение с помощью script, чтобы соответствовать нескольким размерам экрана. Я знаю, что это может показаться простым, но сложная часть - для экрана моей потребности, ссылка на предоставленное мной значение работает так. Обратите внимание на пунктирный прямоугольник на картинке.