|
Waits until the end of the frame after all cameras and GUI is rendered, just before displaying the frame on screen.
You can use it to read the display into a texture, encode it as an image file (see Texture2D.ReadPixels and Texture2D.EncodeToPNG) and send it somewhere.
yield new WaitForEndOfFrame ();
using UnityEngine; using System.Collections; public class example : MonoBehaviour { IEnumerator Awake() { yield return new WaitForEndOfFrame(); } }
import UnityEngine import System.Collections class example( MonoBehaviour): def Awake() as IEnumerator: yield WaitForEndOfFrame()
Another Example:
import System.IO;
function Start() { UploadPNG(); }
function UploadPNG() { yield WaitForEndOfFrame(); var width = Screen.width; var height = Screen.height; var tex = new Texture2D( width, height, TextureFormat.RGB24, false ); tex.ReadPixels( Rect(0, 0, width, height), 0, 0 ); tex.Apply();
var bytes = tex.EncodeToPNG(); Destroy( tex );
var form = new WWWForm(); form.AddField("frameCount", Time.frameCount.ToString()); form.AddBinaryData("fileUpload",bytes);
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"); }
private var mat : Material;
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 (); } }
|