2016-09-23 3 views
3

Я сделал демонстрационное приложение с двумя простыми представлениями в единстве3d для платформы Windows Phone. На первом представлении у меня есть кнопка и текст, от инспектора я назначаю кнопку один из событий (по щелчку), чтобы открыть второй вид. В этом представлении у меня есть необработанное изображение на панели, используемой для назначения mainTexture для webCamTexture для запуска камеры на телефоне.Как уменьшить память, используемую WebCameraTexture, в единстве на телефоне Windows?

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

Во втором View У меня есть кнопка, где я закрыть камеру и показать первый взгляд (закрытие ток) webCameraTexture.Stop();

Если я что много раз Play() и память Stop() на мой телефон выглядит :

enter image description here

Как я могу очистить память, когда я останавливаю камеру, потому что иногда дает мне сообщение об ошибке «Не хранилище для чего прийти завершить эту операцию» и выйти из приложения.

Код Start Stop Камера:

//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

«Ресурсы.UnloadUnusedAssets()» полезно для вашей проблемы.

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

В настоящее время вы играете в видео с:

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

, когда я запускаю свое приложение в консоли, появляется эта ошибка: NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта. В инспекторе RawImage прилагается к скрипту. –

+0

Этот код, который я написал, работает на моей стороне. Дважды щелкните сообщение об ошибке из редактора, и он покажет вам, какая строка кода вызывает его. Отправьте эту строку кода. Пожалуйста, убедитесь, что вы скопировали это как есть. Убедитесь, что 'intCam()' вызывается перед чем-либо в функции 'Start()'. Дай мне знать. – Programmer

+0

NullReferenceException: Ссылка на объект не установлена ​​в экземпляр объекта BController.StartMyCamera() (в Assets/BController.cs: 41) В строке 41 в файле: webCamTexture.Play(); –