Waits until the end of the frame after all cameras and GUI is rendered, just before displaying the frame on screen.
yield new WaitForEndOfFrame ();
using UnityEngine; using System.Collections; public class Example : MonoBehaviour { IEnumerator Example() { yield return new WaitForEndOfFrame(); } }
import UnityEngine import System.Collections public class Example(MonoBehaviour): def Example() as IEnumerator: yield WaitForEndOfFrame()
// Saves screenshot as PNG file.
import System.IO;// Take a shot immediately
function Start() {
UploadPNG();
}function UploadPNG() {
// We should only read the screen buffer after rendering is complete
yield WaitForEndOfFrame(); // Create a texture the size of the screen, RGB24 format
var width = Screen.width;
var height = Screen.height;
var tex = new Texture2D( width, height, TextureFormat.RGB24, false );
// Read screen contents into the texture
tex.ReadPixels( Rect(0, 0, width, height), 0, 0 );
tex.Apply(); // Encode texture into PNG
var bytes = tex.EncodeToPNG();
Destroy( tex ); // For testing purposes, also write to a file in the project folder
// File.WriteAllBytes(Application.dataPath + "/../SavedScreen.png", bytes);
// Create a Web Form
var form = new WWWForm();
form.AddField("frameCount", Time.frameCount.ToString());
form.AddBinaryData("fileUpload",bytes); // Upload to a cgi script
var w = WWW("http:/localhost
cgi-bin/env.cgi?post", form);
yield w;
if (w.error != null)
print(w.error);
else
print("Finished Uploading Screenshot");
}
using System.IO;
using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour {
void Start() {
UploadPNG();
}
IEnumerator UploadPNG() {
yield return new WaitForEndOfFrame();
int width = Screen.width;
int height = Screen.height;
Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();
byte[] bytes = tex.EncodeToPNG();
Destroy(tex);
WWWForm form = new WWWForm();
form.AddField("frameCount", Time.frameCount.ToString());
form.AddBinaryData("fileUpload", bytes);
WWW w = new WWW("http:/localhost
cgi-bin/env.cgi?post", form);
yield return w;
if (w.error != null)
print(w.error);
else
print("Finished Uploading Screenshot");
}
}
import System.IO
import UnityEngine
import System.Collections
public class Example(MonoBehaviour):
def Start() as void:
UploadPNG()
def UploadPNG() as IEnumerator:
yield WaitForEndOfFrame()
width as int = Screen.width
height as int = Screen.height
tex as Texture2D = Texture2D(width, height, TextureFormat.RGB24, false)
tex.ReadPixels(Rect(0, 0, width, height), 0, 0)
tex.Apply()
bytes as (byte) = tex.EncodeToPNG()
Destroy(tex)
form as WWWForm = WWWForm()
form.AddField('frameCount', Time.frameCount.ToString())
form.AddBinaryData('fileUpload', bytes)
w as WWW = WWW('http:/localhost
cgi-bin/env.cgi?post', form)
yield w
if w.error != null:
print(w.error)
else:
print('Finished Uploading Screenshot')
// Shows alpha channel contents in the game view.private var mat : Material;// After the frame is completely rendered, we'll // draw a full screen quad that extracts the alpha channel. function Start() { while (true) { yield WaitForEndOfFrame(); if( !mat ) { mat = new Material( "Shader \"Hidden/Alpha\" {" + "SubShader {" + " Pass {" + " ZTest Always Cull Off ZWrite Off" + " Blend DstAlpha Zero" + " Color (1,1,1,1)" + " }" + "}" + "}" ); } GL.PushMatrix (); GL.LoadOrtho (); for (var i = 0; i < mat.passCount; ++i) { mat.SetPass (i); GL.Begin( GL.QUADS ); GL.Vertex3( 0, 0, 0.1 ); GL.Vertex3( 1, 0, 0.1 ); GL.Vertex3( 1, 1, 0.1 ); GL.Vertex3( 0, 1, 0.1 ); GL.End(); } GL.PopMatrix (); } }
using UnityEngine; using System.Collections; public class Example : MonoBehaviour { private Material mat; IEnumerator Start() { while (true) { yield return new WaitForEndOfFrame(); if (!mat) mat = new Material("Shader \"Hidden/Alpha\" {" + "SubShader {" + " Pass {" + " ZTest Always Cull Off ZWrite Off" + " Blend DstAlpha Zero" + " Color (1,1,1,1)" + " }" + "}" + "}"); GL.PushMatrix(); GL.LoadOrtho(); int i = 0; while (i < mat.passCount) { mat.SetPass(i); GL.Begin(GL.QUADS); GL.Vertex3(0, 0, 0.1F); GL.Vertex3(1, 0, 0.1F); GL.Vertex3(1, 1, 0.1F); GL.Vertex3(0, 1, 0.1F); GL.End(); ++i; } GL.PopMatrix(); } } }
import UnityEngine import System.Collections public class Example(MonoBehaviour): private mat as Material def Start() as IEnumerator: while true: yield WaitForEndOfFrame() if not mat: mat = Material((((((((('Shader "Hidden/Alpha" {' + 'SubShader {') + ' Pass {') + ' ZTest Always Cull Off ZWrite Off') + ' Blend DstAlpha Zero') + ' Color (1,1,1,1)') + ' }') + '}') + '}')) GL.PushMatrix() GL.LoadOrtho() i as int = 0 while i < mat.passCount: mat.SetPass(i) GL.Begin(GL.QUADS) GL.Vertex3(0, 0, 0.1F) GL.Vertex3(1, 0, 0.1F) GL.Vertex3(1, 1, 0.1F) GL.Vertex3(0, 1, 0.1F) GL.End() ++i GL.PopMatrix()