Список Текстур2D

#c# #unity3d

#c# #unity3d

Вопрос:

Я создаю простую игру, в которой нужно делать снимок с веб-камеры каждый раз, когда пользователь нажимает на какой-либо объект. Чтобы избежать проблем с задержкой из-за задачи преобразования Texture2D в PNG и записи изображения на диск, я пытаюсь сохранить один список Texture2D из снимков, а после окончания игры записать все на диск.

Проблема в том, что когда я снимаю Texture2D texture текстуру с веб-камеры и пытаюсь выполнить a List.Add(texture) , все элементы списка обновляются, потому что в нем хранится ссылка texture , а не сама текстура. Может кто-нибудь, пожалуйста, предложить мне одну альтернативу для хранения всех текстур?

Редактировать: вставка кода.

 public class GetPhoto : MonoBehaviour
{
WebCamTexture webcam;
Texture2D photo;
List<Texture2D> photos;

IEnumerator TakePhoto()
{
    //run when user click on object.
    yield return new WaitForEndOfFrame();
    photo.SetPixels(webcam.GetPixels());
    photo.Apply();
    photos.Add(photo);
}
 

}

Комментарии:

1. Как насчет использования нового экземпляра Texture2D для каждого захвата? Однако трудно сказать, не видя вашего кода

2. @derHugo только что добавил код к вопросу!

3. Дело не в ссылках. С помощью SetPixels() вы просто перезаписываете ту текстуру, которая у вас есть.

Ответ №1:

Как уже было сказано, скорее используйте новый Texture2D экземпляр для каждого нажатия, например,

 IEnumerator TakePhoto()
{
    //run when user click on object.
    yield return new WaitForEndOfFrame();
    var photo = new Texture2D(yourTextureWidth, yourTextureHeight);
    photo.SetPixels(webcam.GetPixels());
    photo.Apply();
    photos.Add(photo);
}
 

в противном случае каждая запись в вашем списке ссылается на один и тот же Texture2D экземпляр => каждый раз, когда вы перезаписываете содержимое этого экземпляра.