Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 为什么在unity中从服务器获取视频到原始图像组件不';不行?_Unity3d_Httpwebrequest_Video Player_Rawimage - Fatal编程技术网

Unity3d 为什么在unity中从服务器获取视频到原始图像组件不';不行?

Unity3d 为什么在unity中从服务器获取视频到原始图像组件不';不行?,unity3d,httpwebrequest,video-player,rawimage,Unity3d,Httpwebrequest,Video Player,Rawimage,我正试图从我的“Json”文件中获取一个视频,我将其上传到azure服务器上unity中的原始图像组件,但它看起来是这样的: 要获得图片,它可以正常工作,但对于视频mp4,它不能正常工作,代码如下: using UnityEngine ; using UnityEngine.Networking ; using UnityEngine.UI ; using System.Collections ; // Json data format /* { "Na

我正试图从我的“Json”文件中获取一个视频,我将其上传到azure服务器上unity中的原始图像组件,但它看起来是这样的:

要获得图片,它可以正常工作,但对于视频mp4,它不能正常工作,代码如下:

using UnityEngine ;
using UnityEngine.Networking ;
using UnityEngine.UI ;
using System.Collections ;

// Json data format
/*
      {
        "Name"     : "..." ,
        "VideoURL" : "..."
      }
*/
public struct Data {
   public string Name ;
   public string VideoURL ;
}

public class Demo : MonoBehaviour {
   [SerializeField] Text uiNameText ;
   [SerializeField] RawImage uiRawImage ;

   string jsonURL = "https://myserver..." ;

   void Start () {
      StartCoroutine (GetData (jsonURL)) ;
   }

   IEnumerator GetData (string url) {
      UnityWebRequest request = UnityWebRequest.Get (url) ;

      yield return request.SendWebRequest() ;

      if (request.isNetworkError || request.isHttpError) {
         // error ...

      } else {
         // success...
         Data data = JsonUtility.FromJson<Data> (request.downloadHandler.text) ;

         // print data in UI
         uiNameText.text = data.Name ;

         // Load video:
         StartCoroutine (GetVideo (data.VideoURL)) ;
      }
      
      // Clean up any resources it is using.
      request.Dispose () ;
   }

   IEnumerator GetVideo (string url) {
      UnityWebRequest request = UnityWebRequest.GetTexture (url) ;

      yield return request.SendWebRequest() ;

      if (request.isNetworkError || request.isHttpError) {
         // error ...

      } else {
         //success...
         uiRawImage.texture = ((DownloadHandlerTexture)request.downloadHandler).texture ;
      }

      // Clean up any resources it is using.
      request.Dispose () ;
   }

}
使用UnityEngine;
使用UnityEngine。联网;
使用UnityEngine.UI;
使用系统集合;
//Json数据格式
/*
{
“姓名”:“…”,
“视频URL”:“…”
}
*/
公共结构数据{
公共字符串名称;
公共字符串VideoURL;
}
公共课堂演示:单行为{
[SerializeField]文本为文本;
[SerializeField]RawImage uiRawImage;
字符串jsonURL=”https://myserver..." ;
无效开始(){
start例程(GetData(jsonURL));
}
IEnumerator获取数据(字符串url){
UnityWebRequest=UnityWebRequest.Get(url);
生成返回请求。SendWebRequest();
if(request.isNetworkError | | request.isHttpError){
//错误。。。
}否则{
//成功。。。
Data=JsonUtility.FromJson(request.downloadHandler.text);
//在UI中打印数据
uiNameText.text=data.Name;
//加载视频:
start例程(GetVideo(data.VideoURL));
}
//清理它正在使用的任何资源。
request.Dispose();
}
IEnumerator GetVideo(字符串url){
UnityWebRequest=UnityWebRequest.GetTexture(url);
生成返回请求。SendWebRequest();
if(request.isNetworkError | | request.isHttpError){
//错误。。。
}否则{
//成功。。。
uiRawImage.texture=((DownloadHandlerTexture)request.downloadHandler).texture;
}
//清理它正在使用的任何资源。
request.Dispose();
}
}

所以这段代码很好地将图像加载到我的unity中,但对于视频,它没有,我尝试获取unity支持的所有类型的视频,但都是一样的。所以对于原始图像组件,我添加了视频播放器组件,我添加了渲染纹理到它和图像原始,但也是一样的东西。我的unity版本是2019.4.26f1。这可能是因为统一的版本?我真的希望有人能帮我。

原因很简单:

  • 图像==纹理->是
  • 视频==纹理->
您不能直接将视频分配给用于视频的组件

首先,您也不能使用下载视频

顺便说一句,API来自Unity 5.6。。这是几年前的事了,我强烈建议您将项目移植到最新版本

如果您真的像您所说的那样使用Unity 2019.4,那么它将是
UnityWevRequestTexture.GetTexture


你基本上是在告诉自己你必须做什么:

  • 有组件
  • 将a指定给,以便视频播放器将视频渲染到该纹理中
  • 请参考中的
    RenderTexture
您可以在编辑模式下执行这些步骤。你也可以在启动时做一次,比如

[SerializeField]私人视频播放器\u视频播放器;
[SerializeField]私有RenderTexture\u RenderTexture;
[SerializeField]私有RawImage\u RawImage;
私人空间()
{
_rawImage.texture=\u renderTexture;
_videoPlayer.targetTexture=\u renderTexture;
}
然后在运行时

  • 将接收到的视频URL分配给
所以在运行时做些什么

//是的,如果您将Start-return设置为IEnumerator,那么Unity会自动将其作为协同程序运行
IEnumerator启动()
{
//使用“using”而不是手动调用“Dispose”
使用(var-request=UnityWebRequest.Get(jsonUrl))
{
生成返回请求。SendWebRequest();
if(request.isNetworkError | | request.isHttpError)
{
//错误。。。
} 
其他的
{
//成功。。。
Data=JsonUtility.FromJson(request.downloadHandler.text);
//在UI中打印数据
uiNameText.text=data.Name;
//视频播放器将自行负责加载视频剪辑!
videoPlayer.url=data.VideoURL;
视频播放器;
}
}
}

现在它可以工作,但只播放声音:(