WaitForEndOfFrame 等待帧结束

Inherits from YieldInstruction

Waits until the end of the frame after all cameras and GUI is rendered, just before displaying the frame on screen.

等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前。

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.

你可以使用它读取显示到纹理,编码它为一个图片文件(参见Texture2D.ReadPixels和)并且发送到任意地方。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	public IEnumerator Awake() {
		yield return new WaitForEndOfFrame();
	}
}
yield new WaitForEndOfFrame ();
// Saves screenshot as PNG file.
//保持屏幕为PNG文件
import System.IO;

// Take a shot immediately
//立即截屏
function Start() {
	UploadPNG();
}

function UploadPNG() {
	// We should only read the screen bufferafter rendering is complete
	//等待完成后读取屏幕缓存
	yield WaitForEndOfFrame();

	// Create a texture the size of the screen, RGB24 format
	//创建一个屏幕大小的图片,RGB24格式
	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
	//编码图片为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
	//创建一个Web表单
	var form = new WWWForm();
	form.AddField("frameCount", Time.frameCount.ToString());
	form.AddBinaryData("fileUpload",bytes);

	// Upload to a cgi script
	//上传到一个cgi脚本
	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");
}

// Shows alpha channel contents in the game view.
// Requires Unity Pro as this script uses GL class.
//在游戏视图中显示alpha通道的内容,需要Unity Pro专业版,这个脚本使用了GL类。
private var mat : Material;

// After the frame is completely rendered, we'll
// draw a full screen quad that extracts the alpha channel.
//在该帧完全渲染之后,我们将绘制一个提取了alpha通道的全屏矩形
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 ();
	}
}
Page last updated: 2010-12-25