やまめも

【 ゲーム開発・日々のことについて 】

かっこいい画面遷移

www.youtube.com
www.reddit.com
http://i.imgur.com/61jkcqa.gif

using UnityEngine;
using System.Collections;


//Attach this to a camera
public class CameraScreenGrab : MonoBehaviour {

	//how chunky to make the screen
	public float pixelSize = 0;
	public FilterMode filterMode = FilterMode.Point;
	public Camera[] otherCameras;
	private Material mat;
	Texture2D tex;

	public static CameraScreenGrab instance = null;
	void Awake(){
		if(instance == null){
			instance = this;
		}

	}
	void Start () {
		camera.pixelRect = new Rect(0,0,Screen.width/pixelSize,Screen.height/pixelSize);
		for (int i = 0; i < otherCameras.Length; i++)
			otherCameras[i].pixelRect = new Rect(0,0,Screen.width/pixelSize,Screen.height/pixelSize);
	}
	void Update(){
		camera.pixelRect = new Rect(0,0,Screen.width/pixelSize,Screen.height/pixelSize);
		for (int i = 0; i < otherCameras.Length; i++)
			otherCameras[i].pixelRect = new Rect(0,0,Screen.width/pixelSize,Screen.height/pixelSize);

	}


	void OnGUI()
	{
		if (Event.current.type == EventType.Repaint)
			Graphics.DrawTexture(new Rect(0,0,Screen.width, Screen.height), tex);
	}


	void OnPostRender()
	{
		//matがfalseだったら
		if(!mat) {
			mat = new Material( "Shader \"Hidden/SetAlpha\" {" +
				"SubShader {" +
				"	Pass {" +
				"		ZTest Always Cull Off ZWrite Off" +
				"		ColorMask A" +
				"		Color (1,1,1,1)" +
				"	}" +
				"}" +
				"}"
			);
		}
		// Draw a quad over the whole screen with the above shader
		GL.PushMatrix ();
		GL.LoadOrtho ();
		for (var i = 0; i < mat.passCount; ++i) {
			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();
		}
		GL.PopMatrix ();	


		DestroyImmediate(tex);

		tex = new Texture2D(Mathf.FloorToInt(camera.pixelWidth), Mathf.FloorToInt(camera.pixelHeight));
		tex.filterMode = filterMode;
		tex.ReadPixels(new Rect(0, 0, camera.pixelWidth, camera.pixelHeight), 0, 0);
		tex.Apply();
	}

}
using UnityEngine;
using System.Collections;

public class MovePlayScreen : MonoBehaviour {

	public Camera mainCamera;
	public float orthographicSize;
	public bool ZoomDone = false;
	public bool OnZoom = false;

	float PixelSize;
	public bool PixelDone = false;
	public bool OnPixel = false;


	public static MovePlayScreen instance = null;
	void Awake(){
		if(instance == null){
			instance = this;
		}

	}


	public void ZoomScreen(){
		if(OnZoom){
			if (2f < orthographicSize) {
				orthographicSize -= Time.deltaTime * 15f;
				mainCamera.camera.orthographicSize = orthographicSize;


			} else {
				OnZoom = false;
				ZoomDone = true;

			}
			if(ZoomDone){
				if(!GameManager.instance.Play){
					StartCoroutine(GameManager.instance.PlaybuttonOnWait());
				}
			}
		}
	}
	public bool Topixel = true;
	public void pixelSceen(){
		if(OnPixel){
			if (Topixel) {
				if (30f > PixelSize) {
					PixelSize = CameraScreenGrab.instance.pixelSize;
					PixelSize += Time.deltaTime * 20f;
					CameraScreenGrab.instance.pixelSize = PixelSize;

				} else {
					Topixel = false;
				}
			}
			if (!Topixel) {
				if (0 < PixelSize) {
					PixelSize = CameraScreenGrab.instance.pixelSize;
					PixelSize -= Time.deltaTime * 20f;
					CameraScreenGrab.instance.pixelSize = PixelSize;
					if (5 > PixelSize) {
					}

				} else {

					PixelDone = true;
					Topixel = false;
					OnPixel = false;

				}
			}
			if(PixelDone){
				if(!GameManager.instance.Play){
					StartCoroutine(GameManager.instance.PlaybuttonOnWait());
				}
			}
		}
	}
}