У меня проблемы с VideoPlayer
нацеливанием на RenderTexture
и отображением на плоскости, и я запутался.В случае, если это имеет значение, я использую Unity 2018.2.11f1 и Vuforia, чтобы разместить видеоэкран в AR (хотя, насколько мне известно, это не должно иметь значения, поскольку я просто пытаюсь воспроизвести видео в трехмерном мире, независимо от того,AR / VR).Я начал с учебника YouTube Unity по этой теме , но перешел к выполнению этого в сценарии для своих целей.
В документации Unity для VideoPlayer
класса это говорит о свойстве Aspect Ratio
:
Соотношение сторон изображений, которые заполняют Camera Near Plane , Camera Far Plane или Render Texture , когда используется соответствующий Режим Render .
И для Stretch
значения этого свойства:
Масштабируйте как горизонтально, так и вертикально, чтобы соответствовать целевому прямоугольнику.Соотношение сторон источника не сохраняется.
Насколько я понимаю, эти настройки в VideoPlayer
:
![Screen capture of VideoPlayer settings](https://i.stack.imgur.com/b26zS.png)
приведет к растяжению RenderTexture
, чтобы заполнить размер плоскости, на которой он рендерится ... но вместо этого я получаю это (игнорируйте размытые цвета, это освещение, которое я не исправил):
![Screen capture of plane displaying video](https://i.stack.imgur.com/Qjy0K.png)
, который, очевидно, является результатом того, что свойство Wrap Mode
является "Зажим" для RenderTexture
.Я настраиваю вещи с помощью кода, например:
var Screen = this.gameObject.AddComponent<Renderer>();
var VideoRenderer = Screen.gameObject.AddComponent<Renderer>();
var VideoTexture = new RenderTexture((int)Clip.width, (int)Clip.height, 0);
VideoTexture.useDynamicScale = true;
VideoTexture.wrapMode = TextureWrapMode.Clamp;
Screen.renderMode = VideoRenderMode.RenderTexture;
Screen.aspectRatio = VideoAspectRatio.Stretch;
Screen.targetTexture = VideoTexture;
VideoRenderer.material.SetTexture("_MainTex", VideoTexture);
VideoRenderer.material.SetTexture("_EmissionMap", VideoTexture);
, где Clip
- это предоставленный VideoClip
.Мне известно, что я устанавливаю для него значение «Зажим», но другие параметры делают именно то, что говорят, и игнорируют значение «Растянуть» VideoPlayer
.Следует отметить, что плоскость, на которой я пытаюсь отобразить видео, имеет ~ 2x ширину / высоту видео (как показано на скриншоте). **
Я полагаю, что у меня естьсвязь между VideoPlayer.aspectRatio
и RenderTexture.wrapMode
в обратном направлении, и что если размер RenderTexture
больше размеров VideoClip
, он растянет видео до размера RenderTexture
... но как я могу установить ширину/ высота от RenderTexture
до размера пикселя плоскости?(Screen.transform.localScale.[x/z]
не пиксели ... так как я могу получить это значение?)
РЕДАКТИРОВАТЬ: Используя это VideoClip
, что я знаю размеры и жесткое кодирование RenderTexture
в моем фрагменте кода выше до 2 * Вт / ч, я все еще получаю то же поведение "Зажим" ... так что я не знаю, что мне не хватает.
** У меня естьпопытался установить VideoPlayer
на «Переопределение материала», и он работает должным образом, но для этого требуется освещение (следовательно, упомянуто выше), и я хочу сделать это «правильно» с Albedo / Emission, чтобы освещение не было реализованоза каждое видео, которое я делаю.
Любая помощь будет принята с благодарностью, я немного постучался!(Я пытался найти ответы, но нашел только неотвеченные вопросы, такие как this ).