Ich bin mit den komplexeren Funktionen von Unity3D völlig unbekannt und bin neugierig, ob es die Fähigkeit hat, ein Foto aufzunehmen und es dann zu manipulieren. Insbesondere möchte ich, dass der Benutzer ein Selfie nimmt und dann um sein Gesicht herum verfolgt, um ein PNG zu erstellen, das dann auf ein Modell texturiert wird.
Ich weiß, dass die Gesichtsabbildung für ein Modell einfach ist, aber ich frage mich, ob ich die Foto-/Schnitzfunktionalität in die umfassende Chrome-App schreiben muss oder ob dies alles in Unity möglich ist. Ich brauche kein Tutorial, nur um zu fragen, ob etwas möglich ist.
Ja das ist möglich. Sie möchten sich die Funktionalität von WebCamTexture anschauen.
Sie erstellen eine WebCamTexture und rufen ihre Play () - Funktion auf, mit der die Kamera gestartet wird. Mit WebCamTexture können Sie wie bei jeder beliebigen Textur die Pixel über einen GetPixels () - Aufruf abrufen. Auf diese Weise können Sie einen Schnappschuss aufnehmen, wenn Sie möchten, und Sie können dies in einer Texture2D speichern. Ein Aufruf von EncodeToPNG () und nachfolgendes Schreiben in eine Datei sollten Sie dorthin bringen.
Beachten Sie, dass der folgende Code eine schnelle Beschreibung ist, die auf der Dokumentation basiert. Ich habe es nicht getestet. Sie müssen möglicherweise ein korrektes Gerät auswählen, wenn mehr als ein Gerät verfügbar ist.
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);
}
}
Für diejenigen, die versuchen, die Kamera dazu zu bringen, Live-Feeds zu rendern, habe ich es hier geschafft. Zuerst habe ich Barts Antwort so bearbeitet, dass die Textur beim Update zugewiesen wurde und nicht nur beim Start:
void Start()
{
webCamTexture = new WebCamTexture();
webCamTexture.Play();
}
void Update()
{
GetComponent<RawImage>().texture = webCamTexture;
}
Dann habe ich das Skript mit einer RawImage-Komponente an ein GameObject angehängt. Sie können eines mit Rechtsklick -> Benutzeroberfläche -> RawImage in der Hierarchie im Unity-Editor erstellen (dies erfordert Unity 4.6 und höher). Beim Ausführen sollte ein Live-Feed der Kamera in Ihrer Ansicht angezeigt werden. Derzeit unterstützt Unity 5 die Verwendung von Webcams in der kostenlosen Personal Edition von Unity 5.
Ich hoffe, dass dies jedem hilft, der nach einer guten Möglichkeit sucht, Live-Kamera-Feed in Unity aufzunehmen.
Es ist möglich. Ich empfehle Ihnen dringend, sich die WebcamTexture Unity API anzusehen. Es hat einige nützliche Funktionen:
Bart Antwort hat eine erforderliche Modifikation. Ich habe seinen Code benutzt und das Bild, das ich bekam, war schwarz. Erforderlich ist, dass wir TakePhoto in eine Coroutine konvertieren und hinzufügen müssen
yield return new WaitForEndOfFrame();
am Anfang von Coroutine. (Courtsey @fafase) Weitere Informationen finden Sie unter http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
Sie können sich auch darauf beziehen
Foto mit einer Webcam aufnehmen zeigt schwarze Ausgabe [Unity3D]
Ja, du kannst. Ich habe Android Native Camera Plugin erstellt, mit dem Sie die Kamera Ihres Android-Geräts öffnen, Bilder aufnehmen, Videos aufnehmen und diese mit nur wenigen Codezeilen am gewünschten Ort Ihres Geräts speichern können.
Wenn Sie dies ohne die Verwendung eines Plugins eines Drittanbieters tun möchten, hilft Ihnen die @FuntionR-Lösung. Wenn Sie das aufgenommene Foto jedoch in der Galerie speichern möchten (Android & iOS), ist dies innerhalb von Unity nicht möglich. Sie müssen nativen Code schreiben, um das Foto in die Galerie zu übertragen, und es dann von Unity aus aufrufen.
Hier ist ein zusammenfassender Blog, der Sie bei der Erreichung Ihres Ziels unterstützt. http://unitydevelopers.blogspot.com/2018/07/pick-image-from-gallery-in-unity3d.html
Bearbeiten: Beachten Sie, dass im obigen Thread die Auswahl von Bildern aus der Galerie beschrieben wird. Der gleiche Vorgang wird jedoch für das Speichern des Bildes in der Galerie durchgeführt.
Für diese Art von Funktionalität ist ein Plugin mit dem Namen Camera Capture Kit - https://www.assetstore.unity3d.com/de/#!/content/56673 verfügbar. Die bereitgestellten Funktionen sind zwar auf mobile Geräte ausgerichtet Eine Demo, wie Sie mit WebCamTexture ein Standbild aufnehmen können.