UEDL10-1——颜色、立方体、视锥

本章代码关键字

1
2
3
4
5
Gizmos.color            //设置Gizmos中的绘制API绘制出来的内容的颜色
Gizmos.DrawCube() //绘制一个立方体
Gizmos.DrawWireCube() //绘制一个线框立方体
Gizmos.DrawFrustum() //绘制一个视锥
Gizmos.matrix //设置Gizmos中的绘制API绘制出来的内容的位置,角度,缩放

Gizmos修改颜色

在调用Gizmos​中的绘制API之前,可以设置其绘制出来的颜色
该方法单独执行无效果,需要配合其他方法一起执行才能看出效果,如下面的绘制立方体

1
2
3
4
5
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.green;
Gizmos.DrawCube(Vector3.zero, Vector3.one);
}

显示效果:image

Gizmos绘制立方体

绘制立方体有两种API:

  • 绘制实心立方体:Gizmos.DrawCube(中心点, 大小);
  • 绘制线框立方体:Gizmos.DrawWireCube(中心点, 大小);

两个方法的参数都是立方体的位置及其某个边的长度

1
2
3
4
5
6
7
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.green;
Gizmos.DrawCube(Vector3.zero, Vector3.one);
Gizmos.color = Color.red;
Gizmos.DrawWireCube(this.transform.position, new Vector3(2, 1, 3));
}

显示效果:image
其中,红色线框立方体是随对象移动而移动的,绿色立方体位置是固定的

Gizmos绘制视锥

该方法会绘制应该类似于摄像机那样的视锥:Gizmos.DrawFrustum()

  • 参数一:绘制位置
  • 参数二:FOV,视野角度
  • 参数三:远裁切平面到绘制位置的距离
  • 参数四:近裁切平面到绘制位置的的距离
  • 参数五:屏幕的长宽比
1
2
3
4
5
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.yellow;
Gizmos.DrawFrustum(this.transform.position, 30, 50, 0.5f, 1.7f);
}

显示效果:image

如何改变绘制内容的角度

上面绘制的内容都是不能随游戏对象的旋转而旋转的,如果要做到绘制内容的旋转需要使用Gizmos.matrix

如果要让绘制出来的内容跟随脚本依附的对象旋转,需要为Gizmos.matrix​赋值一个Matrix4x4.TRS(位置, 角度, 缩放)​的返回值
值得一提的是,如果在Matrix4x4.TRS()​内传入了某个游戏对象的位置,角度,缩放,
则不仅是旋转,位置和缩放也会随游戏对象的变换而变换(即使绘制位置没有传入该游戏对象的位置)
如果不希望缩放或者位置也随游戏对象的变换而变换,可以直接传入Vector3.one

如果要让绘制的内容的位置,角度,缩放与某个游戏对象的transform​相关联,还可以使用transform.localToWorldMatrix​直接赋值

1
2
3
4
5
6
7
private void OnDrawGizmosSelected()
{
Gizmos.matrix = Matrix4x4.TRS(this.transform.position, this.transform.rotation, this.transform.localScale);
//Gizmos.matrix = this.transform.localToWorldMatrix; //这句的代码等效于上面的
Gizmos.color = Color.white;
Gizmos.DrawWireCube(Vector3.zero, new Vector3(1, 1, 1));
}

显示效果:image

如果要复原Gizmos.matrix​,使后来绘制的内容不受其影响,只需要赋值Matrix4x4.identity​即可