Unity —— 神奇的 Gizmos 辅助线框 类

时间:2024-03-27 07:20:56

 经常在scene中看到这些 线框,图标 形状 ,我好像从来没有注意过。。。。

Unity —— 神奇的 Gizmos 辅助线框 类Unity —— 神奇的 Gizmos 辅助线框 类

这都是 Gizmos  的功劳

Gizmos在这里

Unity —— 神奇的 Gizmos 辅助线框 类

你可以调节选项以及值,来查看效果。

更改图标大小,是否显示。

Unity —— 神奇的 Gizmos 辅助线框 类Unity —— 神奇的 Gizmos 辅助线框 类

 

然后去看下API,以及F12

Unity —— 神奇的 Gizmos 辅助线框 类

Unity —— 神奇的 Gizmos 辅助线框 类

Unity —— 神奇的 Gizmos 辅助线框 类

正文上代码

这是两个函数,系统自动调用.

  private void OnDrawGizmos()
  {
        Debug.Log("drawGizmos,一直调用");
  }

    private void OnDrawGizmosSelected()
    {
        Debug.Log("selected,只有物体选中后调用");
    }

Unity —— 神奇的 Gizmos 辅助线框 类

 

 

Gizmos.DrawRay()   

 Unity —— 神奇的 Gizmos 辅助线框 类

 

[ExecuteInEditMode]
public class TimorGizmosDrawRay : MonoBehaviour
{
    public GameObject cube = null;

    public float distance = 5;

    private void Start()
    {
        cube = GameObject.Find("Sphere");
    }

    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.cyan;
        Gizmos.DrawRay(transform.localPosition, cube.transform.forward * distance);
        Gizmos.DrawRay(transform.localPosition, cube.transform.position);    
    }
}

Unity —— 神奇的 Gizmos 辅助线框 类

这里坐标处理的有点问题。后期修正

Gizmos.DrawCube()

 

Unity —— 神奇的 Gizmos 辅助线框 类

public class TimorGizmosDrawCube : MonoBehaviour
{
    public Vector3 center = Vector3.zero;
    public Vector3 size = Vector3.zero;

    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.cyan;
        Gizmos.DrawCube(center, size);
        Gizmos.DrawWireCube(center, size + new Vector3(3, 3, 3));
    }

 
}

Unity —— 神奇的 Gizmos 辅助线框 类

 

既然可以绘制实心立方体,也有空心,同理也有球体

 

Gizmos.DrawSphere()

一些参数挺简单的,我就不写了

public class TimorGizmosDrawSphere : MonoBehaviour
{
    public Vector3 center = Vector3.zero;
    public float radius = 1.5f;

    void Start()
    {
        
    }

    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.cyan;
        Gizmos.DrawSphere(center,radius);
        Gizmos.DrawWireSphere(center, radius * 1.5f);
    }
 
}

Unity —— 神奇的 Gizmos 辅助线框 类

Gizmos.DrawIcon()

这下需要注意,图片需要放到Gizmos文件下。

private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.cyan;
        Gizmos.DrawIcon(center, "timor", true);
    }

Unity —— 神奇的 Gizmos 辅助线框 类

 

总览

Unity —— 神奇的 Gizmos 辅助线框 类

 

其实Gizmos 挺好玩的。

下边是一个小测试

  public Vector3 from = Vector3.zero;
    public Vector3 to = Vector3.zero;
 

    public Color color = Color.cyan;
    public int x = 3;
    public int y = 3;
    public int z = 3;

    void Start()
    {
       
    }
  
    private void OnDrawGizmosSelected()
    {
        Gizmos.color = color;
        for (int i = 0; i < x; i++)
        {         
            for (int j = 0; j < y; j++)
            {             
                for (int k = 0; k < z; k++)
                {             
                    to = new Vector3(i, j, k);
                    Gizmos.DrawLine(Vector3.zero, to);
                }
            }
        }
    }

效果

Unity —— 神奇的 Gizmos 辅助线框 类

 

既然可以算出来每个点坐标,从 0,0,0点画线过去,那可不可以画出一个空心立方体。回头研究

 

从前有个人看我的文章,他点了赞,第二天面试就通过了

传送门

Unity - Manual: Gizmos menu https://docs.unity3d.com/Manual/GizmosMenu.html

Unity - Scripting API: Gizmos https://docs.unity3d.com/ScriptReference/Gizmos.html