我完全不熟悉Unity3D的更復雜的功能集,並且很好奇它是否具備拍照然後操作它的功能。具體而言,我的願望是讓用戶拍攝自拍照,然後讓他們追蹤自己的臉部以創建PNG,然後將其紋理映射到模型上。我可以使用設備的相機在Unity中拍照嗎?
我知道模型上的臉部映射很簡單,但我想知道是否需要將照片/雕刻功能寫入包含Chrome的應用程序,或者是否可以在Unity中完成。我不需要關於如何去做的教程,只是問是否有可能。
我完全不熟悉Unity3D的更復雜的功能集,並且很好奇它是否具備拍照然後操作它的功能。具體而言,我的願望是讓用戶拍攝自拍照,然後讓他們追蹤自己的臉部以創建PNG,然後將其紋理映射到模型上。我可以使用設備的相機在Unity中拍照嗎?
我知道模型上的臉部映射很簡單,但我想知道是否需要將照片/雕刻功能寫入包含Chrome的應用程序,或者是否可以在Unity中完成。我不需要關於如何去做的教程,只是問是否有可能。
是的,這是可能的。您需要查看WebCamTexture功能。
您創建WebCamTexture並調用啓動攝像頭的Play()函數。 WebCamTexture與任何Texture一樣,允許您通過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);
}
}
這是可能的。我強烈建議你看看WebcamTexture Unity API。它有一些有用的功能:
對於那些試圖讓相機渲染活動飼料,這裏是我如何設法把它關閉。首先,我編輯Bart的答案,讓紋理將在更新分配,而不是僅僅在開始:
void Start()
{
webCamTexture = new WebCamTexture();
webCamTexture.Play();
}
void Update()
{
GetComponent<RawImage>().texture = webCamTexture;
}
然後接上腳本與RawImage分量的遊戲對象。你可以在Unity Editor的Hierarchy中通過右鍵單擊 - > UI - > RawImage輕鬆創建一個(這需要Unity 4.6及更高版本)。運行它應該在您的視圖中顯示相機的實時饋送。在撰寫本文時,Unity 5支持在Unity 5的免費個人版中使用網絡攝像頭。
我希望這有助於任何想要在Unity中捕捉實時攝像頭feed的人。
Bart的回答有一個必要的修改。我用他的代碼和我得到的圖片是黑色的。需要修訂的是,我們必須 轉換TakePhoto到協程和協程開始添加
yield return new WaitForEndOfFrame();
。 (Courtsey @fafase) 欲瞭解更多詳情,請參閱 http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
您也可以參考
沒有可用於這種類型的功能稱爲相機捕獲試劑盒插件 - https://www.assetstore.unity3d.com/en/#!/content/56673並且在功能提供的是面向移動的,它包含了一個如何使用WebCamTexture拍攝靜止圖像的演示。
對於2016年這裏是如何做到這一點的全面解釋... http://answers.unity3d.com/questions/909967/getting-a-web-cam-to-play-on-ui-texture-image .html#answer-910020 *** CRITICAL *** ...按照鏈接獲取「魔術」代碼,以便在iOS/Android上正確旋轉,反轉,旋轉***圖像。 – Fattie