在Unity编辑器扩展中过滤对象字段

时间:2017-01-20 21:23:01

标签: unity3d

我希望使用Unity的ObjectField让用户搜索特定类型的对象。我知道构造函数允许使用<add key="ActiveDirectoryUser" value="user"/> <add key="ActiveDirectoryPass" value="pass"/> <membership defaultProvider="ADMembershipProvider"> <providers> <clear /> <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" connectionUsername="userfromabove" connectionPassword="passfromabove" attributeMapUsername="sAMAccountName" /> </providers> </membership> ,但这似乎不允许对自定义组件进行过滤。

基本上,我以前的编辑器脚本设置了对象,并在每个组件上放置了一个唯一的自定义脚本,但是我没有成功地使用ObjectField来搜索那些对象。如果我将对象字段中的typeOf(objectType)更改为我的组件,则它始终为空,尽管在我的项目中附加了许多附加该脚本的预制件。

有人有过这方面的成功吗?使用typeOf找到它们,但这会找到所有游戏对象。有没有办法限制这个?或者只保留它来查看特定的文件夹?

1 个答案:

答案 0 :(得分:0)

在字段本身停留为Object类型时添加过滤器有点棘手。这是一种方法。

使用ShowObjectPicker

尝试打开自定义ObjectPicker。为此,您必须隐藏默认的对象选择器,并使用设置的searchFilter调用它。这是很多工作。

设置searchFilter

https://docs.unity3d.com/ScriptReference/EditorGUIUtility.ShowObjectPicker.html与searchFilter配合使用,该条件与您添加到要在ObjectPicker中显示的每个对象的组件相匹配。例如"t:objectType"

https://answers.unity.com/questions/554012/how-do-i-use-editorguiutilityshowobjectpicker-c.html

上有一些使用ShowObjectPicker的很好的信息。

隐藏默认对象选择器

这是一则帖子,可以隐藏默认的对象选择器Is there any way to hide the "Object picker" of an EditorGUILayout.ObjectField in Unity Isnpector?

显示选择器

您需要创建自己的Editor GUI.Button,以使用自定义searchFilter调出ShowObjectPicker。

资产searchFilter

作为一个旁注,要对文件资产执行相同的操作,请使用“ l:labelName” fileFilter而不是“ t:objectType”。您可以使用Unity编辑器UI设置标签,如下所示:enter image description here

或带有“ ref:relative / path / from / assets / to / material / material.mat”