版本: Unity 6 (6000.0)
语言英语
  • C#

IQueryEngineFilter.metaInfo

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提供的每个建议更改,并在必要时进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

public IReadOnlyDictionary<string,string> metaInfo;

描述

特定于过滤器的附加信息。

您可以随时在过滤器上添加或删除任何附加信息。该信息不会被 QueryEngine 使用,也不会以任何方式影响过滤。用于提供一种方式来存储与过滤器相关的相关信息,以便您稍后获取。

using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditor.Search;
using UnityEngine;

static class Example_IQueryEngineFilter_AddMetaInfo
{
    static List<MyObjectType> s_Data;

    static QueryEngine<MyObjectType> SetupQueryEngine()
    {
        // Set up the query engine
        var queryEngine = new QueryEngine<MyObjectType>();

        // Add a filter for MyObjectType.id that supports all operators
        queryEngine.AddFilter("id", myObj => myObj.id);

        // Add a description to the filter
        var descriptionKey = "desc";
        var descriptionValue = "This filters the objects based on their id.";
        var exampleKey = "example";
        var exampleValue = "id>10 or id=2";
        queryEngine.TryGetFilter("id", out var filter);
        filter.AddOrUpdateMetaInfo(descriptionKey, descriptionValue)
            .AddOrUpdateMetaInfo(exampleKey, exampleValue);

        return queryEngine;
    }

    [MenuItem("Examples/IQueryEngineFilter/AddMetaInfo")]
    public static void RunExample()
    {
        var queryEngine = SetupQueryEngine();

        var descriptionKey = "desc";
        var allFilters = queryEngine.GetAllFilters();
        var filtersWithDescription = allFilters.Where(f => f.metaInfo.ContainsKey(descriptionKey));

        queryEngine.TryGetFilter("id", out var filter);
        Debug.Assert(filter != null, "Filter \"id\" should not be null.");
        Debug.Assert(filtersWithDescription.Contains(filter), "Filter \"id\" should have a description.");

        // For the sake of the documentation, redefine a new description key.
        var descriptionMetaInfoKey = "desc";
        filter.RemoveMetaInfo(descriptionMetaInfoKey);

        filtersWithDescription = allFilters.Where(f => f.metaInfo.ContainsKey(descriptionMetaInfoKey));
        Debug.Assert(!filtersWithDescription.Contains(filter), "Filter \"id\" should not have a description.");

        filter.ClearMetaInfo();
        var filtersWithMetaInfo = queryEngine.GetAllFilters().Where(f => f.metaInfo.Count > 0);
        Debug.Assert(!filtersWithMetaInfo.Contains(filter), "Filter \"id\" should not have any meta info.");
    }

    /// <summary>
    /// Custom type. This is the type of objects that will be searched by the QueryEngine.
    /// </summary>
    class MyObjectType
    {
        public int id { get; set; }
        public string name { get; set; }
        public Vector2 position { get; set; }
        public bool active { get; set; }

        public MyObjectType()
        {
            id = 0;
            name = "";
            position = Vector2.zero;
            active = false;
        }

        public override string ToString()
        {
            return $"({id}, {name}, ({position.x}, {position.y}), {active})";
        }
    }
}