internal static void IndexVector(string propertyName, Vector4 v, ObjectIndexer indexer, int documentIndex) { indexer.AddNumber(propertyName + ".x", v.x, indexer.settings.baseScore, documentIndex); indexer.AddNumber(propertyName + ".y", v.y, indexer.settings.baseScore, documentIndex); indexer.AddNumber(propertyName + ".z", v.z, indexer.settings.baseScore, documentIndex); indexer.AddNumber(propertyName + ".w", v.w, indexer.settings.baseScore, documentIndex); }
internal static void AnimationClipEventsIndexing(CustomObjectIndexerTarget context, ObjectIndexer indexer) { if (!(context.target is AnimationClip clip) || !indexer.settings.options.properties) { return; } indexer.AddNumber("events", clip.events.Length, indexer.settings.baseScore, context.documentIndex); foreach (var e in clip.events) { indexer.AddNumber("time", e.time, indexer.settings.baseScore, context.documentIndex); indexer.AddProperty("function", e.functionName.ToLowerInvariant(), context.documentIndex, saveKeyword: true, exact: false); } }
internal static void MaterialShaderReferences(CustomObjectIndexerTarget context, ObjectIndexer indexer) { var material = context.target as Material; if (material == null) { return; } if (material.shader) { var fullShaderName = material.shader.name.ToLowerInvariant(); indexer.AddReference(context.documentIndex, fullShaderName); } if (!indexer.settings.options.properties) { return; } var properties = MaterialEditor.GetMaterialProperties(new Material[] { material }); foreach (var property in properties) { var propertyName = property.name.ToLowerInvariant(); if (propertyName.Length > 0 && propertyName[0] == '_') { propertyName = propertyName.Substring(1); } switch (property.type) { case MaterialProperty.PropType.Color: IndexColor(propertyName, property.colorValue, indexer, context.documentIndex); break; case MaterialProperty.PropType.Vector: IndexVector(propertyName, property.vectorValue, indexer, context.documentIndex); break; case MaterialProperty.PropType.Float: indexer.AddNumber(propertyName, property.floatValue, indexer.settings.baseScore, context.documentIndex); break; case MaterialProperty.PropType.Range: IndexVector(propertyName, property.rangeLimits, indexer, context.documentIndex); break; case MaterialProperty.PropType.Texture: if (property.textureValue) { indexer.AddReference(context.documentIndex, AssetDatabase.GetAssetPath(property.textureValue)); if (!string.IsNullOrEmpty(property.textureValue.name)) { indexer.AddProperty(propertyName, property.textureValue.name.ToLowerInvariant(), context.documentIndex); } } break; } } }
internal static void IndexMeshRendererMaterials(CustomObjectIndexerTarget context, ObjectIndexer indexer) { var c = context.target as MeshRenderer; if (!c) { return; } if (indexer.settings.options.properties) { indexer.AddNumber("materialcount", c.sharedMaterials.Length, indexer.settings.baseScore + 2, context.documentIndex); } foreach (var m in c.sharedMaterials) { if (!m) { continue; } if (!string.IsNullOrEmpty(m.name) && indexer.settings.options.types) { indexer.AddProperty("material", m.name.Replace(" (Instance)", "").ToLowerInvariant(), context.documentIndex, saveKeyword: false, exact: false); } if (indexer.settings.options.dependencies) { var mp = AssetDatabase.GetAssetPath(m); if (!string.IsNullOrEmpty(mp)) { indexer.AddReference(context.documentIndex, mp); } } if (m.shader != null) { // Index shader name reference if (indexer.settings.options.types) { indexer.AddProperty("shader", m.shader.name.ToLowerInvariant(), context.documentIndex, exact: false); } if (indexer.settings.options.dependencies) { var sp = AssetDatabase.GetAssetPath(m.shader); if (!string.IsNullOrEmpty(sp)) { indexer.AddReference(context.documentIndex, sp); } } } } }
internal static void Texture2DIndexing(CustomObjectIndexerTarget context, ObjectIndexer indexer) { if (!(context.target is Texture2D texture) || !indexer.settings.options.properties) { return; } indexer.AddProperty("format", texture.format.ToString().ToLowerInvariant(), context.documentIndex, saveKeyword: true, exact: true); indexer.AddProperty("filtermode", texture.filterMode.ToString().ToLowerInvariant(), context.documentIndex, saveKeyword: true, exact: true); indexer.AddProperty("dimension", texture.dimension.ToString().ToLowerInvariant(), context.documentIndex, saveKeyword: true, exact: true); var ti = AssetImporter.GetAtPath(context.id) as TextureImporter; if (ti) { indexer.AddProperty("type", ti.textureType.ToString().ToLowerInvariant(), context.documentIndex, saveKeyword: true, exact: true); indexer.AddProperty("shape", ti.textureShape.ToString().ToLowerInvariant(), context.documentIndex, saveKeyword: true, exact: true); indexer.AddProperty("readable", ti.isReadable.ToString().ToLowerInvariant(), context.documentIndex, saveKeyword: false, exact: true); indexer.AddProperty("srgb", ti.sRGBTexture.ToString().ToLowerInvariant(), context.documentIndex, saveKeyword: false, exact: true); indexer.AddProperty("compression", ti.textureCompression.ToString().ToLowerInvariant(), context.documentIndex, saveKeyword: true, exact: true); indexer.AddNumber("compressionquality", ti.compressionQuality, indexer.settings.baseScore, context.documentIndex); } }
internal static void MaterialShaderReferences(CustomObjectIndexerTarget context, ObjectIndexer indexer) { var material = context.target as Material; if (material == null || !material.shader) { return; } indexer.AddReference(context.documentIndex, "shader", material.shader); if (!indexer.settings.options.properties) { return; } var ownerPropertyType = typeof(Shader); var shaderName = $"{material.shader.name}/" ?? string.Empty; var properties = MaterialEditor.GetMaterialProperties(new Material[] { material }); foreach (var property in properties) { var flags = (ShaderPropertyFlags)property.flags; if ((flags & (ShaderPropertyFlags.HideInInspector | ShaderPropertyFlags.NonModifiableTextureData)) != 0) { continue; } var upn = property.name; if (upn == null) { continue; } // Keep some property name patterns if (s_IgnorePropertyNameRx.IsMatch(upn)) { continue; } var propertyName = upn.ToLowerInvariant(); if (propertyName.Length > 0 && propertyName[0] == '_') { propertyName = propertyName.Substring(1); } if (propertyName.Length < 3) { continue; } var shaderPropName = $"{shaderName}{property.displayName}"; switch (property.type) { case MaterialProperty.PropType.Color: IndexColor(propertyName, property.colorValue, indexer, context.documentIndex, shaderPropName, ownerPropertyType); break; case MaterialProperty.PropType.Vector: IndexVector(propertyName, property.vectorValue, indexer, context.documentIndex, shaderPropName, ownerPropertyType); break; case MaterialProperty.PropType.Int: indexer.AddNumber(propertyName, property.intValue, indexer.settings.baseScore, context.documentIndex); indexer.MapProperty(propertyName, shaderPropName, null, "Number", ownerPropertyType.AssemblyQualifiedName, false); break; case MaterialProperty.PropType.Float: indexer.AddNumber(propertyName, property.floatValue, indexer.settings.baseScore, context.documentIndex); indexer.MapProperty(propertyName, shaderPropName, null, "Number", ownerPropertyType.AssemblyQualifiedName, false); break; case MaterialProperty.PropType.Range: indexer.AddNumber(propertyName, property.floatValue, indexer.settings.baseScore, context.documentIndex); indexer.MapProperty(propertyName, shaderPropName, null, "Number", ownerPropertyType.AssemblyQualifiedName, false); break; case MaterialProperty.PropType.Texture: if (property.textureValue) { indexer.AddReference(context.documentIndex, propertyName, property.textureValue, shaderPropName, ownerPropertyType); } break; } } }