2017-03-16 23 views
0

我剛剛開始學習C#和Unity,但我試圖獲得預製圖像,以便我可以在遊戲的其他地方使用它。Unity3D - 截取預製

我碰到代碼here,但如實地我不明白如何使用它。

我有我的預製件,我添加了一個畫布,然後將代碼應用到預製件上,但是我怎樣才能使它運行?

我已經對原帖發表了評論,但是我還沒有評論。

+0

我不確定你在問什麼......你爲什麼要截圖?你打算怎麼做?(你應該可以評論你自己的問題) –

+0

我已經說過爲什麼,因爲我需要在其他地方使用圖像。 – Mick

+0

那麼你確定你說過,但你究竟會使用屏幕截圖來做什麼?你在製作2D遊戲,只需要複製2D元素,還是需要實際的屏幕轉儲? –

回答

2

看起來你提供的鏈接上的代碼,是建立在虛空開始的一切()。所以當你在Unity中按下播放時,它會通過啓動方法中的代碼來有效地拍攝照片。您需要確保您添加CanvasScreenShot.cs的對象的名稱是「GameObject」。在test.cs的第10行中,他試圖找到名稱爲「GameObject」的GameObject。或者在第10行中,您可以將其更改爲您的GameObject的名稱。此外,在

void receivePNGScreenShot(byte[] pngArray) 
{ 
    Debug.Log("Picture taken"); 

    //Do Something With the Image (Save) 
    string path = Application.persistentDataPath + "/CanvasScreenShot.png"; 
    System.IO.File.WriteAllBytes(path, pngArray); 
    Debug.Log(path); 
} 
test.cs

你可能會發現更容易改變path值,喜歡你的桌面,要麼就是在統一的文件夾。你是否在控制檯中發現錯誤?隨時發表評論我會盡力幫助你盡我所能。

+0

嗯,它沒有按我的預期工作。我改名爲GameObject及其拍攝圖像,但所有即時通訊都是我自己可以通過截圖進行的操作。我希望獲得透明背景,但它只是採用默認棕色圖像的屏幕截圖/灰色背景 – Mick

+0

好吧,在CanvasScreenShot.cs中向下滾動到110行,這是他設置圖像大小的地方。看看它在哪裏說'Texture2d screenImage = new Texture2D(Screen.width,Screen.height);'這是抓住整個屏幕,將它改變爲畫布上對象的大小(你想拍攝的對象) 。然後在第114行改變'屏幕。寬度,Screen.height'到對象在畫布上的位置。這將需要一些試驗和錯誤。看看[ReadPixels](https://docs.unity3d.com/ScriptReference/Texture2D.ReadPixels.html) – bobbyanne

+0

我可能找到了一些讓背景透明的東西。我明天會檢查一下。 – bobbyanne

0

一種方法可以是使用相機來實現這一點。您可以移動相機,並更改相機上的剔除掩模以決定渲染的內容,並以這種方式調整它,使其僅渲染場景中的對象。

要顯示該圖像,可以使用渲染紋理來獲取不斷更新的紋理。如果您需要獲取單個圖像,則必須編寫一些代碼,但我不確定最佳方法是什麼。

至於得到一個PNG或任何圖像,我不知道該怎麼做,但你鏈接的代碼看起來像它有一個很好的解釋如何使用它。 我仍然不確定爲什麼你會想要一個PNG,除非你想讓用戶在運行時有一個保存的圖像。