Unity Editor 基础篇(五):Gizmos

本文参自:http://mp.weixin.qq.com/s/J9VaOcSROThSFzHRgjUkog

本文为本人学习上连接的笔记有改动,请点击以上链接查看原文,尊重楼主知识产权。

Unity Editor–Gizmos

目标: 
1.了解一些属性的使用


最终效果:

这里写图片描述

准备工作: 
在之前的项目或者新建的项目中创建如下目录结构:

这里写图片描述

如果是新的项目,只需创建Scripts和Gizmos就好。

该文章用的到API:

这里写图片描述

传送门:http://www.ceeger.com/Script/Gizmos/Gizmos.html

PS:这篇文章相对简单,但楼主还是会细致的介绍一遍,因为这篇文章也是该系列的一部分,如果有了解过的朋友可以忽略该篇。


基础知识

这里写图片描述

由上图可知,Gizmos是用于在场景视图可视化调试或辅助设置用的。

需要注意的是所有Gizmos的绘制必须在脚本的OnDrawGizmos或OnDrawGizmosSelected里编写,因此我们的第一步便是在脚本中添加这两个函数。

码了个码:

在Scripts文件夹中创建一个C#脚本,命名为:“MyGizmos”,双击打开脚本,码入如下代码:

这里写图片描述

让我来测试一下:

这里写图片描述

感觉不是每一帧都在调用啊!做了个测试,如果你在Scene视图下不做任何错误(鼠标滑动也不能调用这两个函数),这两个函数都没有调用(看来官方文档说得不完全啊!!)。

不管了,总之大伙们知道是这么一回事儿就行了。

PS:必须于Scene视图下,于Game视图下不起作用。

接下来为“MyGizmos.cs”脚本添加如下代码:

这里写图片描述

好,现在回到场景视图下,如下图所示操作:

这里写图片描述

我们的线框球体便出来了,是不是很简单

代码分析:

这里写图片描述

该函数的第一个参数是:该线框球体的中心点位置,它是一个Vector3类型。 
第二个参数是:该线框球体的半径大小,它是一个float类型。

接下为我们的脚本添加如下代码:

这里写图片描述

好,现在回到场景视图下,如下图所示操作: 
这里写图片描述

我们的线条便出来了,是不是很简单啊。

代码分析:

这里写图片描述

上图已经解释得非常清楚,两个参数表示:从from起点到to位置绘制一条线。

因此第一个参数就是起点的位置,第二个参数就是指定的位置。 
这里写图片描述

上面代码的意思就是当前的位置朝 Z-轴 正方向根据 size 的值扩大。

接下来为我们的脚本“MyGizmos.cs”添加如下代码: 
这里写图片描述

好,现在回到场景视图下,如下图所示操作:

这里写图片描述

如上图所示,我们通过for循环调用Gizmos.绘制出了5个实心球体。

代码分析: 
这里写图片描述

由上图可知。第一个参数是绘制该球体的中心点的位置,第二个参数是该球体的半径。

因此在我们的代码中,利用for循环依据nodePoints参数创建多个球体,在上面的案例中克森创建了5个球体,设置它们的半径为0.5(大伙们也可以添加一个参数,进行动态操作半径值)。

由于绘制的东西都是一个色,不好辨别,大伙们可以添加如下代码:

这里写图片描述

添加后的效果:

这里写图片描述

我们的球体变成了蓝色,我们的线条编程了红色,未设置的线框球体还是默认的白色。

PS:Gizmos.color = Color.blue,如果后续没有重新指定绘制的颜色,则使用最后一次设置的颜色。

接下来为我们的脚本“MyGizmos.cs”添加如下代码:

这里写图片描述

回到场景中看看有什么效果:

这里写图片描述

好了,从上图中大家也知道我们添加的这段代码的意思了吧。很简单,就是将这些球体给连接起来。对了,连接线是绿色的,是后面设置的,大伙们也可以去设置设置,怎么设置就不用说了吧?

由于这段代码和上一篇的某段代码一样,就不分析了。

这里写图片描述

这里写图片描述

相信这个东西大伙们都知道怎么设置吧,不过为了该文章的完整性,我们还是来操作一遍:

这里写图片描述

好了,这个是手动设置的,那么代码中又是如何设置的呢?

请大家添加如下代码: 
这里写图片描述

回到场景中,看看有什么效果发生。

咦,没有什么事情发生啊!!! 
这里写图片描述

哦,原来是找不到图片资源。如上图所示,这就是为什么文章的开头让大伙们创建 Gizmos 文件夹的原因。现在将一张你喜欢的图标,命名为:“icon.jpg”放入Gizmos文件夹中。

PS:图片的命名一定要与代码中的第二个参数的名字一样。

好吧,至此该篇文章的内容就此结束,是不是很无聊啊。不过没办法,必须要系列完整嘛。

剩下的几个属性和方法大伙们可以自己去尝试一下。


文末:再次声明请尊重楼主版权: 
http://mp.weixin.qq.com/s/J9VaOcSROThSFzHRgjUkog

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity3D脚本18:可视化辅助设置类 Gizmos GizmosGizmos用于场景中给出一个可视化的调试或辅助设置。 所有的Gizmos绘制都必须在脚本的OnDrawGizmos或OnDrawGizmosSelected函数中完成。 OnDrawGizmos在每一帧都被调用。所有在OnDrawGizmos内部渲染的Gizmos都是可见的。 OnDrawGizmosSelected尽在脚本所附加的物体被选中时调用。 类变量 ◆ static var color : Color // 描述:设置下次绘制的Gizmos的颜色。 function OnDrawGizmosSelected() { Gizmos.color = Color.red; var direction = transform.TransformDirection(Vector3.forward) * 5; // 在物体的前方绘制一个5米长的线 Gizmos.DrawRay(transform.position, direction); } ◆ static var matrix : Matrix4x4 // 描述:设置用于渲染所有gizmos的矩阵。 类方法 ◆ Static function DrawCube(center:Vector3,size:Vector3):void // 描述:用center和size绘制一个立方体. Function OnDrawGizmosSelected(){ Gizmos.color=Color(1,0,0,5); // 在变换位置处绘制一个变透明的蓝色立方体 Gizmos.DrawCube(transform.position,Vector3(1,1,1)); } ◆ Static function DrawGUITexture(screenRect:Rect,texture:Texture,mat:Material=null):void // 描述:在屏幕坐标下绘制一个纹理。用于GUI背景。 ◆ Static function DrawGUITexture(screenRect:Rect,texture:Texture,leftBorder:int,rightBorder:int,topBorder:int,bottomBorder:int,mat:Material=null):void // 描述:在屏幕坐标下绘制一个纹理。用于GUI背景。 ◆ Static function Drawicon(center:Vector3,name:string):void // 描述:在世界位置center处绘制一个图标.这个图标被命名为name并放置在Assets/Gizmos文件夹或Unity.app/Resoutces文件夹.DrawIcon允许你在游戏中快速选择重要的物体。 在物体位置处绘制光源灯泡图标.因为我们在OnDrawGizmos函数内部调用它,在场景视图中 ,这个图标总是可点选的. function OnDrawGizmos(){ Gizmos DrawIcon(transform.position,”Light Gizmo.tiff”); } ◆ Static function DrawLine(from:Vector3,to:Vector3):void // 描述:绘制一条线从from到to. Var Larget:Transform; function OnDrawGizmosSelected(){ if(target != null) { Gizmos.color = Color.blue; //从transform到target绘制一条蓝色的线 Gizmos.DrawLine(transform.position,target.position); } } ◆ static function DrawRay(r:Ray):void static function DrawRay(from:Vector3,direction:Vector3):void // 描述:绘制一个射线从from开始到from + direction. ◆ function OnDrawGizmosSelected(){ Gizmos.color = Color.red; Direction = transform.TransformDirection(Vector3.forward)*5; Gizmos.DrawRay(transform.positon,direction); } ◆ Static function DrawSphere(center:Vector3,radius:flont):void // 描述:用center和randins绘制一个体. Function OnDrawGizmosSelected(){ Gizmos.color = Color.yellow; // 在变换位置处绘制一个黄色的Gizmos.DrawSphere(transtorm.position,1); } ◆ Static function DrawWireCube(center:Vector3, size: Vector3):void // 描述:用center和radius绘制一个线框立方体. Function OnDrawGizmosSelected(){ Gizmos.color = Color.yellow; //在变换位置处绘制一个黄色立方体 Gizmos.DrawWireCube (transtorm.position, Vector3(1,1,1)); } ◆ Static function DrawWireSphere(center:Vector3,radius:float):void // 描述:用center和radius绘制一个线框体. Var explosionRadius = 5.0; Function OnDrawGizmosSelected(){ Gizmos.color = Color.white; //选中的时候显示爆炸路劲 Gizmos.DrawSphere(transtorm.position,explpsionRadius); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值