123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- using UnityEngine;
- using UnityEditor;
- using System.Collections.Generic;
- //-----------------------------------------------------------------------------
- // Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace RenderHeads.Media.AVProVideo.Editor
- {
- /// <summary>
- /// Editor for the ApplyToMaterial component
- /// </summary>
- [CanEditMultipleObjects]
- [CustomEditor(typeof(ApplyToMaterial))]
- public class ApplyToMaterialEditor : UnityEditor.Editor
- {
- private static readonly GUIContent _guiTextTextureProperty = new GUIContent("Texture Property");
- private SerializedProperty _propTextureOffset;
- private SerializedProperty _propTextureScale;
- private SerializedProperty _propMediaPlayer;
- private SerializedProperty _propMaterial;
- private SerializedProperty _propTexturePropertyName;
- private SerializedProperty _propDefaultTexture;
- private GUIContent[] _materialTextureProperties = new GUIContent[0];
- void OnEnable()
- {
- _propTextureOffset = this.CheckFindProperty("_offset");
- _propTextureScale = this.CheckFindProperty("_scale");
- _propMediaPlayer = this.CheckFindProperty("_media");
- _propMaterial = this.CheckFindProperty("_material");
- _propTexturePropertyName = this.CheckFindProperty("_texturePropertyName");
- _propDefaultTexture = this.CheckFindProperty("_defaultTexture");
- }
- public override void OnInspectorGUI()
- {
- serializedObject.Update();
- if (_propMaterial == null)
- {
- return;
- }
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(_propMediaPlayer);
- EditorGUILayout.PropertyField(_propDefaultTexture);
- EditorGUILayout.PropertyField(_propMaterial);
- bool hasKeywords = false;
- int texturePropertyIndex = 0;
- if (_propMaterial.objectReferenceValue != null)
- {
- Material mat = (Material)(_propMaterial.objectReferenceValue);
- if (mat.shaderKeywords.Length > 0)
- {
- hasKeywords = true;
- }
- MaterialProperty[] matProps = MaterialEditor.GetMaterialProperties(new UnityEngine.Object[] { mat });
- List<GUIContent> items = new List<GUIContent>(16);
- foreach (MaterialProperty matProp in matProps)
- {
- if (matProp.type == MaterialProperty.PropType.Texture)
- {
- if (matProp.name == _propTexturePropertyName.stringValue)
- {
- texturePropertyIndex = items.Count;
- }
- items.Add(new GUIContent(matProp.name));
- }
- }
- _materialTextureProperties = items.ToArray();
- }
- int newTexturePropertyIndex = EditorGUILayout.Popup(_guiTextTextureProperty, texturePropertyIndex, _materialTextureProperties);
- if (newTexturePropertyIndex >= 0 && newTexturePropertyIndex < _materialTextureProperties.Length)
- {
- _propTexturePropertyName.stringValue = _materialTextureProperties[newTexturePropertyIndex].text;
- }
- if (hasKeywords && _propTexturePropertyName.stringValue != Helper.UnityBaseTextureName)
- {
- EditorGUILayout.HelpBox("When using an uber shader you may need to enable the keywords on a material for certain texture slots to take effect. You can sometimes achieve this (eg with Standard shader) by putting a dummy texture into the texture slot.", MessageType.Info);
- }
- EditorGUILayout.PropertyField(_propTextureOffset);
- EditorGUILayout.PropertyField(_propTextureScale);
- serializedObject.ApplyModifiedProperties();
- bool wasModified = EditorGUI.EndChangeCheck();
- if (Application.isPlaying && wasModified)
- {
- foreach (Object obj in this.targets)
- {
- ((ApplyToMaterial)obj).ForceUpdate();
- }
- }
- }
- }
- }
|