165 lines
5.0 KiB
C#
165 lines
5.0 KiB
C#
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 2007-2016 , Inc. All Rights Reserved.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
using System;
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
namespace GCSeries.zView
|
|
{
|
|
public class BoxMask : MonoBehaviour
|
|
{
|
|
//////////////////////////////////////////////////////////////////
|
|
// Unity Monobehaviour Callbacks
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
void Awake()
|
|
{
|
|
this.CreateMesh();
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Public API
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
public void SetSize(Vector3 size)
|
|
{
|
|
if (size != _size)
|
|
{
|
|
// Update the mesh vertices corresponding to the outer
|
|
// extents of the box mask.
|
|
Vector3 halfSize = size * 0.5f;
|
|
Vector3[] vertices = _mesh.vertices;
|
|
|
|
vertices[4] = new Vector3(-halfSize.x, halfSize.y, 0);
|
|
vertices[5] = new Vector3(halfSize.x, halfSize.y, 0);
|
|
vertices[6] = new Vector3(halfSize.x, -halfSize.y, 0);
|
|
vertices[7] = new Vector3(-halfSize.x, -halfSize.y, 0);
|
|
|
|
vertices[8] = new Vector3(-halfSize.x, halfSize.y, -size.z);
|
|
vertices[9] = new Vector3(halfSize.x, halfSize.y, -size.z);
|
|
vertices[10] = new Vector3(halfSize.x, -halfSize.y, -size.z);
|
|
vertices[11] = new Vector3(-halfSize.x, -halfSize.y, -size.z);
|
|
|
|
_mesh.vertices = vertices;
|
|
|
|
// Cache the new size.
|
|
_size = size;
|
|
}
|
|
}
|
|
|
|
public void SetCutoutSize(Vector2 size)
|
|
{
|
|
if (size != _cutoutSize)
|
|
{
|
|
// Update the mesh vertices corresponding to the extents
|
|
// of back face's cutout.
|
|
Vector2 halfSize = size * 0.5f;
|
|
Vector3[] vertices = _mesh.vertices;
|
|
|
|
vertices[0] = new Vector3(halfSize.x, halfSize.y, 0);
|
|
vertices[1] = new Vector3(halfSize.x, -halfSize.y, 0);
|
|
vertices[2] = new Vector3(-halfSize.x, -halfSize.y, 0);
|
|
vertices[3] = new Vector3(-halfSize.x, halfSize.y, 0);
|
|
|
|
_mesh.vertices = vertices;
|
|
|
|
// Cache the new cutout size.
|
|
_cutoutSize = size;
|
|
}
|
|
}
|
|
|
|
public void SetRenderQueue(int renderQueue)
|
|
{
|
|
if (_meshRenderer != null && _meshRenderer.material != null)
|
|
{
|
|
_meshRenderer.material.renderQueue = renderQueue;
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Private Methods
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
private void CreateMesh()
|
|
{
|
|
// Create the mesh.
|
|
_mesh = new Mesh();
|
|
_mesh.name = "BoxMask";
|
|
_mesh.vertices = new Vector3[12];
|
|
_mesh.triangles = new int[]
|
|
{
|
|
// Back Face Top:
|
|
0, 4, 5,
|
|
0, 5, 1,
|
|
|
|
// Back Face Right:
|
|
1, 5, 6,
|
|
1, 6, 2,
|
|
|
|
// Back Face Bottom:
|
|
2, 6, 7,
|
|
2, 7, 3,
|
|
|
|
// Back Face Left:
|
|
3, 7, 4,
|
|
3, 4, 0,
|
|
|
|
// Top Face:
|
|
4, 8, 9,
|
|
4, 9, 5,
|
|
|
|
// Right Face:
|
|
5, 9, 10,
|
|
5, 10, 6,
|
|
|
|
// Bottom Face:
|
|
6, 10, 11,
|
|
6, 11, 7,
|
|
|
|
// Right Face:
|
|
7, 11, 8,
|
|
7, 8, 4,
|
|
|
|
// Front Face:
|
|
8, 10, 9,
|
|
8, 11, 10,
|
|
};
|
|
|
|
// Attempt to find the depth mask shader.
|
|
Shader depthMaskShader = Shader.Find("/zView/DepthMask");
|
|
if (depthMaskShader == null)
|
|
{
|
|
Debug.LogError("Failed to find the /zView/DepthMask shader.");
|
|
}
|
|
|
|
// Create the mesh filter and update its mesh.
|
|
_meshFilter = this.gameObject.AddComponent<MeshFilter>();
|
|
_meshFilter.mesh = _mesh;
|
|
|
|
// Create the mesh renderer and update its material.
|
|
_meshRenderer = this.gameObject.AddComponent<MeshRenderer>();
|
|
if (depthMaskShader != null)
|
|
{
|
|
_meshRenderer.material = new Material(depthMaskShader);
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Private Members
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
private MeshFilter _meshFilter = null;
|
|
private MeshRenderer _meshRenderer = null;
|
|
private Mesh _mesh = null;
|
|
private Vector3 _size = Vector3.zero;
|
|
private Vector2 _cutoutSize = Vector2.zero;
|
|
}
|
|
} |