首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一-如何旋转和全屏视频,使用VideoPlayer API在RawImage上播放

统一-如何旋转和全屏视频,使用VideoPlayer API在RawImage上播放
EN

Stack Overflow用户
提问于 2017-03-20 06:59:39
回答 1查看 6.7K关注 0票数 10

由于MovieTexture在Unity5.6.0b1之后遭到了反对,我使用VideoPlayer Api在RawImage上播放RawImage上的视频,参考这里。我试图添加一个切换从最初大小的视频播放的RawImage纹理到全屏和回到原来的视频停止后。

我有一个完美的播放视频,到目前为止,我能够改变视频的转换,以延伸到全屏幕使用这段代码。

代码语言:javascript
复制
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节所示。这是Vector2的文档。

对于第三行旋转代码,我引用了关于团结论坛的讨论,但仍然没有达到我想要的效果,结果导致了第3节。我想旋转RawImage的内容,但我正在旋转RawImage本身,这可能是因为引用没有描述要旋转内容。

有人能帮我找出我怎么解决这个问题吗。如果它帮助我使用的统一版本是团结5.6.0b11Beta,如果你想要在你的设备上测试的话,下载这个样例项目。统一视频Player.zip 18.33MB,您也可以跟踪这个关于来自VideoPlayer的新YouTube的视频教程

更新1

到目前为止,我唯一得到的是,我只试着使用旋转代码,通过删除if块中的前两行,我能够旋转视频,但是当我试图拉伸RawImage时,它就出现在屏幕外面。如图所示

更新2

经过大量的研究,打击和试验。最后,我完成了RawImage的全屏和旋转,用这段代码在Unity上播放全屏视频。

代码语言:javascript
复制
image.rectTransform.offsetMin = new Vector2(-560, 560);            
image.rectTransform.offsetMax = new Vector2(560, -560);

但是,正如您所看到的,我提供给向量的值是静态数字,不能保证在多个屏幕大小上工作。好的,旋转RawImage是混乱的,因为轴与RawImage一起旋转,但是一些组件没有改变或旋转,当改变偏移值时,RawImage参照旧的Rect改变了它的值(我真的不知道这里发生了什么)。

旋转的RawImage旋转与其相连的轴。在上面的图像中,您可以看到RawImage是旋转的,而这反过来又旋转了Axis。但是即使当图像被旋转,你也可以看到一些参考线。

我是如何解决这个问题的?失败了

我试图以新的方式解决这个问题,我创建了一个适合画布的新RawImage,并且已经像以前的RawImage那样旋转并附加到脚本StreamVideo.cs上。最初,它处于非活动模式,当用户命令转到全屏时,它被切换到活动状态。当它进入全屏时,视频将在新的RawImage中播放。

代码语言:javascript
复制
public void playFullScreen() {
    isFullScreen = true;
    imageFullScreen.gameObject.SetActive(true);
    imageFullScreen.texture = videoPlayer.texture;
    image.gameObject.SetActive(false);
}

但是,在新的RawImage上切换到全屏时,从同一帧启动视频有问题,切换回小屏幕时也有同样的问题。

摘要

看看update 2,我可以播放、暂停、全屏和旋转视频,但是在offsetMaxoffsetMin上有简单的数字值。我正在努力学习是否有一种方法通过脚本来管理这些值,以适应多屏幕大小的。我知道这听起来可能很简单,但是对于我需要的屏幕来说,我所提供的价值的参考是这样的。注意图片中的虚线矩形。

EN

回答 1

Stack Overflow用户

发布于 2020-05-11 23:19:00

我用这段代码在Z上实现了RectTransform上90度的旋转。

代码语言:javascript
复制
    private void FixContainerSizeInstantly()
    {
        container.sizeDelta = new Vector2(parent.rect.height, parent.rect.width);
    }

其中,container是旋转的RectTransform,而parent是带有锚的RectTransform,总是使其全屏化。

我将添加DOTween来动画它的比例,旋转和位置,但你需要的值是在我分享的方法。

下面是如何配置全屏画布,我使用了不同的画布来实现所有模块。

对于旋转部分,您可以从原始视频的位置和大小开始,到90度的变化和我共享的方法给出的大小之间,在屏幕的中心位置。

两者之间应该是大小的三角洲和锚应该是这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42897528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档