【问题标题】:Loading Movies from Disk in Unity 5在 Unity 5 中从磁盘加载电影
【发布时间】:2015-05-07 23:03:34
【问题描述】:

我正在使用 Unity 5 和 C#,我想在运行时从磁盘上的任何位置加载电影,而不是从 Resources 文件夹。

这可以通过使用 Texture2D 类型中的 .LoadImage (bytes) 方法来处理常规图像纹理,但似乎没有与 MovieTexture 等效的方法。

代码显示了如何从资源文件夹执行此操作,但我如何修改它以从磁盘加载?

谢谢

public void loadVideo (GameObject container, string video)
{
    // Load MovieTexture from Resources Folder
    MovieTexture mat = (MovieTexture)Resources.Load(Path.GetFileNameWithoutExtension(video), typeof(MovieTexture));

    MeshRenderer ren = container.GetComponent<MeshRenderer>();
    ren.material.mainTexture = mat;    
    mat.Play();      
}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    你可以。使用 WWW 类来做到这一点。

    IEnumerator loadAndPlay(){
    WWW diskMovieDir = new WWW("file:///C:/yourvideoDir/video.mp4");
    
    //Wait for file finish loading
    while(!diskMovieDir.isDone){
    yield return null;
    }
    
    //Save the loaded movie from WWW to movetexture
    MovieTexture movieToPlay = diskMovieDir.movie;
    
    //Hook the movie texture to the current renderer
    MeshRenderer ren = container.GetComponent<MeshRenderer>();
    ren.material.mainTexture = movieToPlay ;    
    
    movieToPlay.play();
    }
    

    现在你可以通过启动协程来调用它了。

    StartCoroutine(loadAndPlay());
    

    我没有编译这个,所以可能会出现编译错误,但如果有编译错误,您可以轻松修复它。如果它编译,这也应该没有问题。请注意,url 必须以 file:/// 开头。如果这不起作用,请尝试 file://

    【讨论】:

    • 谢谢,我试试看
    • 效果很好,我很高兴我发布了我不认为我会想出那个解决方案。这也适用于实时视频流
    • 不确定视频流。我从某人那里听说它仅适用于 .ogg 扩展名。所以,也许将视频文件转换为 ogg,这可能会奏效。我假设您使用的是 Unity 而不是 pro,因此您的问题的解决方案是学习 C++,然后编写一个将视频解码为帧的插件。通过网络发送这些帧(视频)。您需要了解 C++ 网络套接字(TCP/UDP)。您也可以使用 C# 执行此操作,但您需要 Unity Pro 版本才能使用 C# Socket,例如 TCPListener。您自己的 C++ 插件不需要专业人士。
    • 不,Android/iOS 不支持 MovieTexture
    猜你喜欢
    • 2020-10-15
    • 2018-11-13
    • 2017-07-28
    • 1970-01-01
    • 2010-11-02
    • 2015-05-29
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多