Scene视图是编辑游戏模型的地方,其实它还可以进行编辑。如下图所示,我给Scene视图做了简单的编辑。
Scene视图的拓展是基于对象的,意思就是你必须在Hierarchy视图中选择一个对象才行。Hierarchy视图中选择不同的对象可以有不同的Scene视图。图中我们创建了一个立方体对象,接着给它绑定一个脚本。
Test.cs 是个空空的脚本。
1 2 3 4 5 6 7 8 9 |
using UnityEngine; using System.Collections; public class Test : MonoBehaviour { } |
然后在Project视图中创建一个Editor文件夹,把MyEditor.cs放进去。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
using UnityEditor; using UnityEngine; //自定义Tset脚本 [CustomEditor(typeof(Test))] //请继承Editor public class MyEditor : Editor { void OnSceneGUI() { //得到test脚本的对象 Test test = (Test) target; //绘制文本框 Handles.Label(test.transform.position + Vector3.up*2, test.transform.name +" : "+ test.transform.position.ToString() ); //开始绘制GUI Handles.BeginGUI(); //规定GUI显示区域 GUILayout.BeginArea(new Rect(100, 100, 100, 100)); //GUI绘制一个按钮 if(GUILayout.Button("这是一个按钮!")) { Debug.Log("test"); } //GUI绘制文本框 GUILayout.Label("我在编辑Scene视图"); GUILayout.EndArea(); Handles.EndGUI(); } } |
此时,你可以把之前的Test.cs脚本绑定在任意对象身上,然后在Hierarchy视图中点击对象即可在Scene视图中看到编辑的视图啦。
最后我在说一下,在OnSceneGUI()中只能通过Handles来绘制新视图,如果你想引入GUI的元素哪么就需要使用BeginGUI()和EndGUI()组合的使用。 Handles还提供了很多编辑视图的方式,详细信息大家请看API http://docs.unity3d.com/Documentation/ScriptReference/Handles.ArrowCap.html 这里我就不在赘述。
本文下载地址:http://vdisk.weibo.com/s/AB2i-
今天我同事问我,上面的方法,必须鼠标选中才可以显示,能不能不选中也能显示?
http://answers.unity3d.com/questions/44771/labeling-objects-in-the-scene-editor-view.html
把下面的代码放在Editor目录下即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using UnityEngine; using System.Collections; using UnityEditor; public class NewBehaviourScript : Editor { [DrawGizmo(GizmoType.SelectedOrChild | GizmoType.NotSelected)] static void DrawGameObjectName(Transform transform, GizmoType gizmoType) { Handles.Label(transform.position, transform.gameObject.name); } } |
- 本文固定链接: https://www.xuanyusong.com/archives/2303
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!
朕已阅。。哈哈。开个玩笑,多谢分享
如果我想要在scene视图下,通过点击鼠标做射线检测后,在射线与固定层的碰撞点生成一个cube,行吗?
可以, 只要有collider就行
非常感谢,百忙之中给予回复!我想再问下,我要实现scene视图下的鼠标交互效果,怎么移植到game视图下?我暂时的想法是自己新建一个空节点,然后添加相机组件,然后添加脚本操控相机。可是对于旋转这块不是很懂,想问问您,有没有什么例子可以借鉴下的呢?
试着结合OnSceneGUI和OnInspectorGUI来画一个矩形,结果在inspector里拖动坐标等等变量的大小时,Scene里的矩形不会像自带的transform那样,对元件实时变动,而是要等放开鼠标再等一会儿,才会直接跳转到新的变量制定的矩形上。这样对编辑好像不太方便,有办法解决吗。
尝试去掉OnIspectorGUI就会实时刷新了。 看来是传递到原本的脚本需要松手 而Scene自己是实时刷新的
unity有自己的api handler 就能画矩形啊。。
我只是举个例子…拿矩形来做个实验。 其实我是在OnSceneGUI里用handles画的矩形(只是想在编辑模式下看到),是连起来的四个点,在inspector的拓展编辑器里改变点的位置,结果发现用拓展的就要等一会儿 场景里的形状才会改变…。
但是debug.log看的时候 即使是拖着鼠标没放开 值也已经改变了。 疯了,我要好好研究一下什么毛病
如果要是可以交互的,必须在OnSceneGUI里调用好像,MOMO有什么好方法解决不。如Button,如果不在OnSceneGUI里就点击不了
你好,请问下,怎么实现编辑器状态下播放动画呢,在Editor代码里直接调用play不起作用
我在editor下做过时间线的功能, 用的是 SampleAnimation 然后在play。
谢谢momo,刚才试了一下,果然可以啊
不错,继续课程!能继续深入按照一个案例比如制作一个效果编辑器demo这样探讨最好,后面希望课程继续更新呀松神!
如果不用对象能否扩展Scene视图啊
不行。。。
好强大的!
momo你好,我是刚接触unity的学生。好多都是跟着你的教程做的,但是我在用NGUI的时候有一个问题:创建UI(2D),然后在场景中就显示出照相机的图标(我已经把main camera删除了),并且运行的时候这个图标也存在。无论我重新导入新的NGUI插件还是重装unity(4.2)都解决不了问题。之前是没有这些图标的,现在只要是2D的NGUI都会显示这个照相机图标,很是苦恼。但是把我的东西放在别人的电脑上就没事,求指导,这个问题困扰好久了。谢谢!!!
UI里面不是有一个相机吗?