如何在 windows phone 上统一减少 WebCameraTexture 使用的内存?
How can I reduce memory used by WebCameraTexture in unity on windows phone?
我在 unity3d 中制作了一个带有两个简单视图的演示应用程序 windows phone platform.On 第一个视图我有一个按钮和一个文本,来自检查器我分配给按钮一个事件(点击)打开第二个视图。在这个视图中,我在面板中有一个原始图像,用于将 mainTexture 分配给 webCamTexture,以便在 phone.
上启动相机
var webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
webCamTexture.Play();
在第二个视图中,我有一个按钮,我可以在其中关闭相机并显示第一个视图(关闭当前视图)webCameraTexture.Stop();
如果我多次这样做,phone 上的 Play() 和 Stop() 内存看起来像:
当我停止相机时,如何清除内存,因为有时会给我一个错误 "Not enought storage to complete this operation" 并退出应用程序。
代码开始停止相机:
//call onClick Button (next)
public void StartMyCamera()
{
webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
webCamTexture.Play();
}
//call onClick btn (back - close camera)
public void StopMyCamera()
{
//to stop camera need only this line
webCamTexture.Stop();
//----try to clear
/*GL.Clear(false, true, Color.clear);
GC.Collect();
GC.WaitForPendingFinalizers();
rawImage.StopAllCoroutines();*/
//----
}
目前您正在播放视频:
var webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
webCamTexture.Play();
并用
停止
webCameraTexture.Stop();
这正是您的代码告诉它做的事情。 new WebCamTexture()
行代码预计在每次调用时分配内存。您应该在 Start()
函数中 只执行一次 然后您可以 play
和 stop
相机而不分配内存。
public RawImage rawImage;
WebCamTexture webCamTexture;
void Start()
{
intCam(); //Do this once. Only once
}
void intCam()
{
webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
}
public void StartMyCamera()
{
webCamTexture.Play();
}
public void StopMyCamera()
{
//to stop camera need only this line
webCamTexture.Stop();
}
"Resources.UnloadUnusedAssets()" 对您的问题有帮助。
public void StopMyCamera()
{
webCamTexture.Stop();
Resources.UnloadUnusedAssets();
}
我在 unity3d 中制作了一个带有两个简单视图的演示应用程序 windows phone platform.On 第一个视图我有一个按钮和一个文本,来自检查器我分配给按钮一个事件(点击)打开第二个视图。在这个视图中,我在面板中有一个原始图像,用于将 mainTexture 分配给 webCamTexture,以便在 phone.
上启动相机var webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
webCamTexture.Play();
在第二个视图中,我有一个按钮,我可以在其中关闭相机并显示第一个视图(关闭当前视图)webCameraTexture.Stop();
如果我多次这样做,phone 上的 Play() 和 Stop() 内存看起来像:
当我停止相机时,如何清除内存,因为有时会给我一个错误 "Not enought storage to complete this operation" 并退出应用程序。
代码开始停止相机:
//call onClick Button (next)
public void StartMyCamera()
{
webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
webCamTexture.Play();
}
//call onClick btn (back - close camera)
public void StopMyCamera()
{
//to stop camera need only this line
webCamTexture.Stop();
//----try to clear
/*GL.Clear(false, true, Color.clear);
GC.Collect();
GC.WaitForPendingFinalizers();
rawImage.StopAllCoroutines();*/
//----
}
目前您正在播放视频:
var webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
webCamTexture.Play();
并用
停止webCameraTexture.Stop();
这正是您的代码告诉它做的事情。 new WebCamTexture()
行代码预计在每次调用时分配内存。您应该在 Start()
函数中 只执行一次 然后您可以 play
和 stop
相机而不分配内存。
public RawImage rawImage;
WebCamTexture webCamTexture;
void Start()
{
intCam(); //Do this once. Only once
}
void intCam()
{
webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
}
public void StartMyCamera()
{
webCamTexture.Play();
}
public void StopMyCamera()
{
//to stop camera need only this line
webCamTexture.Stop();
}
"Resources.UnloadUnusedAssets()" 对您的问题有帮助。
public void StopMyCamera()
{
webCamTexture.Stop();
Resources.UnloadUnusedAssets();
}