Unity Editor 基础篇(四):Handles
本文参自:
克森http://mp.weixin.qq.com/s/qxsKDPjJS30S9OXeQ8WKTw
本文为本人学习上链接的笔记微有改动,请点击以上链接查看原文,尊重楼主知识产权。
Unity Editor:Handles
最终效果:
准备:
Scripts文件夹中创建C#脚本”MyHandles”,在Editor文件夹中创建C#脚本”HandleInspector”,将下小图标保存到Img文件夹中。
关于:Handles控制柄类
API传送门:
http://www.ceeger.com/Script/Handles/Handles.html
绘制半径操作柄:
首先打开我们的MyHandles.cs脚本,为其添加一个变量:
public float areaRadius; //半径
然后打开HandlesInspector.cs脚本添加:
using UnityEngine;
using System.Collections;
using UnityEditor;[CustomEditor(typeof(MyHandles))]
public class HandlesInspector:Editor
{MyHandles myHandles;void OnEnable(){myHandles=(MyHandles)target;}public override void OnInspectorGUI(){DrawDefaultInspector();}private void OnSceneGUI(){//第一个参数为在场景中显示的位置(以物体的中心位置为基准)//第二个参数为显示的名字//用于在场景中显示设置的名字Handles.Label(myHandles.transform.position+new Vector3(0,1,0),"MyHandles");//第一个参数为该旋转操作柄的初始旋转角度//第二个参数为操作柄显示的位置(以物体的旋转位置为基准)//第三个参数为设置操作柄的半径//用于在场景中显示半径操作柄myHandles.areaRadius = Handles.RadiusHandle(Quaternion.identity,myHandles.transform.position,myHandles.areaRadius);}
}
将这两个脚本保存,回到Unity中创建一个空物体,并为其添加 MyHandles.cs 脚本:
此时我们观察场景,除了场景中出了 “MyHandles” 几个字外,似乎啥事儿也没发生,不急,让我们来调整调整 Area Radius 参数的值,便能看到如下效果:
代码很简单,注释也给大家弄上了,相信大家都能看懂吧。还是不太懂的可以多看看API:
作用:这个东西是不是有点类型于碰撞体的那个框框啊,这玩意多用于制作AI,用于判断和指定UI影响范围用的。
绘制缩放操作柄:
打开 MyHandles.cs 脚本,添加如下变量:
public float size;//大小
然后为 HandlesInspector.cs 脚本添加如下代码:
参看API:
作用:多用于绘制一些自定义的操作,比如Unity的粒子系统就用到了好多自定义的操作柄,比如粒子系统的Shape参数就用到了该函数的第五个参数来绘制:
绘制位置操作柄:
打开 MyHandles.cs 脚本,添加如下变量:
然后为 HandlesInspector.cs 脚本添加如下代码:
效果:
参见API:
作用:这个可以用在AI上面,然后为每一个AI添加一个位置操作柄,这样好像看上去方便不少吧?
绘制旋转操作柄:
打开 MyHandles.cs 脚本,添加如下变量:
然后为 HandlesInspector.cs 脚本添加如下代码:
效果:
PS:nodePointsRotation的个数要与nodePoints的个数要相等或者小于nodePoints。
做一个操作,看看大伙们能不能看懂我想表达的意思:
是不是感觉像是静止一般,一动不动的呢?下面修改一下代码:
此时,你会看到如下的错误,不要慌张,我们只有越到错误,解决多了,那以后越到错误就不是什么可怕的事情了:
相信很多人都知道这个是什么错误吧,那是因为由三维向量转为四元素W的值不能为0,因此我们只要把W设置为1即可,如下所示:
这个操作呢,主要是帮大家找出一些开发过程中容易遗漏的错误,还有一个目的就是让坐标轴跟随着旋转而旋转(因为第二个参数是位置操作柄的旋转方向嘛,我把它改为了我们设置好的旋转方向,因此位置操作柄便能跟随着我们的旋转而旋转了)。
连接操作柄:
为 HandlesInspector.cs 脚本添加如下代码:
此时回到场景中便能看到如下所示:
这段代码呢,也很简单,可能有点不明白的也就是 Mathf.Repeat()函数,这个简单,看下图便能明白:
其实这样做的原因大伙们都知道,就是为了防止下标越界。
打开和关闭操作柄:
打开 MyHandles.cs 脚本,添加如下变量:
然后为 HandlesInspector.cs 脚本添加如下代码:
就是当showNodeHandles为false时便不执行 if 代码块里的代码,因此便无法绘制出位置操作柄和旋转操作柄咯,最终的效果如下:
绘制场景GUI:
为 HandlesInspector.cs 脚本添加如下代码:
回到场景便能看到如下图所示的界面:
这段代码呢,其实也很简单,不过是运用了两对函数。
第一对为:Handles.BeginGUI() 和 Handles.EndGUI()。这对函数表名你想要在Scene视图下绘制东西。
第二对为:GUILayout.BeginHorizontal() 和 GUILayout.EndHorizontal()。这对函数表明你想要以水平方向绘制东西。相信第二对函数大伙们都不陌生吧,记得在《Unity Editor 基础篇(三):Editor Window》中有介绍过。
里面的逻辑代码也很简单,那就是绘制一个按钮,当我点击时让 MyHandles.shoNodeHandles的值取反(也就是原来为true,点击后取反,便为false)。
补充:在第一对函数里得操作和自定义窗口里得操作几乎相同,大家可以参考下面得API去尝试尝试:
http://www.ceeger.com/Script/GUILayout/GUILayout.html
这个插件就用到了今天我们学到的东西制作而成的:
文末:再次声明请尊重楼主版权:
克森http://mp.weixin.qq.com/s/qxsKDPjJS30S9OXeQ8WKTw
Unity Editor 基础篇(四):Handles相关推荐
- Unity编辑器Unity Editor基础(一)
Unity编辑器Unity Editor基础(一) 关于 Unity 内置属性可以从到官方文档中查询,本篇文章只介绍一些常用的内置属性,如下图所示: 接下来进行项目设置,创 ...
- 前端开发之JavaScript基础篇四
主要内容: 1.定时器 2.正则表达式入门 3.元字符 4.正则表达式实战运用 一.定时器 javaScript里主要使用两种定时器,分别是:setInterval()和setTimeout(). 1 ...
- 转载:谢谢原作者:块设备驱动实战基础篇四 (逐渐成型,加入ioctl通信机制)
1.6介绍一种内核与用户空间通信的方法-misc设备ioctl机制 块设备驱动开发中往往需要配合用户态的管理程序工具,管理我们的块设备,此时我们需要涉及用户空间程序与块设备通信的方法,ioctl机制就 ...
- kafka基础篇(四)——kafka消费者客户端
一.入门程序 先上代码,从代码入手,讲解kafka消费者客户端的细节. public class HelloKafkaConsumer {public static void main(String[ ...
- java程序试岗内容_java程序员修炼之路基础篇四:继承
上一篇文章我跟大家聊了一下"封装",今天我们聊一下同样作为java语言三大特征之一的"继承". 简单说"继承"就是从一个已知类派生出新类的过 ...
- c if语句多个条件判断顺序_Java中的流程控制语句 (基础篇四)
流程控制就是对事物次序的布置和安排,在程序中就是对代码执行次序的安排和控制 程序中的流程控制主要有三种:顺序流程.选择流程.循环流程. 顺序流程:比如打印输出的代码按照指定的顺序结构依次排序,打印的结 ...
- java中的四个跳转语句_Java中的流程控制语句 (基础篇四)
流程控制就是对事物次序的布置和安排,在程序中就是对代码执行次序的安排和控制 程序中的流程控制主要有三种:顺序流程.选择流程.循环流程. 顺序流程:比如打印输出的代码按照指定的顺序结构依次排序,打印的结 ...
- 测试需要了解的技术之基础篇四__UI自动化测试体系
UI自动化测试体系 1.Andriod 自动化测试:Appium 环境安装与架构介绍.Appium Desktop用例录制.Appium测试用例流程.元素定位方法 IA/AID/XPATH/UISel ...
- oracle职工工资数据表四表联动,oracle 学习之基础篇(四):多表查询
员工表emp和部门表dept的笛卡尔集(笛卡尔集表=列数之和,行数之积,笛卡尔集表内中有些数据是不符合要求的)select emp.ename,dept.dname from emp,dept; 使用 ...
最新文章
- 随机森林 java_机器学习weka,java api调用随机森林及保存模型
- (4)关于Alpha通道问题
- 皮一皮:同一样物件,不一样的时间...
- 自建Hive数据仓库跨版本迁移到阿里云Databricks数据洞察
- 智能情绪分析技术_简单分析人工智能的表现在计算机网络应用技术中的优势
- 数组长度属性以及JavaScript中的示例
- ai直线怎么变折线_如何在 AI中设计可编辑折线图
- 抖音回应李小璐PGone视频曝光:草稿视频不会上传到后台
- 13.深入分布式缓存:从原理到实践 --- 缓存在社交网络Feed系统中的架构实践
- JedisConnectionException: Failed connecting to host localhost:6379
- html网页设计课程心得,网页设计教学心得体会
- go kegg_GO分析和KEGG分析都是啥?
- LA 3713 Astronauts
- 学之思考试系统安装详细教程
- AntV-G6实现微服务拓扑图
- 数据结构与算法——时间与空间复杂度
- undefined reference to 'function'及解决办法
- 基于Python的超市管理系统毕业设计源码111042
- 华雨欢:行情开启上行走势,区间突破指日可待
- 人生观、价值观、世界观