Могу ли я сделать снимок в Unity с помощью камеры устройства?
Я совершенно не знаком с более сложным набором функций Unity3D и мне любопытно, есть ли у него возможность сделать снимок, а затем манипулировать им. В частности, мое желание состоит в том, чтобы пользователь сделал селфи, а затем проследил за их лицом, чтобы создать PNG, который затем будет отображаться на модели.
Я знаю, что отображение лица на модель просто, но мне интересно, нужно ли мне писать функциональность фото / резьбы в охватывающее приложение Chrome, или если все это можно сделать изнутри единства. Мне не нужен учебник о том, как это сделать, просто спросите, возможно ли это.
6 ответов
Да, это возможно. Вы захотите посмотреть на WebCamTexture функциональность.
вы создаете WebCamTexture и вызываете его Play () функция, которая запускает камеру. WebCamTexture, как и любая текстура, позволяет получать пиксели с помощью вызова GetPixels (). Это позволяет сделать снимок, когда вам нравится, и вы можете сохранить его в Texture2D. Звонок в EncodeToPNG () и последующая запись в файл должна привести вас туда.
обратите внимание, что приведенный ниже код является быстрой записью на основе документации. Я не проверял его. Возможно, вам придется выбрать правильное устройство, если доступно несколько устройств.
using UnityEngine;
using System.Collections;
using System.IO;
public class WebCamPhotoCamera : MonoBehaviour
{
WebCamTexture webCamTexture;
void Start()
{
webCamTexture = new WebCamTexture();
renderer.material.mainTexture = webCamTexture;
webCamTexture.Play();
}
void TakePhoto()
{
// NOTE - you almost certainly have to do this here:
yield return new WaitForEndOfFrame();
// it's a rare case where the Unity doco is pretty clear,
// http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
// be sure to scroll down to the SECOND long example on that doco page
Texture2D photo = new Texture2D(webCamTexture.width, webCamTexture.height);
photo.SetPixels(webCamTexture.GetPixels());
photo.Apply();
//Encode to a PNG
byte[] bytes = photo.EncodeToPNG();
//Write out the PNG. Of course you have to substitute your_path for something sensible
File.WriteAllBytes(your_path + "photo.png", bytes);
}
}
для тех, кто пытается получить камеру для рендеринга live feed, вот как мне удалось его снять. Во-первых, я отредактировал ответ Барта, чтобы текстура была назначена при обновлении, а не только при запуске:
void Start()
{
webCamTexture = new WebCamTexture();
webCamTexture.Play();
}
void Update()
{
GetComponent<RawImage>().texture = webCamTexture;
}
затем я прикрепил скрипт к GameObject с компонентом RawImage. Вы можете легко создать его Правой Кнопкой Мыши - > UI - > RawImage в иерархии в редакторе Unity (для этого требуется Unity 4.6 и выше). Запуск его должен показывать прямую трансляцию камеры в вашем представлении. Как из этого письма Unity 5 поддерживает использование веб-камер в бесплатной личной версии Unity 5.
Я надеюсь,что это поможет любому, кто ищет хороший способ захвата живой камеры в Unity.
Это возможно. Я настоятельно рекомендую вам посмотреть WebcamTexture единства с API. Он имеет некоторые полезные функции:
- метода getpixel() -- возвращает цвет пикселя в координатах (x, y).
- GetPixels() -- получите блок цветов пикселей.
- GetPixels32 () -- возвращает данные пикселей в формате RAW.
- MarkNonReadable () -- отмечает WebCamTexture как нечитаемый
- Pause() -- приостанавливает камеры.
- Play () -- запускает камеру.
- Stop () -- останавливает камеру.
ответ Барта имеет требуемую модификацию. Я использовал его код, и фотография, которую я получал, была черной. Требуемая модификация заключается в том, что мы должны преобразуйте TakePhoto в coroutine и добавьте
yield return new WaitForEndOfFrame();
в начале корутина. (Courtsey @fafase) Подробнее см. http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
вы также можете обратиться к
возьмите фотографии с помощью веб-камеры дает черный выход[в Unity3D]
для этого типа функций доступен плагин под названием Camera Capture Kit -https://www.assetstore.unity3d.com/en/#!/содержание / 56673 и в то время как функциональность направлена на мобильный он содержит демонстрацию того, как вы можете использовать WebCamTexture, чтобы сделать неподвижное изображение.
Да, вы можете. Я создал Android родная камера плагин, который может открыть камеру вашего Android устройства, захватить изображение, записать видео и сохранить его в нужном месте вашего устройства с помощью всего нескольких строк кода.