博客
关于我
九、编辑器开发之Gizmos
阅读量:606 次
发布时间:2019-03-12

本文共 2953 字,大约阅读时间需要 9 分钟。

1.OnDrawGizmos和OnDrawGizmosSelcted方法

Gizmos绘制需要Monobehaviour生命周期中的OnDrawGizmos函数,它在生命周期中的位置:

​using UnityEngine;public class Test : MonoBehaviour{    private void OnDrawGizmos() { }}

虽然函数代码块中没有任何实现,但是我们已经可以在Gizmos下拉框中看到Test选项:

下面我们来实现一些绘制:

using UnityEngine;public class Test : MonoBehaviour{    private void OnDrawGizmos()    {        Gizmos.color = Color.white;        Gizmos.DrawCube(transform.position, Vector3.one);    }}

在自身位置绘制了一个大小为1的立方体,如图所示:

我们增加一个新的方法,OnDrawGizmosSelected. 只有在我们选中该物体时,该方法才起作用。

using UnityEngine;public class Test : MonoBehaviour{    private void OnDrawGizmos()    {        Gizmos.color = Color.white;        Gizmos.DrawCube(transform.position, Vector3.one);    }    private void OnDrawGizmosSelected()    {        Gizmos.color = Color.red;        Gizmos.DrawWireCube(transform.position, Vector3.one);    }}

        

2.DrawGizmo特性

 除了在Monobehaviour中实现外,还可以使用DrawGizmot特性:(脚本需要放在Editor文件夹中)

using UnityEngine;using UnityEditor;public class TestEditor : Editor{    [DrawGizmo(GizmoType.NotInSelectionHierarchy        | GizmoType.InSelectionHierarchy        | GizmoType.Selected        | GizmoType.Active        | GizmoType.Pickable)]    private static void TestGizmosDraw(Test test, GizmoType gizmoType)    {        Gizmos.color = Color.white;        Gizmos.DrawCube(test.transform.position, Vector3.one);    }    [DrawGizmo(GizmoType.NotInSelectionHierarchy        | GizmoType.InSelectionHierarchy        | GizmoType.Selected        | GizmoType.Active        | GizmoType.Pickable)]    private static void TestGizmosDrawSelected(Test test, GizmoType gizmoType)    {        Gizmos.color = Color.red;        Gizmos.DrawWireCube(test.transform.position, Vector3.one);    }}

NotInSelectionHierarchy:即没有被选中也没有父物体被选中

InSelectHierarchy:被选中或者有子物体被选中

Selected:被选中

Active:物体没有隐藏

Pickable:作者还不知道啥作用

3.Gizmos类

DrawCube:

private void OnDrawGizmos(){    //param1 中心点    //param2 大小    Gizmos.DrawCube(transform.position, Vector3.one);}

DrawWireCube:

private void OnDrawGizmos(){    //param1 中心点    //param2 大小    Gizmos.DrawWireCube(transform.position, Vector3.one);}

DrawSphere:

private void OnDrawGizmos(){    //param1 中心点    //param2 半径    Gizmos.DrawSphere(transform.position, 1f);}

DrawWireSphere:

private void OnDrawGizmos(){    //param1 中心点    //param2 半径    Gizmos.DrawWireSphere(transform.position, 1f);}

DrawRay:

private void OnDrawGizmos(){    //param1 起点    //param2 方向    Gizmos.DrawRay(transform.position, transform.up);}

DrawLine:

private void OnDrawGizmos(){    //param1 起点    //param2 终点    Gizmos.DrawLine(transform.position, transform.position + transform.forward);}

DrawIcon:

private void OnDrawGizmos(){    //param1 中心点    //param2 icon路径 需要放置在Asset/Gizmos/路径下    Gizmos.DrawIcon(transform.position, "icon.png");}

  

DrawFrustrum:

private void OnDrawGizmos(){    //param1 中心点    //param2 fov    //param3 maxRange    //param4 minRange    //param5 aspect    Gizmos.DrawFrustum(transform.position, 60f, 3f, 1f, 1.3f);}

欢迎关注公众号 “当代野生程序猿”

转载地址:http://dbwaz.baihongyu.com/

你可能感兴趣的文章
Nginx SSL私有证书自签,且反代80端口
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
nginx 代理解决跨域
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理解决跨域问题
查看>>
Nginx 反向代理配置去除前缀
查看>>
nginx 后端获取真实ip
查看>>
Nginx 多端口配置和访问异常问题的排查与优化
查看>>
Nginx 如何代理转发传递真实 ip 地址?
查看>>
Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
查看>>
Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
查看>>
Nginx 学习(一):Nginx 下载和启动
查看>>
nginx 常用指令配置总结
查看>>
Nginx 常用配置清单
查看>>
nginx 常用配置记录
查看>>
nginx 开启ssl模块 [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx
查看>>
Nginx 我们必须知道的那些事
查看>>