如何在Windows Phone上统一减少WebCameraTexture使用的内存?

时间:2016-09-23 11:00:39

标签: c# unity3d camera windows-phone

我在Unity3d中为windows phone平台制作了一个带有两个简单视图的演示应用程序。在第一个视图中我有一个按钮和一个文本,从检查器我分配到按钮一个事件(在Click上)打开第二个视图。在这个视图中,我在一个面板中有一个原始图像,用于将mainTexture分配给webCamTexture,以便在手机上启动相机。

var webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
webCamTexture.Play();

在第二个视图中,我有一个按钮,我关闭相机并显示第一个视图(关闭当前)webCameraTexture.Stop();

如果我多次这样做,我手机上的Play()和Stop()内存如下:

enter image description here

当我停止相机时,如何清除内存,因为有时会给我一个错误“不需要存储来完成此操作”并退出应用程序。

代码开始停止相机:

    //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();*/
        //----
    }

Second test

Try to clean Cache

2 个答案:

答案 0 :(得分:2)

目前您使用以下内容播放视频:

var webCamTexture = new WebCamTexture();
rawImage.material.mainTexture = webCamTexture;
webCamTexture.Play();

并用

停止
webCameraTexture.Stop();

这正是您的代码告诉它要做的事情。 new WebCamTexture()代码行每次调用时都会分配内存。您可以在Start()函数中执行一次,然后您可以在没有内存分配的情况下playstop相机。

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();
}

答案 1 :(得分:1)

“Resources.UnloadUnusedAssets()”对您的问题很有帮助。

public void StopMyCamera()
{
webCamTexture.Stop();
Resources.UnloadUnusedAssets();
}