12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using System;
- using UnityEngine;
-
- namespace UnityEditor.Timeline
- {
- // Helper methods for animated properties
- internal static class AnimatedPropertyUtility
- {
- public static bool IsMaterialProperty(string propertyName)
- {
- return propertyName.StartsWith("material.");
- }
-
- /// <summary>
- /// Given a propertyName (from an EditorCurveBinding), and the gameObject it refers to,
- /// remaps the path to include the exposed name of the shader parameter
- /// </summary>
- /// <param name="gameObject">The gameObject being referenced.</param>
- /// <param name="propertyName">The propertyName to remap.</param>
- /// <returns>The remapped propertyName, or the original propertyName if it cannot be remapped</returns>
- public static string RemapMaterialName(GameObject gameObject, string propertyName)
- {
- if (!IsMaterialProperty(propertyName) || gameObject == null)
- return propertyName;
-
- var renderers = gameObject.GetComponents<Renderer>();
- if (renderers == null || renderers.Length == 0)
- return propertyName;
-
- var propertySplits = propertyName.Split('.');
- if (propertySplits.Length <= 1)
- return propertyName;
-
- // handles post fixes for texture properties
- var exposedParameter = HandleTextureProperties(propertySplits[1], out var postFix);
- foreach (var renderer in renderers)
- {
- foreach (var material in renderer.sharedMaterials)
- {
- if (material.shader == null)
- continue;
-
- var index = material.shader.FindPropertyIndex(exposedParameter);
- if (index >= 0)
- {
- propertySplits[1] = material.shader.GetPropertyDescription(index) + postFix;
- return String.Join(".", propertySplits);
- }
- }
- }
-
- return propertyName;
- }
-
- private static string HandleTextureProperties(string exposedParameter, out string postFix)
- {
- postFix = String.Empty;
- RemoveEnding(ref exposedParameter, ref postFix, "_ST");
- RemoveEnding(ref exposedParameter, ref postFix, "_TexelSize");
- RemoveEnding(ref exposedParameter, ref postFix, "_HDR");
- return exposedParameter;
- }
-
- private static void RemoveEnding(ref string name, ref string postFix, string ending)
- {
- if (name.EndsWith(ending))
- {
- name = name.Substring(0, name.Length - ending.Length);
- postFix = ending;
- }
- }
- }
- }
|