Gizmos
一、Gizmos类是用于做什么的
Gizmos和Handles一样 都是用于让我们拓展Scene窗口的 主要专注与绘制辅助线、图标、形状等
二、Gizmos响应函数
在继承MonoBehavior的脚本中实现以下函数 便可以在其中使用Gizmos来进行图形图像的绘制 1. OnDrawGizmos() 在每一帧调用,绘制的内容可以在Scene窗口中看见 2. OnDrawGizmosSelected() 仅当脚本依附的GameObject被选中时才会每帧调用绘制相关内容
三、如何控制绘制内容的角度
如果直接绘制,当对象的角度或者缩放发生改变时,绘制的内容不会发生变化 此时,如果想绘制的内容和对象同步变化,需要改变Gizmos的绘制矩阵Gizmos.maxtix
1 2 3 4 5 6
| Gizmos.matrix = Matrix4x4.TRS(transform.position,transform.rotation,transform.localScale);
Gizmos.matrix = transform.localToWorldMatrix;
Gizmos.matrix = Matrix4x4.identity;
|
如果想单独控制,将Matrix4x4.TRS内对应参数部分还原即可
四、颜色、立方体、视锥
1 2 3 4 5 6 7 8 9 10 11
| Gizmos.color = Color.green;
Gizmos.color = Color.green; Gizmos.DrawCube(Vector3.zero, Vector3.one); Gizmos.color = Color.red; Gizmos.DrawWireCube(gameObject.transform.position, Vector3.one);
Gizmos.color = Color.yellow; Gizmos.DrawFrustum(this.transform.position, 110,50,0.5f,1.7f);
|
五、贴图、图标
1 2 3 4 5
| if (texture) Gizmos.DrawGUITexture(new Rect(this.transform.position.x,this.transform.position.y,160 , 90),texture);
Gizmos.DrawIcon(this.transform.position,"21");
|
六、线段、网格、射线
1 2 3 4 5 6 7 8 9 10
|
Gizmos.DrawLine(transform.position,Vector3.zero);
if(mesh) Gizmos.DrawMesh(mesh,transform.position,transform.rotation);
Gizmos.DrawRay(transform.position,transform.forward);
|
七、球体、网格线
1 2 3 4 5
| Gizmos.DrawSphere(transform.position,2); Gizmos.DrawWireSphere(transform.position,3);
Gizmos.DrawWireMesh(mesh, transform.position, transform.rotation);
|
八、更多api
查询官方文档