From 4224e17432c6231fda8262e1f2c4a7803828cf3f Mon Sep 17 00:00:00 2001 From: Aaro Varis Date: Tue, 15 Oct 2024 18:25:05 +0300 Subject: [PATCH] Update VRCBoardImage component to include material override functionality and adjust related properties --- Components/VRCBoardImage.asset | 135 +++++++++++++++++++++++---------- Components/VRCBoardImage.cs | 21 ++++- 2 files changed, 112 insertions(+), 44 deletions(-) diff --git a/Components/VRCBoardImage.asset b/Components/VRCBoardImage.asset index 98652f2..f28cac1 100644 --- a/Components/VRCBoardImage.asset +++ b/Components/VRCBoardImage.asset @@ -44,7 +44,7 @@ MonoBehaviour: Data: - Name: Entry: 12 - Data: 10 + Data: 11 - Name: Entry: 7 Data: @@ -329,19 +329,19 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: imageIds + Data: materialOverride - Name: $v Entry: 7 Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: imageIds + Data: materialOverride - Name: k__BackingField Entry: 7 Data: 19|System.RuntimeType, mscorlib - Name: Entry: 1 - Data: System.String[], mscorlib + Data: UnityEngine.Material, UnityEngine.CoreModule - Name: Entry: 8 Data: @@ -365,19 +365,14 @@ MonoBehaviour: Data: 20|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 - Data: 2 + Data: 1 - Name: Entry: 7 Data: 21|UnityEngine.HeaderAttribute, UnityEngine.CoreModule - Name: header Entry: 1 - Data: Uploader Image Mappings - - Name: - Entry: 8 - Data: - - Name: - Entry: 7 - Data: 22|UnityEngine.HideInInspector, UnityEngine.CoreModule + Data: Material Override (Optional, if set the properties are applied globally + to all renderers using the material) - Name: Entry: 8 Data: @@ -398,19 +393,25 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: texturePropertyMappings + Data: imageIds - Name: $v Entry: 7 - Data: 23|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: texturePropertyMappings + Data: imageIds - Name: k__BackingField - Entry: 9 - Data: 19 + Entry: 7 + Data: 23|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.String[], mscorlib + - Name: + Entry: 8 + Data: - Name: k__BackingField Entry: 9 - Data: 19 + Data: 23 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -452,25 +453,19 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: defaultTextures + Data: texturePropertyMappings - Name: $v Entry: 7 Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: defaultTextures + Data: texturePropertyMappings - Name: k__BackingField - Entry: 7 - Data: 27|System.RuntimeType, mscorlib - - Name: - Entry: 1 - Data: UnityEngine.Texture2D[], UnityEngine.CoreModule - - Name: - Entry: 8 - Data: + Entry: 9 + Data: 23 - Name: k__BackingField Entry: 9 - Data: 27 + Data: 23 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -485,13 +480,13 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 27|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 1 - Name: Entry: 7 - Data: 29|UnityEngine.HideInInspector, UnityEngine.CoreModule + Data: 28|UnityEngine.HideInInspector, UnityEngine.CoreModule - Name: Entry: 8 Data: @@ -512,19 +507,25 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: _mainType + Data: defaultTextures - Name: $v Entry: 7 - Data: 30|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: _mainType + Data: defaultTextures - Name: k__BackingField - Entry: 9 - Data: 15 + Entry: 7 + Data: 30|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Texture2D[], UnityEngine.CoreModule + - Name: + Entry: 8 + Data: - Name: k__BackingField Entry: 9 - Data: 15 + Data: 30 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -536,10 +537,64 @@ MonoBehaviour: Data: - Name: k__BackingField Entry: 5 - Data: false + Data: true - Name: _fieldAttributes Entry: 7 Data: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 32|UnityEngine.HideInInspector, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _mainType + - Name: $v + Entry: 7 + Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _mainType + - Name: k__BackingField + Entry: 9 + Data: 15 + - Name: k__BackingField + Entry: 9 + Data: 15 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -563,7 +618,7 @@ MonoBehaviour: Data: _uploaderId - Name: $v Entry: 7 - Data: 32|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 35|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: _uploaderId @@ -587,7 +642,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 33|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 36|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 diff --git a/Components/VRCBoardImage.cs b/Components/VRCBoardImage.cs index 8796d1f..3c8ccc3 100644 --- a/Components/VRCBoardImage.cs +++ b/Components/VRCBoardImage.cs @@ -15,7 +15,9 @@ namespace VRCBoard.Components [Header("Uploader ID (only applies to images of 'shared' or 'instance' type)")] public string uploaderIdOverride; - [Header("Uploader Image Mappings")] + [Header("Material Override (Optional, if set the properties are applied globally to all renderers using the material)")] + public Material materialOverride; + [HideInInspector] public string[] imageIds = new string[0]; [HideInInspector] public string[] texturePropertyMappings = new string[0]; [HideInInspector] public Texture2D[] defaultTextures = new Texture2D[0]; @@ -32,7 +34,7 @@ namespace VRCBoard.Components private string GetUploader() { string uploaderId = ""; - if (string.IsNullOrEmpty(uploaderIdOverride)) + if (string.IsNullOrEmpty(uploaderIdOverride) && imageIds.Length > 0) { string firstImageID = imageIds[0]; GetImageAtlasTexture(firstImageID, null, out Texture2D albedoTexture, out int albedoAtlasPosition, out int albedoAtlasSize, out string albedoType); @@ -115,11 +117,16 @@ namespace VRCBoard.Components string propertyName = texturePropertyMappings[i]; Texture2D texture = manager.GetTexture2D(_uploaderId, imageIds[i]); - - if (texture == null) continue; + + if (texture == null) + { + texture = defaultTextures[i]; + if (texture == null) continue; + } if (string.IsNullOrEmpty(propertyName)) continue; propertyBlock.SetTexture(propertyName, texture); + if (materialOverride != null) materialOverride.SetTexture(propertyName, texture); } @@ -136,6 +143,11 @@ namespace VRCBoard.Components Renderer renderer = script.GetComponent(); Material material = renderer.sharedMaterial; + if (script.materialOverride) + { + EditorGUILayout.HelpBox("Material override enabled", MessageType.Info); + material = script.materialOverride; + } string[] materialPropertyNames = material.GetPropertyNames(MaterialPropertyType.Texture); base.OnInspectorGUI(); @@ -195,6 +207,7 @@ namespace VRCBoard.Components defaultImage = EditorGUILayout.ObjectField(defaultImage, typeof(Texture2D), false) as Texture2D; EditorGUILayout.EndHorizontal(); if (defaultImage != null) propertyBlock.SetTexture(propertyName, defaultImage); + if (script.materialOverride != null) script.materialOverride.SetTexture(propertyName, defaultImage); } if (script.defaultTextures[i] != defaultImage)