Unity プロジェクトのフレームを保存して、プレビュー GIF を自動生成しようとしています。次のようにスクリプトでメソッドを呼び出します。
Application.CaptureScreenshot("Screenshot" + Time.frameCount + ".png");
Unityでこれを行うと、うまく機能します。しかし、プロジェクトを WebGL としてビルドすると、それはもう行われません。なんで?または、フレームを保存する別の方法を知っている人はいますか?
Unity プロジェクトのフレームを保存して、プレビュー GIF を自動生成しようとしています。次のようにスクリプトでメソッドを呼び出します。
Application.CaptureScreenshot("Screenshot" + Time.frameCount + ".png");
Unityでこれを行うと、うまく機能します。しかし、プロジェクトを WebGL としてビルドすると、それはもう行われません。なんで?または、フレームを保存する別の方法を知っている人はいますか?
スクリーンショットを撮る方法は他にもあります。WebGL ではテストされていませんが、試してみてください。
void CaptureScreenshot()
{
StartCoroutine(CaptureScreenshotCRT());
}
IEnumerator CaptureScreenshotCRT()
{
yield return new WaitForEndOfFrame();
string path = Application.persistentDataPath + "/Screenshot" + Time.frameCount + ".png";
Texture2D screenImage = new Texture2D(Screen.width, Screen.height);
//Get Image from screen
screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenImage.Apply();
//Convert to png
byte[] imageBytes = screenImage.EncodeToPNG();
//Save image to file
System.IO.File.WriteAllBytes(path, imageBytes);
}
// Application.CaptureScreenshot is not for WebGL..
// WebGL must use read pixel for capture screen.
// Guess you trying to export some files from WebGL, then should use .php or //something else. Beacause WebGL requires stp connection.
IEnumerator SendImagetophp()
{
//Path to PHP
string screenShotURL = "http://youtphppath/yourphpname.php";
//Wait until frame ends
yield return new WaitForEndOfFrame();
// Create a texture the size of the screen, RGB24 format
int width = Screen.width;
int height = Screen.height;
tex = new Texture2D(width, height, TextureFormat.RGB24, false);
// Read screen contents into the texture
tex.ReadPixels(new Rect(0,0, width, height), 0, 0, false);
tex.Apply();
// Encode texture into PNG
byte[] bytes = tex.EncodeToPNG();
Destroy(tex);
// Create a Web Form
WWWForm form = new WWWForm();
form.AddField("frameCount", Time.frameCount.ToString());
//form.AddField("email", userEmailAddress);
form.AddBinaryData("file", bytes, "_screenShot.png", "multipart/form-data");//"image/png"
// Post WWWForm to path
UnityWebRequest www = UnityWebRequest.Post(screenShotURL, form);
yield return www.SendWebRequest();
//Debug
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log("Image Uploaded!");
}
}
//.PHP file _ require upload folder.
<?php
$file_name = $_FILES['file']['name'];
$tmp_file = $_FILES['file']['tmp_name'];
$file_path = 'upload/'.$file_name;
$r = move_uploaded_file($tmp_file, $file_path);
?>