using UnityEngine;
namespace UVC.Util
{
///
/// GizmoDraw Ŭ·¡½º´Â UnityÀÇ Gizmo¸¦ »ç¿ëÇÏ¿© Sphere, Box, ¶Ç´Â Mesh¸¦ ±×¸®´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.
///
public class GizmoDraw : MonoBehaviour
{
///
/// GizmoÀÇ Å¸ÀÔÀ» Á¤ÀÇÇÕ´Ï´Ù. Sphere, Box, ¶Ç´Â Mesh Áß Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù.
///
public enum GizmoType
{
Sphere,
Box,
Mesh
}
///
/// ÇöÀç GizmoÀÇ Å¸ÀÔÀ» ¼³Á¤ÇÕ´Ï´Ù.
///
public GizmoType gizmoType;
///
/// Gizmo¸¦ ȸ鿡 Ç¥½ÃÇÒÁö ¿©ºÎ¸¦ ¼³Á¤ÇÕ´Ï´Ù.
///
public bool show = true;
///
/// Gizmo¸¦ ¿ÍÀ̾îÇÁ·¹ÀÓÀ¸·Î ±×¸±Áö ¿©ºÎ¸¦ ¼³Á¤ÇÕ´Ï´Ù.
///
public bool wire = false;
///
/// GizmoÀÇ »ö»óÀ» ¼³Á¤ÇÕ´Ï´Ù.
///
[SerializeField]
private Color color = Color.yellow;
///
/// Sphere GizmoÀÇ ¹ÝÁö¸§À» ¼³Á¤ÇÕ´Ï´Ù.
///
[SerializeField]
private float radius = 1f;
///
/// Box GizmoÀÇ °æ°è(Bounds)¸¦ ¼³Á¤ÇÕ´Ï´Ù.
///
public Bounds bounds = new Bounds(Vector3.zero, Vector3.one);
///
/// Mesh Gizmo¸¦ ±×¸± ¶§ »ç¿ëÇÒ Mesh¸¦ ¼³Á¤ÇÕ´Ï´Ù.
///
public Mesh mesh;
///
/// Mesh GizmoÀÇ ½ºÄÉÀÏÀ» ¼³Á¤ÇÕ´Ï´Ù.
///
public float scale = 1f;
///
/// UnityÀÇ Gizmo¸¦ ±×¸®´Â ¸Þ¼ÒµåÀÔ´Ï´Ù. Unity ¿¡µðÅÍ¿¡¼¸¸ µ¿ÀÛÇÕ´Ï´Ù.
///
///
/// GizmoDraw ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ¿© Sphere¸¦ ±×¸®´Â ¿¹Á¦:
///
/// var gizmoDraw = gameObject.AddComponent();
/// gizmoDraw.gizmoType = GizmoDraw.GizmoType.Sphere;
/// gizmoDraw.show = true;
/// gizmoDraw.wire = false;
/// gizmoDraw.radius = 2f;
///
///
void OnDrawGizmos()
{
if (this.show)
{
Gizmos.color = color;
if (gizmoType == GizmoType.Sphere)
{
if (wire)
Gizmos.DrawWireSphere(transform.position, radius);
else
Gizmos.DrawSphere(transform.position, radius);
}
else if (gizmoType == GizmoType.Box)
{
if (wire)
Gizmos.DrawWireCube(transform.position + bounds.center, bounds.size);
else
Gizmos.DrawCube(transform.position + bounds.center, bounds.size);
}
else
{
if (wire)
Gizmos.DrawWireMesh(mesh, transform.position, Quaternion.identity, new Vector3(scale, scale, scale));
else
Gizmos.DrawMesh(mesh, transform.position, Quaternion.identity, new Vector3(scale, scale, scale));
}
}
}
}
}