using UnityEditor引用注意事项

本文转载自http://blog.csdn.net/czlilove/article/details/19979725

在运行时脚本中使用UnityEditor命名空间,假如该脚本被挂在场景中的物体上,那么:

可以这样做,在Unity编辑器中运行时也会正常运行,不会报错。但是当我们打包时会出现以下错误(不管该脚本有没有被挂在任何一个物体上,只要不是在Editor文件夹下,都会报错):

The type or namespace name`UnityEditor’ could not be found. Areyoumissing a using directiveor an assembly reference?

为什么会这样呢?

因为Unity在发布游戏的时候不会使用UnityEditor命名空间的程序集UnityEditor.dll,自然就不能识别UnityEditor命名空间了。

所以说,UnityEditor命名空间及其中的编辑器类只能在编辑器中使用。

但上面的问题该如何解决呢?

原则上来说,运行时脚本和编辑器脚本应该分开放,编辑器脚本都放在“Editor”文件夹下面,这样打包时自然不会报错。

但我现在又希望在运行时脚本中使用UnityEditor,那么可以使用条件编译

对使用UnityEditor命名空间的语句或声明使用

#if UNITY_EDITOR

…….

#endif

这样UnityEditor命名空间及其类就只能在Unity编辑器环境下起作用了


Unity中各文件夹的编译顺序(转载)

对于每一种脚本语言,根据脚本放置的位置(其实也部分根据了脚本的作用,比如编辑器扩展脚本,就必须放在Editor文件夹下),Unity3D会生成4种后缀的工程。其中的firstPass就表示先编译,Editor表示放在Editor文件夹下的脚本。

下面以C#脚本为例。如果工程中只有C#脚本,不考虑为VS和MonoDevelop各自生成工程的差异性,我们可以得到4个工程文件:

Assembly-CSharp-firstpass-vs.csproj

Assembly-CSharp-Editor-firstpass-vs.csproj

Assembly-CSharp-vs.csproj

Assembly-CSharp-Editor-vs.csproj

(1) 所有在Standard Assets,Pro Standard Assets或者 Plugins文件夹中的脚本会产生一个Assembly-CSharp-firstpass-vs.csproj文件,并且先编译;

(2) 所有在Standard Assets/Editor, Pro Standard Assets/Editor 或这Plugins/Editor文件夹中的脚本产生Assembly-CSharp-Editor-firstpass-vs.csproj工程,接着编译;

(3) 所有在Assets/Editor外面的, 并且不在(1),(2)中的脚本文件(一般这些脚本就是我们自己写的非编辑器扩展的脚本)会产生Assembly-CSharp-vs.csproj工程,被编译;

(4) 所以在Assets/Editor中的脚本产生一个Assembly-CSharp-Editor-vs.csproj工程,被编译。

之所有这样建立工程并按此顺序编译,也是因为DLL间存在的依赖关系所决定的。


另外,我们在IDE中也可以看到对应名称的assembly,也就是dll


总结来说就是,特殊文件夹(Standard Assets。。)比一般文件夹优先编译(firstpass),run-time script比editor script优先编译。


UnityEditor.Draw函数用于在Unity编辑器中绘制GUI界面元素。这个函数可以用来创建自定义的编辑器界面,以便用户能够在编辑器中进行一些特定的操作或者修改变量的值。 使用Editor.Draw函数时,我们可以在OnGUI函数内调用它来绘制所需的GUI元素。我们可以使用不同的GUI控件,如Label、Button、TextField等来创建自定义的编辑器界面。 例如,我们可以在一个自定义的编辑器脚本中使用Editor.Draw函数来创建一个按钮,当用户点击按钮时,在控制台输出一条消息。代码如下: ``` using UnityEditor; using UnityEngine; [CustomEditor(typeof(MyScript))] public class MyScriptEditor : Editor { public override void OnInspectorGUI() { DrawDefaultInspector(); if (GUILayout.Button("Click Me")) { Debug.Log("Button Clicked!"); } } } ``` 在上述例子中,我们继承了Editor类,并重写了OnInspectorGUI函数。在这个函数内,我们首先调用了DrawDefaultInspector函数,这样就能够显示默认的序列化属性。接下来,我们创建了一个按钮,并在按钮被点击时将一条消息输出到控制台。 除了上述的示例,我们还可以使用Editor.Draw函数创建更复杂和多样化的编辑器界面,以满足自己的需求。我们可以使用不同的布局和样式来呈现我们的自定义界面,并与用户进行交互。 总而言之,UnityEditor.Draw函数是用于在Unity编辑器中绘制自定义GUI界面的函数,它使开发者能够创建交互式和个性化的编辑器界面,以优化编辑器的工作流程和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值