言語: 日本語
  • C#
  • JS
  • Boo

スクリプト言語

お好みのスクリプト言語を選択すると、サンプルコードがその言語で表示されます。

Camera.projectionMatrix

Switch to Manual
public var projectionMatrix: Matrix4x4;

Description

Set a custom projection matrix.

If you change this matrix, the camera no longer updates its rendering based on its fieldOfView. This lasts until you call ResetProjectionMatrix. Use a custom projection only if you really need a non-standard projection. This property is used by Unity's water rendering to setup an oblique projection matrix. Using custom projections requires good knowledge of transformation and projection matrices.

	// Make camera wobble in a funky way!
	var originalProjection : Matrix4x4;
	originalProjection = camera.projectionMatrix;
	
	function Update () {
		var p : Matrix4x4 = originalProjection;
		// change some values from the original matrix
		p.m01 += Mathf.Sin (Time.time * 1.2) * 0.1;
		p.m10 += Mathf.Sin (Time.time * 1.5) * 0.1;
		camera.projectionMatrix = p;
	}
	// Set an off-center projection, where perspective's vanishing
	// point is not necessarily in the center of the screen.
	//
	// left/right/top/bottom define near plane size, i.e.
	// how offset are corners of camera's near plane.
	// Tweak the values and you can see camera's frustum change.

	@script ExecuteInEditMode

	var left : float = -0.2;
	var right : float = 0.2;
	var top : float = 0.2;
	var bottom : float = -0.2;

	function LateUpdate () {
		var cam : Camera = camera;
		var m : Matrix4x4 = PerspectiveOffCenter(
			left, right, bottom, top,
			cam.nearClipPlane, cam.farClipPlane );
		cam.projectionMatrix = m;
	}

	static function PerspectiveOffCenter(
		left : float, right : float,
		bottom : float, top : float,
		near : float, far : float ) : Matrix4x4
	{        
		var x : float =  (2.0 * near) / (right - left);
		var y : float =  (2.0 * near) / (top - bottom);
		var a : float =  (right + left) / (right - left);
		var b : float =  (top + bottom) / (top - bottom);
		var c : float = -(far + near) / (far - near);
		var d : float = -(2.0 * far * near) / (far - near);
		var e : float = -1.0;

		var m : Matrix4x4 = new Matrix4x4();
		m[0,0] = x;  m[0,1] = 0;  m[0,2] = a;  m[0,3] = 0;
		m[1,0] = 0;  m[1,1] = y;  m[1,2] = b;  m[1,3] = 0;
		m[2,0] = 0;  m[2,1] = 0;  m[2,2] = c;  m[2,3] = d;
		m[3,0] = 0;  m[3,1] = 0;  m[3,2] = e;  m[3,3] = 0;
		return m;
	}