Shader에서 표시하는 속성을 Toggle에서 On, Off [Unity]



속성



표시하고 싶은 프로퍼티에는 이름의 머리에 "_SubTex"라고 붙입니다.
    Properties
    {
        [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
...
        // SubTexture
        [Toggle(USE_SUB_TEXTURE)] _UseSubTexture ("Use SubTexture", Float) = 0
        _SubTex("Sub Texture", 2D) = "white"{}
        [Header(Blend)]
        [KeywordEnum(Add, Mix)]
         _SubTexBlend("Blend", Float) = 0
         _SubTexBlendIntensity("Intensity", Range(0,1)) = 1
    }


에디터


using System.Collections;
using System.Collections.Generic;
using UnityEditor;

public class TSpritesEffectEditor : ShaderGUI {

    public override void OnGUI (MaterialEditor materialEditor, MaterialProperty[] properties)
    {
        var subTexToggle = ShaderGUI.FindProperty ("_UseSubTexture", properties);
        TShaderGUIUtils.DrawProperties (subTexToggle, "_SubTex", materialEditor, properties);
    }
}

포인트


  • ShaderGUI 상속 (MaterialEditor가 아님)
  • Toggle 얻기
  • DrawProperties 호출

  • Util


    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEditor;
    using System.Linq;
    
    public static class TShaderGUIUtils {
        /// <summary>
        /// Toggleで表示するUIを切り替える
        /// </summary>
        public static void DrawProperties(MaterialProperty toggle, string keyword, MaterialEditor materialEditor, MaterialProperty[] properties){
    
            materialEditor.ShaderProperty (toggle, toggle.displayName);
    
            if (toggle.floatValue == 1f) {
                var subTexProps = properties
                    .Where (x => x.name.Contains (keyword))
                    .Where (x => x.name != toggle.name);
    
                foreach (var prop in subTexProps) {
                    materialEditor.ShaderProperty (prop, prop.displayName);
                }
            }
        }
    
    }
    
    

    프로퍼티로부터 대상의 UI를 검색해 표시하고 있습니다.

    참고



    MaterialEditor는 Old와 같습니다.

    좋은 웹페이지 즐겨찾기