#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
экземпляр => каждый раз, когда вы перезаписываете содержимое этого экземпляра.