2014-06-30 13 views
14

Jestem całkowicie obeznany z bardziej złożonym zestawem funkcji Unity3D i jestem ciekawy, czy ma możliwość zrobienia zdjęcia, a następnie manipulowania nim. W szczególności chciałem, aby użytkownik zrobił selfie, a następnie prześledził ich twarz, aby stworzyć plik PNG, który następnie zostałby zmapowany na model.Czy mogę zrobić zdjęcie w Unity za pomocą aparatu urządzenia?

Wiem, że odwzorowanie twarzy na modelu jest proste, ale zastanawiam się, czy muszę napisać funkcję fotografowania/rzeźbienia w otaczającej aplikacji Chrome, czy też można to wszystko zrobić z poziomu Unity. Nie potrzebuję samouczka, jak to zrobić, po prostu pytając, czy jest to możliwe.

+0

W 2016 roku mamy PEŁEN WYJAŚNIENIE, jak to zrobić ... http://answers.unity3d.com/questions/909967/getting-a-web-cam-to-play-on-ui-texture-image .html # answer-910020 *** CRITICAL *** ... kliknij na link, aby uzyskać "magiczny" kod, aby *** obrócić, odwrócić, obrócić *** obraz poprawnie na iOS/Android. – Fattie

Odpowiedz

16

Tak, jest to możliwe. Będziesz chciał spojrzeć na funkcjonalność WebCamTexture.

Tworzysz WebCamTexture i wywołujesz funkcję Play(), która uruchamia kamerę. WebCamTexture, jak każda tekstura, pozwala uzyskać piksele za pomocą wywołania GetPixels(). Pozwala to na zrobienie migawki, kiedy chcesz, i możesz to zapisać w Texture2D. Należy tam zadzwonić pod numer EncodeToPNG() i później napisać do pliku.

Należy zauważyć, że poniższy kod jest szybkim zapisem w oparciu o dokumentację. Nie testowałem tego. Może być konieczne wybranie odpowiedniego urządzenia, jeśli dostępnych jest więcej niż jedno urządzenie.

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

teraz, jak radzić sobie z obrotami kamery, powiedzmy, urządzenie z Androidem, kiedy to robisz? – Codejoy

+0

Co dokładnie jest tutaj do obsługi @Codejoy? Co chcesz się stać? – Bart

+0

Zbyt późno na odpowiedź? Mam kod posortowany, dołączam go do gameObject z ikoną spriteRenderer ... uruchamia kamerę, robi zdjęcie, jeśli naciśniesz przycisk, ale nie wyświetla obrazu na żywo ... żadnych pomysłów, co mam robić źle? (praca w środowisku 2D interfejsu użytkownika) – Matt

6

Dla tych, którzy starają się, aby kamera wyświetlała obraz na żywo, oto jak udało mi się to zrobić. Po pierwsze, ja edytowany odpowiedź Barta więc faktura zostanie przydzielony na aktualizację, a nie tylko na początku:

void Start() 
{ 
    webCamTexture = new WebCamTexture(); 
    webCamTexture.Play(); 
} 

void Update() 
{ 
    GetComponent<RawImage>().texture = webCamTexture; 
} 

Potem dołączył skrypt do GameObject'u ze składnikiem RawImage. Możesz go łatwo stworzyć klikając prawym przyciskiem myszy -> UI -> RawImage w hierarchii w edytorze Unity (wymaga to jedności 4.6 i wyższych). Uruchomienie go powinno pokazywać na żywo obraz z kamery w widoku. W chwili pisania tego tekstu Unity 5 wspiera korzystanie z kamer internetowych w wolnym wydaniu Unity 5.

Mam nadzieję, że pomoże to każdemu, kto szuka dobrego sposobu na uchwycenie obrazu z kamery na żywo w Unity.

0

Jest plugin dostępne dla tego typu funkcjonalność o nazwie Camera Przechwytywanie Kit - https://www.assetstore.unity3d.com/en/#!/content/56673 a jednocześnie funkcjonalnością pod warunkiem, jest ukierunkowany na telefon zawiera demo, w jaki sposób można użyć WebCamTexture do zrobienia zdjęcia.

Powiązane problemy