Asset Selector Attribute 特性用于:在对象字段旁边添加一个小按钮,该按钮将向用户显示资产下拉列表,以便从属性中进行选择。
![7643202-3da23b0dfa8f4f41.gif](https://i-blog.csdnimg.cn/blog_migrate/225b7eec2dc90080612d23870e4d950e.gif)
【AssetSelector】添加到对应的字段上即可
![7643202-2db4e6157d117b0a.gif](https://i-blog.csdnimg.cn/blog_migrate/f0208751092bf5de2a5709c99aff0d62.gif)
[AssetSelector]
public Material AnyAllMaterials;
[AssetSelector]
public Material[] ListOfAllMaterials;
【FlattenTreeView】是否开启树状图
![7643202-5b2225b53db85411.gif](https://i-blog.csdnimg.cn/blog_migrate/9817fdc4f76147e726debbf6c5972b47.gif)
[PropertySpace(40)]
[AssetSelector(FlattenTreeView = false)]//默认树状显示
public PhysicMaterial TreeView;
[AssetSelector(FlattenTreeView = true)]//非默认树状显示
public PhysicMaterial NoTreeView;
【Paths】单路径或多路径查找
![7643202-f1f1acb2b7c4a381.gif](https://i-blog.csdnimg.cn/blog_migrate/587e4faf1cc3fa1d75cff704e63da6d4.gif)
[PropertySpace(40)]
[AssetSelector(Paths = "Assets/TutorialAsset/ExampleScriptableObjects")]
public ScriptableObject ScriptableObjectsFromFolder;
[AssetSelector(Paths = "Assets/TutorialAsset/ExampleScriptableObjects|Assets/Plugins/Sirenix/Odin Inspector")]
public ScriptableObject ScriptableObjectsFromMultipleFolders;
【Filter】自定义过滤条件
![7643202-4b3a60e9b2e04b33.gif](https://i-blog.csdnimg.cn/blog_migrate/fcffceaae0096498236c3e5266d5b474.gif)
[PropertySpace(40)]
[AssetSelector(Filter = "New Animation t:AnimationClip l:自定义标签")]
public UnityEngine.Object AssetDatabaseSearchFilters;
【DisableListAddButtonBehaviour】开启后加号不会出现树形下拉条以弹窗形式出现
![7643202-8574301340851ac9.gif](https://i-blog.csdnimg.cn/blog_migrate/b1cfc9be8056f2ad867b81fab2210c86.gif)
[Title("辅助性功能")]
[AssetSelector(DisableListAddButtonBehaviour = true)] //开启后加号不会出现树形下拉条以弹窗形式出现
public List<GameObject> DisableListAddButtonBehaviour;
【DrawDropdownForListElements】控制已经添加的Item是否含有下拉列表
![7643202-fa6491d70b270787.gif](https://i-blog.csdnimg.cn/blog_migrate/48b5fcf13db07a9134b1dbc0d0c07859.gif)
[PropertySpace(40)]
[AssetSelector(DrawDropdownForListElements = false)]
public List<GameObject> DisableListElementBehaviour_False;
[AssetSelector(DrawDropdownForListElements = true)]
public List<GameObject> DisableListElementBehaviour_True;
【ExcludeExistingValuesInList】去除已经含有的Item
![7643202-c7c40a1b9bb92fb5.gif](https://i-blog.csdnimg.cn/blog_migrate/5d6a8a2890587e5dd2bb2007c4faf88f.gif)
[PropertySpace(40)]
[AssetSelector(ExcludeExistingValuesInList = true)]
public List<GameObject> ExcludeExistingValuesInList_True;
[AssetSelector(ExcludeExistingValuesInList = false)]
public List<GameObject> ExcludeExistingValuesInList_False;
【IsUniqueList】开启列表勾选模式(这个关键字在Odin的很多特性中都有)
![7643202-58aabc50b4591a5d.gif](https://i-blog.csdnimg.cn/blog_migrate/f2047aa78d37cf9f0f2bead60cb35047.gif)
[PropertySpace(40)]
[AssetSelector(IsUniqueList = true)]
public List<GameObject> DisableUniqueListBehaviour_True;
[AssetSelector(IsUniqueList = false)]
public List<GameObject> DisableUniqueListBehaviour_False;
【ExpandAllMenuItems】下拉列表是否强制展开
![7643202-b026077a98ad9798.gif](https://i-blog.csdnimg.cn/blog_migrate/740fc6ba97b27abdf208142a29c2d854.gif)
[PropertySpace(40)]
[AssetSelector(ExpandAllMenuItems = true)]//下拉条是否展开
public List<GameObject> ExpandAllMenuItems_True;
[AssetSelector(ExpandAllMenuItems = false)]
public List<GameObject> ExpandAllMenuItems_False;
【DropdownTitle】下拉列表标题
![7643202-4f9449858b072422.gif](https://i-blog.csdnimg.cn/blog_migrate/ec34da9c62f97380232bbc3b0bc9a2ae.gif)
[PropertySpace(40)]
[AssetSelector(DropdownTitle = "最定义下拉列表标题")]
public List<GameObject> CustomDropdownTitle;
完整示例代码
using UnityEngine;
using Sirenix.OdinInspector;
using System;
using System.Collections.Generic;
public class AssetSelectorAttributeExample : MonoBehaviour
{
[AssetSelector]
public Material AnyAllMaterials;
[AssetSelector]
public Material[] ListOfAllMaterials;
[PropertySpace(40)]
[AssetSelector(FlattenTreeView = false)]//默认树状显示
public PhysicMaterial TreeView;
[AssetSelector(FlattenTreeView = true)]//非默认树状显示
public PhysicMaterial NoTreeView;
[PropertySpace(40)]
[AssetSelector(Paths = "Assets/TutorialAsset/ExampleScriptableObjects")]
public ScriptableObject ScriptableObjectsFromFolder;
[AssetSelector(Paths = "Assets/TutorialAsset/ExampleScriptableObjects|Assets/Plugins/Sirenix/Odin Inspector")]
public ScriptableObject ScriptableObjectsFromMultipleFolders;
[PropertySpace(40)]
[AssetSelector(Filter = "New Animation t:AnimationClip l:自定义标签")]
public UnityEngine.Object AssetDatabaseSearchFilters;
[Title("辅助性功能")]
[AssetSelector(DisableListAddButtonBehaviour = true)] //开启后加号不会出现树形下拉条以弹窗形式出现
public List<GameObject> DisableListAddButtonBehaviour;
[PropertySpace(40)]
[AssetSelector(DrawDropdownForListElements = false)]
public List<GameObject> DisableListElementBehaviour_False;
[AssetSelector(DrawDropdownForListElements = true)]
public List<GameObject> DisableListElementBehaviour_True;
[PropertySpace(40)]
[AssetSelector(ExcludeExistingValuesInList = true)]
public List<GameObject> ExcludeExistingValuesInList_True;
[AssetSelector(ExcludeExistingValuesInList = false)]
public List<GameObject> ExcludeExistingValuesInList_False;
[PropertySpace(40)]
[AssetSelector(IsUniqueList = true)]
public List<GameObject> DisableUniqueListBehaviour_True;
[AssetSelector(IsUniqueList = false)]
public List<GameObject> DisableUniqueListBehaviour_False;
[PropertySpace(40)]
[AssetSelector(ExpandAllMenuItems = true)]//下拉条是否展开
public List<GameObject> ExpandAllMenuItems_True;
[AssetSelector(ExpandAllMenuItems = false)]
public List<GameObject> ExpandAllMenuItems_False;
[PropertySpace(40)]
[AssetSelector(DropdownTitle = "最定义下拉列表标题")]
public List<GameObject> CustomDropdownTitle;
}