2016-09-23 43 views
3

我使用unity3d中的兩個簡單視圖爲windows phone平臺製作了一個演示應用程序。在第一個視圖中,我有一個按鈕和一個文本,從我分配給按鈕一個事件的檢查器(點擊)打開第二個視圖。在這個視圖中,我有一個用於將mainTexture分配給webCamTexture的面板中的原始圖像,用於在手機上啓動相機。如何在Windows Phone上統一使用WebCameraTexture的內存?

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

在第二視圖我有一個按鈕,我關閉相機,並顯示第一視圖(關閉電流)webCameraTexture.Stop();

如果我這樣做,很多次播放()和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

+0

嘗試在停止紋理時運行垃圾回收器。 –

+0

我嘗試使用垃圾回收器GC.Collect();但沒有釋放內存仍然長大 –

+0

因此,這不起作用。你應該繼續在Unity3d論壇上關注你的主題,並可能將它報告爲一個錯誤。 –

回答

1

「Resources.UnloadUnusedAssets()」對您的問題有幫助。

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

目前您播放的視頻有:

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

當我在控制檯中運行我的應用程序出現此錯誤:NullReferenceException:對象引用未設置爲對象的實例。在檢查員RawImage被附加到腳本。 –

+0

我發佈的這段代碼是在我身邊。雙擊編輯器中的錯誤消息,它會顯示出哪行代碼導致它。發佈該代碼行。請確保您照原樣複製。確保在'Start()'函數之前調用了'intCam()'。讓我知道。 – Programmer

+0

NullReferenceException:未將對象引用設置爲對象的實例 BController.StartMyCamera()(位於Assets/BController。cs:41) 在文件的第41行:webCamTexture.Play(); –

相關問題