[URP12] 직접 만든 RenderFeature 메뉴 이름 바꾸기

11625 단어 Unityurptech

컨디션


Universal RP 12.1.4

개시하다


상속ScriptableRendererFeature된 반을 만들면
Universal RenderData의 Add RenderFeature 메뉴에 후보로 나타납니다.
public class EdgeDetectFeature : ScriptableRendererFeature

메뉴 이름 변경


메뉴 이름을 변경하려면 DisallowMultipleRendererFeature를 사용합니다.
아래와 같이 사용한다.
[DisallowMultipleRendererFeature("MyFeature/Edge Detect")]
public class EdgeDetectFeature : ScriptableRendererFeature
{
My Feature라는 조합이 생성되어 Edge Detect로 표시됩니다.

메뉴에서 숨기기


abstract 클래스를 만들 때 메뉴에 표시하지 않으려는 경우도 있습니다.
public abstract class PostProcessFeature : ScriptableRendererFeature
{
/부터 custom Tile을 시작하여 메뉴에 표시할 수 없습니다.
[DisallowMultipleRendererFeature("/Post Process")]
public abstract class PostProcessFeature : ScriptableRendererFeature
{

주제 외: RenderFeature 메뉴 등록 처리


RenderFeature의 메뉴 등록은 다음과 같습니다.

메뉴에 등록


Packages/com.unity.render-pipelines.universal/Editor/ScriptableRendererDataEditor.cs
private void AddPassMenu()
{
    GenericMenu menu = new GenericMenu();
    TypeCache.TypeCollection types = TypeCache.GetTypesDerivedFrom<ScriptableRendererFeature>();
    foreach (Type type in types)
    {
        var data = target as ScriptableRendererData;
        if (data.DuplicateFeatureCheck(type))
        {
            continue;
        }

        string path = GetMenuNameFromType(type);
        menu.AddItem(new GUIContent(path), false, AddComponent, type.Name);
    }
    menu.ShowAsContext();
}

메뉴 이름 가져오기


GetCustom Title()에서 사용자 지정 메뉴를 가져오는 중입니다.
Packages/com.unity.render-pipelines.universal/Editor/ScriptableRendererDataEditor.cs
private string GetMenuNameFromType(Type type)
{
    string path;
    if (!GetCustomTitle(type, out path))
    {
        path = ObjectNames.NicifyVariableName(type.Name);
    }

    if (type.Namespace != null)
    {
        if (type.Namespace.Contains("Experimental"))
            path += " (Experimental)";
    }

    return path;
}
GetCustom Title()은 다음과 같이 구현됩니다.
이미 DisallowMultipleRendererFeaturecustomTitle를 얻었다.
Packages/com.unity.render-pipelines.universal/Editor/ScriptableRendererDataEditor.cs
private bool GetCustomTitle(Type type, out string title)
{
    var isSingleFeature = type.GetCustomAttribute<DisallowMultipleRendererFeature>();
    if (isSingleFeature != null)
    {
        title = isSingleFeature.customTitle;
        return title != null;
    }
    title = null;
    return false;
}

좋은 웹페이지 즐겨찾기