├── .gitattributes ├── .gitignore ├── Editor.meta ├── Editor ├── Resources.meta ├── Resources │ ├── AvatarDescriptor.png │ ├── AvatarDescriptor.png.meta │ ├── DynamicBone.png │ ├── DynamicBone.png.meta │ ├── DynamicBoneCollider.png │ ├── DynamicBoneCollider.png.meta │ ├── DynamicBonePartial.png │ ├── DynamicBonePartial.png.meta │ ├── DynamicBoneRoot.png │ ├── DynamicBoneRoot.png.meta │ ├── InactiveObject.png │ ├── InactiveObject.png.meta │ ├── MirrorReflection.png │ ├── MirrorReflection.png.meta │ ├── ToggleActiveObject.png │ ├── ToggleActiveObject.png.meta │ ├── VRC Avatar Descriptor.png │ ├── VRC Avatar Descriptor.png.meta │ ├── VRCPhysBone.png │ ├── VRCPhysBone.png.meta │ ├── VRCPhysBoneCollider.png │ ├── VRCPhysBoneCollider.png.meta │ ├── VRCPhysBonePartial.png │ ├── VRCPhysBonePartial.png.meta │ ├── VRCPhysBoneRoot.png │ └── VRCPhysBoneRoot.png.meta ├── VRCHierarchyHighlighter.cs └── VRCHierarchyHighlighter.cs.meta ├── LICENSE ├── LICENSE.meta ├── README.md ├── README.md.meta └── package.json /.gitattributes: -------------------------------------------------------------------------------- 1 | *.md text eol=lf 2 | *.cs text eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | */*/ 2 | *.* 3 | 4 | !*.md 5 | !*.png 6 | !*.cs 7 | !*.meta 8 | !LICENSE 9 | !package.json 10 | 11 | !*.gitignore 12 | !*.gitattributes 13 | 14 | !Editor/ 15 | !Editor/* 16 | !Editor/Resources/ 17 | !Editor/Resources/* -------------------------------------------------------------------------------- /Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d9fcf5a73aa44d345af85ecbd35949a5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 31f0293911fb9e44aacd0542a80f0c70 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Resources/AvatarDescriptor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/AvatarDescriptor.png -------------------------------------------------------------------------------- /Editor/Resources/AvatarDescriptor.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 88ded3371e4986e479ff856580072e26 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/DynamicBone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/DynamicBone.png -------------------------------------------------------------------------------- /Editor/Resources/DynamicBone.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 23def32c99db0bc4997f3d8d959347a7 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/DynamicBoneCollider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/DynamicBoneCollider.png -------------------------------------------------------------------------------- /Editor/Resources/DynamicBoneCollider.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 50bfb6bf140c4bc4ebe65e083d37600d 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/DynamicBonePartial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/DynamicBonePartial.png -------------------------------------------------------------------------------- /Editor/Resources/DynamicBonePartial.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4e482feba51a4d0438fc53288abf6f2f 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/DynamicBoneRoot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/DynamicBoneRoot.png -------------------------------------------------------------------------------- /Editor/Resources/DynamicBoneRoot.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d95cb3a5ddf185e43915b3909c695853 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/InactiveObject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/InactiveObject.png -------------------------------------------------------------------------------- /Editor/Resources/InactiveObject.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4a3eccb63142a354dbbae9cc2edc44f5 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/MirrorReflection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/MirrorReflection.png -------------------------------------------------------------------------------- /Editor/Resources/MirrorReflection.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fd2a48517cf770346ac8fec30d8e01e8 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/ToggleActiveObject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/ToggleActiveObject.png -------------------------------------------------------------------------------- /Editor/Resources/ToggleActiveObject.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a4702f9cf876ae34abc7dc51884091ff 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/VRC Avatar Descriptor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/VRC Avatar Descriptor.png -------------------------------------------------------------------------------- /Editor/Resources/VRC Avatar Descriptor.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6962bec8fa6055d4088876b1e1b57b43 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/VRCPhysBone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/VRCPhysBone.png -------------------------------------------------------------------------------- /Editor/Resources/VRCPhysBone.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7054b215d7476e5478e4d790e7ac8cc8 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/VRCPhysBoneCollider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/VRCPhysBoneCollider.png -------------------------------------------------------------------------------- /Editor/Resources/VRCPhysBoneCollider.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2de16688c38bceb4fa712f15beea16b4 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/VRCPhysBonePartial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/VRCPhysBonePartial.png -------------------------------------------------------------------------------- /Editor/Resources/VRCPhysBonePartial.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ea27c1ff2d7d0a84f8f8fc4d846fe9b0 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/Resources/VRCPhysBoneRoot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzuriteLab/VRCHierarchyHighlighter/807795e02a57bcf27fd18bfa6712ee839e8b2129/Editor/Resources/VRCPhysBoneRoot.png -------------------------------------------------------------------------------- /Editor/Resources/VRCPhysBoneRoot.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e6ae444187548744297a077c5ac01677 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | flipGreenChannel: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMipmapLimit: 0 29 | grayScaleToAlpha: 0 30 | generateCubemap: 6 31 | cubemapConvolution: 0 32 | seamlessCubemap: 0 33 | textureFormat: 1 34 | maxTextureSize: 2048 35 | textureSettings: 36 | serializedVersion: 2 37 | filterMode: 1 38 | aniso: 1 39 | mipBias: 0 40 | wrapU: 0 41 | wrapV: 0 42 | wrapW: 0 43 | nPOTScale: 1 44 | lightmap: 0 45 | compressionQuality: 50 46 | spriteMode: 0 47 | spriteExtrude: 1 48 | spriteMeshType: 1 49 | alignment: 0 50 | spritePivot: {x: 0.5, y: 0.5} 51 | spritePixelsToUnits: 100 52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 53 | spriteGenerateFallbackPhysicsShape: 1 54 | alphaUsage: 1 55 | alphaIsTransparency: 0 56 | spriteTessellationDetail: -1 57 | textureType: 0 58 | textureShape: 1 59 | singleChannelComponent: 0 60 | flipbookRows: 1 61 | flipbookColumns: 1 62 | maxTextureSizeSet: 0 63 | compressionQualitySet: 0 64 | textureFormatSet: 0 65 | ignorePngGamma: 0 66 | applyGammaDecoding: 0 67 | swizzle: 50462976 68 | cookieLightType: 0 69 | platformSettings: 70 | - serializedVersion: 3 71 | buildTarget: DefaultTexturePlatform 72 | maxTextureSize: 2048 73 | resizeAlgorithm: 0 74 | textureFormat: -1 75 | textureCompression: 1 76 | compressionQuality: 50 77 | crunchedCompression: 0 78 | allowsAlphaSplitting: 0 79 | overridden: 0 80 | ignorePlatformSupport: 0 81 | androidETC2FallbackOverride: 0 82 | forceMaximumCompressionQuality_BC6H_BC7: 0 83 | - serializedVersion: 3 84 | buildTarget: Standalone 85 | maxTextureSize: 2048 86 | resizeAlgorithm: 0 87 | textureFormat: -1 88 | textureCompression: 1 89 | compressionQuality: 50 90 | crunchedCompression: 0 91 | allowsAlphaSplitting: 0 92 | overridden: 0 93 | ignorePlatformSupport: 0 94 | androidETC2FallbackOverride: 0 95 | forceMaximumCompressionQuality_BC6H_BC7: 0 96 | - serializedVersion: 3 97 | buildTarget: Server 98 | maxTextureSize: 2048 99 | resizeAlgorithm: 0 100 | textureFormat: -1 101 | textureCompression: 1 102 | compressionQuality: 50 103 | crunchedCompression: 0 104 | allowsAlphaSplitting: 0 105 | overridden: 0 106 | ignorePlatformSupport: 0 107 | androidETC2FallbackOverride: 0 108 | forceMaximumCompressionQuality_BC6H_BC7: 0 109 | spriteSheet: 110 | serializedVersion: 2 111 | sprites: [] 112 | outline: [] 113 | physicsShape: [] 114 | bones: [] 115 | spriteID: 116 | internalID: 0 117 | vertices: [] 118 | indices: 119 | edges: [] 120 | weights: [] 121 | secondaryTextures: [] 122 | nameFileIdTable: {} 123 | mipmapLimitGroupName: 124 | pSDRemoveMatte: 0 125 | userData: 126 | assetBundleName: 127 | assetBundleVariant: 128 | -------------------------------------------------------------------------------- /Editor/VRCHierarchyHighlighter.cs: -------------------------------------------------------------------------------- 1 | /* ヒエラルキを階層別に色分けするのと、VRC向けの重要コンポーネントがある場合にアイコンで可視化するやつ 2 | * 3 | * see also: http://baba-s.hatenablog.com/entry/2015/05/09/122713 4 | */ 5 | 6 | /* 7 | The MIT License (MIT) 8 | 9 | Copyright (c) 2019-2021 AzuriteLab 10 | 11 | Permission is hereby granted, free of charge, to any person obtaining a copy 12 | of this software and associated documentation files (the "Software"), to deal 13 | in the Software without restriction, including without limitation the rights 14 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | copies of the Software, and to permit persons to whom the Software is 16 | furnished to do so, subject to the following conditions: 17 | 18 | The above copyright notice and this permission notice shall be included in 19 | all copies or substantial portions of the Software. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | THE SOFTWARE. 28 | */ 29 | 30 | using System; 31 | using System.Reflection; 32 | using System.Linq; 33 | using System.Collections.Generic; 34 | using System.IO; 35 | 36 | using UnityEditor; 37 | using UnityEngine; 38 | using UnityEngine.SceneManagement; 39 | using System.Collections.Immutable; 40 | 41 | #if (VRC_SDK_VRCSDK3 && !UDON) 42 | using VRC.Dynamics; 43 | using VRC.SDK3.Dynamics.PhysBone.Components; 44 | #endif 45 | 46 | public enum HighlightMode 47 | { 48 | Fill = 0, 49 | Under = 1, 50 | Left = 2 51 | } 52 | 53 | public static class HierarchyIndentHelper 54 | { 55 | public const string kVersion = "2024.08.30.0"; 56 | public const string kSemanticVersion = "1.1.1"; 57 | private const string kResourceSuffix = ".png"; 58 | private const int kIconSize = 20; 59 | // TODO SDK2とSDK3で名前空間が異なるため、それぞれのコンポーネント名を区別するようにする。現状は省略された形で応急的に対応している 60 | // TODO SDKに含まれるMirror prefabを使ってしまうと、MeshRendererが優先されてしまう。アイコンの適用方法をコンポーネント名を一旦キャッシュするなどして変更する必要がある 61 | private static readonly IDictionary kIconNamesAndTypes = new Dictionary() 62 | { 63 | { "VRCPhysBone", null }, 64 | { "VRCPhysBoneCollider", null }, 65 | { "VRCPhysBonePartial", null }, 66 | { "VRCPhysBoneRoot", null }, 67 | 68 | { "DynamicBone", null }, 69 | { "DynamicBonePartial", null }, 70 | { "DynamicBoneRoot", null }, 71 | { "DynamicBoneCollider", null }, 72 | 73 | { "MeshRenderer", typeof(MeshRenderer) }, 74 | { "SkinnedMeshRenderer", typeof(SkinnedMeshRenderer) }, 75 | { "AvatarDescriptor", null }, 76 | { "VRC Avatar Descriptor", null }, 77 | { "AudioSource", typeof(AudioSource) }, 78 | { "Light", typeof(Light) }, 79 | { "LightProbe", typeof(LightProbes) }, 80 | { "ReflectionProbe", typeof(ReflectionProbe) }, 81 | { "MirrorReflection", null }, 82 | // 83 | { "InactiveObject", null }, 84 | { "ToggleActiveObject", null }, 85 | }; 86 | private static readonly Type kDynamicBoneType = Type.GetType("DynamicBone, Assembly-CSharp"); 87 | private static readonly FieldInfo kDynamicBoneMRoot = kDynamicBoneType?.GetField("m_Root"); 88 | 89 | private static Dictionary icon_resources_ 90 | = new Dictionary(); 91 | 92 | private static ImmutableHashSet dynamic_bone_roots_ = ImmutableHashSet.Empty; 93 | 94 | private static Texture2D LoadIconTex2DFromPNG(string path) 95 | { 96 | BinaryReader reader = new BinaryReader(new FileStream(path, FileMode.Open, FileAccess.Read)); 97 | byte[] binary = reader.ReadBytes((int)reader.BaseStream.Length); 98 | Texture2D tex = new Texture2D(16, 16); 99 | tex.LoadImage(binary); 100 | return tex; 101 | } 102 | 103 | private static void SetupIcons() 104 | { 105 | var resource_dir_path = AssetDatabase.GUIDToAssetPath("31f0293911fb9e44aacd0542a80f0c70") + "/"; // Editor/Resource.meta GUID 106 | foreach (var nameAndType in kIconNamesAndTypes) 107 | { 108 | Texture2D icon = nameAndType.Value != null 109 | ? EditorGUIUtility.ObjectContent(null, nameAndType.Value).image as Texture2D 110 | : LoadIconTex2DFromPNG(resource_dir_path + nameAndType.Key + kResourceSuffix); 111 | icon_resources_.Remove(nameAndType.Key); 112 | icon_resources_.Add(nameAndType.Key, icon); 113 | } 114 | } 115 | 116 | [InitializeOnLoadMethod] 117 | private static void Startup() 118 | { 119 | SetupIcons(); 120 | 121 | // Unityのバージョン2019以上になった時のため、またはその逆の判定 122 | if (EditorGUIUtility.isProSkin && !VRChierarchyHighlighterEdit.is_dark_mode.GetValue()) 123 | { 124 | Debug.Log("VRCHierarchyHighlighter: Standard Skin -> Pro Skin"); 125 | // 通常用からダークモードにプリセットに切り替え 126 | VRChierarchyHighlighterEdit.SetDefaultAllParameters(); 127 | 128 | } 129 | else if (!EditorGUIUtility.isProSkin && VRChierarchyHighlighterEdit.is_dark_mode.GetValue()) 130 | { 131 | Debug.Log("VRCHierarchyHighlighter: Pro Skin -> Standard Skin"); 132 | // ダークモードから通常用のプリセットに切り替える 133 | VRChierarchyHighlighterEdit.SetDefaultAllParameters(); 134 | } 135 | 136 | 137 | EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyWindowItemOnGUI; 138 | EditorApplication.hierarchyChanged += () => 139 | { 140 | 141 | // シーンの最初のGameObjectであれば、シーン全体のDynamicBoneのm_Rootを取得する 142 | if (kDynamicBoneType != null) 143 | { 144 | var rootGameObjects = SceneManager.GetActiveScene().GetRootGameObjects(); 145 | dynamic_bone_roots_ = rootGameObjects 146 | .SelectMany(root => root.GetComponentsInChildren(kDynamicBoneType)) 147 | .Select(db => kDynamicBoneMRoot.GetValue(db) as Transform) 148 | .Where(db_root => db_root != null) 149 | .ToImmutableHashSet(); 150 | } 151 | }; 152 | } 153 | 154 | private static void OnHierarchyWindowItemOnGUI 155 | (int instance_id, Rect target_rect) 156 | { 157 | var obj = EditorUtility.InstanceIDToObject(instance_id) as GameObject; 158 | if (obj == null) 159 | { 160 | return; 161 | } 162 | 163 | Rect icon_rect = target_rect; 164 | icon_rect.y -= 2; 165 | icon_rect.x = target_rect.xMax - kIconSize; 166 | icon_rect.width = kIconSize; 167 | icon_rect.height = kIconSize; 168 | 169 | Event ev = Event.current; 170 | if (VRChierarchyHighlighterEdit.use_active_checkbox.GetValue() && ev.type == EventType.MouseUp) 171 | { 172 | if (icon_rect.Contains(Event.current.mousePosition)) { 173 | obj.SetActive(!obj.activeSelf); 174 | } 175 | } 176 | 177 | var color = GUI.color; 178 | 179 | if (VRChierarchyHighlighterEdit.is_draw_highlights.GetValue()) 180 | { 181 | var hue = ((float)(target_rect.x) 182 | * VRChierarchyHighlighterEdit.hue_offset.GetValue() 183 | + VRChierarchyHighlighterEdit.hue.GetValue()) % 1.0f; 184 | 185 | var background_color = Color.HSVToRGB( 186 | hue, VRChierarchyHighlighterEdit.saturation.GetValue(), 187 | VRChierarchyHighlighterEdit.value.GetValue() 188 | ); 189 | 190 | GUI.color = new Color( 191 | background_color.r, 192 | background_color.g, 193 | background_color.b, 194 | VRChierarchyHighlighterEdit.alpha.GetValue() 195 | ); 196 | 197 | var rect = target_rect; 198 | rect.x = target_rect.x; 199 | rect.xMax = target_rect.xMax - kIconSize; 200 | 201 | var mode = VRChierarchyHighlighterEdit.highlight_mode.GetValue(); 202 | switch(mode) 203 | { 204 | case HighlightMode.Under: 205 | rect.yMin += (rect.height - 2); 206 | break; 207 | case HighlightMode.Left: 208 | rect.xMax = target_rect.x; 209 | rect.xMin += (rect.width - 2); 210 | break; 211 | } 212 | 213 | GUI.Box(rect, ""); 214 | } 215 | 216 | if (VRChierarchyHighlighterEdit.is_draw_icons.GetValue()) 217 | { 218 | int cnt = icon_resources_.Count; 219 | if (icon_resources_[kIconNamesAndTypes.First().Key] == null) 220 | { 221 | // 実行モードに移行して戻ると何故かメンバの中身が初期化されてしまうので再セットアップ 222 | // 少数のテクスチャをメインスレッドで読み込むので状況によっては一瞬ラグるかもしれない 223 | SetupIcons(); 224 | } 225 | 226 | target_rect.y -= 2; 227 | 228 | var components = obj.GetComponents(typeof(Component)); 229 | if (components.Length > 0) { 230 | DrawIcons_(components, target_rect); 231 | } 232 | if (!obj.activeSelf) { 233 | DrawIcon_(icon_resources_["InactiveObject"], target_rect); 234 | } 235 | } 236 | 237 | if (VRChierarchyHighlighterEdit.is_draw_toggle_icons.GetValue() && icon_rect.Contains(ev.mousePosition)) { 238 | DrawIcon_(icon_resources_["ToggleActiveObject"], target_rect); 239 | } 240 | 241 | GUI.color = color; 242 | } 243 | 244 | private static void DrawIcons_(Component[] components, Rect target_rect) 245 | { 246 | // DynamicBoneのm_Rootの対象となるGameObject 247 | if (dynamic_bone_roots_.Contains(components[0].transform)) 248 | { 249 | DrawIcon_(icon_resources_["DynamicBoneRoot"], target_rect); 250 | return; 251 | } 252 | 253 | foreach (Component component in components) 254 | { 255 | foreach (var icon_info in icon_resources_.Reverse()) 256 | { 257 | if (component != null && component.GetType().Name.Contains(icon_info.Key)) 258 | { 259 | var icon = icon_info.Value; 260 | // DynamicBoneのm_Rootに対象となるTransformが設定されていない場合は専用のアイコンに切り替える 261 | if (kDynamicBoneType != null && component.GetType() == kDynamicBoneType) 262 | { 263 | if (kDynamicBoneMRoot.GetValue(component) == null) 264 | { 265 | icon = icon_resources_["DynamicBonePartial"]; 266 | } 267 | } 268 | 269 | #if (VRC_SDK_VRCSDK3 && !UDON) 270 | // PBがアタッチされていたら専用のアイコンに切り替える. rootTransformが設定されていない場合は警告用のアイコンを表示する 271 | foreach (var pb in component.GetComponents().Where(obj => obj != null)) 272 | { 273 | if (pb.rootTransform != null) { 274 | icon = icon_resources_["VRCPhysBoneRoot"]; 275 | } else { 276 | icon = icon_resources_["VRCPhysBonePartial"]; 277 | } 278 | } 279 | #endif 280 | DrawIcon_(icon, target_rect); 281 | 282 | if (VRChierarchyHighlighterEdit.is_draw_polygons.GetValue()) 283 | { 284 | PreviewPolygons_(component, target_rect); 285 | } 286 | return; 287 | } 288 | } 289 | } 290 | } 291 | 292 | private static void DrawIcon_(Texture2D icon, Rect target_rect) 293 | { 294 | Color boxcolor = Color.white; 295 | GUI.color = boxcolor; 296 | 297 | target_rect.x = target_rect.xMax - kIconSize; 298 | target_rect.width = kIconSize; 299 | target_rect.height = kIconSize; 300 | 301 | GUI.Label(target_rect, icon); 302 | } 303 | 304 | private static void PreviewPolygons_(Component component, Rect target_rect) 305 | { 306 | if (!component.ToString().Contains("SkinnedMeshRenderer")) 307 | { 308 | return; 309 | } 310 | 311 | GUI.color = EditorGUIUtility.isProSkin ? Color.white : Color.black; 312 | 313 | var rect = EditorGUILayout.GetControlRect(); 314 | target_rect.x = rect.xMax - 80 - kIconSize; // 右寄せにする場合 315 | target_rect.width = 100; 316 | target_rect.height = kIconSize; 317 | 318 | var mesh = ((SkinnedMeshRenderer)component).sharedMesh; 319 | if (mesh) 320 | GUI.Label(target_rect, string.Format("△{0}", mesh.triangles.Length / 3)); 321 | } 322 | } 323 | 324 | public struct VHHParameter 325 | { 326 | public VHHParameter(Func set_default_value, string signature, Func init, Action teardown) 327 | { 328 | do_set_default_ = set_default_value; 329 | signature_ = signature; 330 | value_ = init(signature_, do_set_default_()); 331 | teardown_ = teardown; 332 | } 333 | 334 | // IDisposableで実装したDisposableが確実に呼び出される保証がないので普通の関数にしてる 335 | public void Destroy() 336 | { 337 | teardown_(signature_, value_); 338 | } 339 | 340 | public T GetDefault() { return do_set_default_(); } 341 | public T GetValue() { return value_; } 342 | public string GetSignature() { return signature_; } 343 | 344 | public void SetValue(T value) { value_ = value; } 345 | public void SetDefault() { value_ = do_set_default_(); } 346 | 347 | private T value_; 348 | private string signature_; 349 | private Func do_set_default_; 350 | private Action teardown_; 351 | } 352 | 353 | public class VRChierarchyHighlighterEdit : EditorWindow 354 | { 355 | [MenuItem("Window/VRChierarchyHighlighter")] 356 | static void Open() 357 | { 358 | GetWindow(); 359 | } 360 | 361 | static private Func SetDefault_(T for_std, T for_pro) 362 | { 363 | return () => EditorGUIUtility.isProSkin ? for_pro : for_std; 364 | } 365 | static private Func SetDefault_(T value) 366 | { 367 | return () => value; 368 | } 369 | 370 | static private HighlightMode GetHighlightMode(string key, HighlightMode defaultValue) 371 | { 372 | return (HighlightMode)EditorPrefs.GetInt(key, (int)defaultValue); 373 | } 374 | 375 | static private void SetHighlightMode(string key, HighlightMode value) 376 | { 377 | EditorPrefs.SetInt(key, (int)value); 378 | } 379 | 380 | public static VHHParameter is_draw_icons 381 | = new VHHParameter(SetDefault_(true), "vhh.is_draw_icons", EditorPrefs.GetBool, EditorPrefs.SetBool); 382 | public static VHHParameter is_draw_toggle_icons 383 | = new VHHParameter(SetDefault_(true), "vhh.is_draw_toggle_icons", EditorPrefs.GetBool, EditorPrefs.SetBool); 384 | public static VHHParameter is_draw_highlights 385 | = new VHHParameter(SetDefault_(true), "vhh.is_draw_highlights", EditorPrefs.GetBool, EditorPrefs.SetBool); 386 | public static VHHParameter is_draw_polygons 387 | = new VHHParameter(SetDefault_(false), "vhh.is_draw_polygons", EditorPrefs.GetBool, EditorPrefs.SetBool); 388 | public static VHHParameter is_dark_mode 389 | = new VHHParameter(SetDefault_(for_std: false, for_pro: true), "vhh.is_dark_mode", EditorPrefs.GetBool, EditorPrefs.SetBool); 390 | public static VHHParameter use_active_checkbox 391 | = new VHHParameter(SetDefault_(false), "vhh.use_active_checkbox", EditorPrefs.GetBool, EditorPrefs.SetBool); 392 | public static VHHParameter saturation 393 | = new VHHParameter(SetDefault_(for_std: 0.7f, for_pro: 0.7f), "vhh.saturation", EditorPrefs.GetFloat, EditorPrefs.SetFloat); 394 | public static VHHParameter value 395 | = new VHHParameter(SetDefault_(for_std: 0.7f, for_pro: 8.5f), "vhh.value", EditorPrefs.GetFloat, EditorPrefs.SetFloat); 396 | public static VHHParameter hue 397 | = new VHHParameter(SetDefault_(for_std: 0.3f, for_pro: 0.2f), "vhh.hue", EditorPrefs.GetFloat, EditorPrefs.SetFloat); 398 | public static VHHParameter hue_offset 399 | = new VHHParameter(SetDefault_(for_std: 0.2f, for_pro: 0.2f), "vhh.hue_offset", EditorPrefs.GetFloat, EditorPrefs.SetFloat); 400 | public static VHHParameter alpha 401 | = new VHHParameter(SetDefault_(for_std: 0.2f, for_pro: 1.0f), "vhh.alpha", EditorPrefs.GetFloat, EditorPrefs.SetFloat); 402 | public static VHHParameter highlight_mode 403 | = new VHHParameter(SetDefault_(for_std: HighlightMode.Fill, for_pro: HighlightMode.Under), "vhh.highlight_mode", GetHighlightMode, SetHighlightMode); 404 | 405 | static public void SetDefaultAllParameters() 406 | { 407 | is_draw_icons.SetDefault(); 408 | is_draw_highlights.SetDefault(); 409 | is_draw_toggle_icons.SetDefault(); 410 | is_draw_polygons.SetDefault(); 411 | is_dark_mode.SetDefault(); 412 | use_active_checkbox.SetDefault(); 413 | hue_offset.SetDefault(); 414 | hue.SetDefault(); 415 | saturation.SetDefault(); 416 | value.SetDefault(); 417 | alpha.SetDefault(); 418 | highlight_mode.SetDefault(); 419 | } 420 | 421 | private void OnDestroy() 422 | { 423 | is_draw_icons.Destroy(); 424 | is_draw_highlights.Destroy(); 425 | is_draw_toggle_icons.Destroy(); 426 | is_draw_polygons.Destroy(); 427 | is_dark_mode.Destroy(); 428 | use_active_checkbox.Destroy(); 429 | saturation.Destroy(); 430 | value.Destroy(); 431 | hue_offset.Destroy(); 432 | hue.Destroy(); 433 | alpha.Destroy(); 434 | highlight_mode.Destroy(); 435 | } 436 | 437 | void OnGUI() 438 | { 439 | EditorGUI.BeginChangeCheck(); 440 | 441 | if (GUI.Button(new Rect(EditorGUILayout.GetControlRect().xMax - 100, 10, 100, 20), "Default")) 442 | { 443 | SetDefaultAllParameters(); 444 | } 445 | 446 | EditorGUILayout.LabelField("General Settings: "); 447 | EditorGUI.indentLevel++; 448 | is_draw_icons.SetValue(EditorGUILayout.ToggleLeft("Show Icons", is_draw_icons.GetValue())); 449 | is_draw_polygons.SetValue(EditorGUILayout.ToggleLeft("Show Polygons", is_draw_polygons.GetValue())); 450 | EditorGUI.indentLevel++; 451 | EditorGUILayout.LabelField("(Only when `Show Icons` is enabled)"); 452 | EditorGUI.indentLevel--; 453 | is_draw_highlights.SetValue(EditorGUILayout.ToggleLeft("Draw Highlights", is_draw_highlights.GetValue())); 454 | use_active_checkbox.SetValue(EditorGUILayout.ToggleLeft("Enable Object Toggle Checkbox", use_active_checkbox.GetValue())); 455 | EditorGUI.indentLevel++; 456 | is_draw_toggle_icons.SetValue(EditorGUILayout.ToggleLeft("Show Toggle Icons", is_draw_toggle_icons.GetValue())); 457 | EditorGUI.indentLevel--; 458 | if (use_active_checkbox.GetValue() == false) { 459 | is_draw_toggle_icons.SetValue(false); 460 | } 461 | EditorGUI.indentLevel--; 462 | 463 | EditorGUILayout.Separator(); 464 | 465 | EditorGUILayout.LabelField("Highlights Settings: "); 466 | EditorGUI.indentLevel++; 467 | 468 | hue.SetValue(EditorGUILayout.Slider("Hue", hue.GetValue(), 0.0f, 2.0f)); 469 | hue_offset.SetValue(EditorGUILayout.Slider("Hue offset", hue_offset.GetValue(), 0.0f, 1.0f)); 470 | saturation.SetValue(EditorGUILayout.Slider("Saturation", saturation.GetValue(), 0.0f, 2.0f)); 471 | value.SetValue(EditorGUILayout.Slider("Value", value.GetValue(), 0.0f, 10.0f)); 472 | alpha.SetValue(EditorGUILayout.Slider("Alpha", alpha.GetValue(), 0.0f, 2.0f)); 473 | 474 | highlight_mode.SetValue((HighlightMode)EditorGUILayout.EnumPopup("Highlight Mode : ", highlight_mode.GetValue())); 475 | 476 | EditorGUI.indentLevel--; 477 | 478 | EditorGUILayout.LabelField(" "); 479 | EditorGUILayout.LabelField("---"); 480 | EditorGUILayout.LabelField("Version: " + HierarchyIndentHelper.kVersion); 481 | 482 | if (EditorGUI.EndChangeCheck()) 483 | { 484 | EditorApplication.RepaintHierarchyWindow(); 485 | } 486 | } 487 | } 488 | -------------------------------------------------------------------------------- /Editor/VRCHierarchyHighlighter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9eefd147403b1a5478bcec93bd581e5e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 |  The MIT License (MIT) 2 | 3 | Copyright (c) 2019 AzuriteLab 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2b24f631555822c45b6c2d3a45665695 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VRCHierarchyHighlighter 2 | 3 | ヒエラルキの階層表示をハイライトで強調表示するのと、 4 | VRCで扱う重要コンポーネントをアイコンで表示するやつです。 5 | 6 | 対応コンポーネントは、 7 | * VRC_AvaterDescriptor(or VRC.SDK3.Components.VRCAvaterDescriptor) 8 | * VRC_MirrorReflection(or VRC.SDK3.Components.VRCMirrorReflection) 9 | * MeshRenderer 10 | * SkinnedMeshRenderer 11 | * DynamicBone (+ Collider) 12 | * VRCPhysBone (+ Collider) 13 | * AudioSource 14 | * Light 15 | * LightProbeGroup 16 | * ReflectionProbe 17 | です。 18 | (今後Rigidbody, Joint, Clothなどに対応するかもしれません) 19 | 20 | このエディタ拡張を導入することによって、 21 | 間違った階層にオブジェクトを突っ込むリスクを下げたり、オブジェクトにちゃんとDynamicBoneが適用されているのか、 22 | どのオブジェクトがVRCのアバターコンポーネントを持っているのか、メッシュ構造を持っているのかを可視化することが出来ます。 23 | 24 | ## 導入方法 25 | 26 | 導入方法は2つあります 27 | 28 | ### 方法1. VCCにリポジトリを追加する 29 | 30 | VCCの設定で所定のリポジトリURLを追加すると `Manage Packages` から導入・更新可能になります. 31 | URL追加後は他のliltoonやModularAvatarといったパッケージと同様の方法で導入をしてください。 32 | 33 | 追加URL: 34 | `https://raw.githubusercontent.com/AzuriteLab/azlab_vrc_repos/master/index.json` 35 | 36 | ### 方法2. unitypackageをダウンロードしプロジェクトにD&Dして追加する 37 | 38 | 手軽です. しかし以下のようなデメリットがあります. 39 | 40 | * Unityプロジェクトごとに手作業でAssetsに突っ込む必要がある 41 | * バージョンを更新する際自前でダウンロードしてくる必要がある 42 | * 既にあるプロジェクトのVRCHierarchyHighlighterを更新するときは元のを一旦削除してから再度突っ込む必要がある 43 | 44 | です. 他の方法を比べてこれが手間では無いと判断できれば慣れ親しんだこの方法は簡単です. 45 | 46 | BOOTHまたはgithubのリリースページからダウンロードしたunitypackageをプロジェクトのAssetsフォルダ直下に突っ込んでください 47 | 48 | ## 使い方 49 | 50 | 導入するとHierarchyが階層ごとにハイライトされます 51 | 52 | 設定パネルはUnityのメニューバーから `Window -> VRCHierarchyHighlighter` を選択して表示できます.
53 | 設定パネルからはポリゴン数の表示や, ヒエラルキに存在するゲームオブジェクトの種類を表示するための設定等があります. 54 | 55 | ## 捕捉 56 | 57 | このプロジェクトはMIT Licenseとなっているため、改造して再配布など自由です。 58 | より見やすいアイコンだったり、表示方法があれば勝手にやってもらって構いません。 59 | ただし、ライセンスに準拠し保持者であるわたしの名前を見える場所に表記する必要があります。 60 | 61 | ## 注意 62 | 63 | コンポーネント名を文字列情報でマッチさせているため、 64 | オブジェクト名に明示的にコンポーネント名を含めていた場合は誤って判定されるケースがあります。 65 | 66 | ## 更新履歴 67 | 68 | この履歴はCHANGELOG.md形式に移行予定です 69 | 70 | ``` 71 | 2024.08.30.0 72 | * narazakaさんのPRを取り込みました 73 | * 頂点数の表示がポリゴン数へと変更になります 74 | * 上記調整に伴い変数・関数名に変更を入れています 75 | 76 | 2024.08.26.0 77 | * narazakaさんとanatawa12さんのPRを取り込みました 78 | * メッシュが存在しないSkinnedMeshRendererが存在する場合のエラーの回避 79 | * DynamicBoneの探索を始めとした負荷に纏わる最適化 80 | * 対応ありがとうございます! 81 | * UnityPackageManager, VRChatPackageManagerに則したプロジェクト構成に変更しました 82 | * これによりUnityPackageManagerおよびVRChatPackageManagerによって管理することが可能となります 83 | * このリリース時点でコミュニティ用のリポジトリが招待制のためVCCからは検索が行えません. VCCから導入する場合は自前で指定する必要があります 84 | * 導入の最低Unity最低バージョンは2019.4となります 85 | * .gitignoreにmetaファイルを許可するよう変更を加えました 86 | * Unityによって自動生成されたmetaファイルがリポジトリに追加されています 87 | * 各パッケージマネージャへの対応に伴いリソースディレクトリの探索をmetaファイルのGUIDベースに変更しています 88 | * そのため, metaファイルに変更を加えると機構が破綻するためご注意ください 89 | 90 | 2022.04.25.1 91 | * [VRChat] Physics Bone対応修正 92 | * ワールド向けSDKにはPhysBoneコンポーネントが現状含まれないようなので、突貫で動作するよう修正しました 93 | 94 | 2022.04.25.0 95 | * [VRChat] Physics Bone対応 96 | * VRCPhysBone, VRCPhysBoneCollider用のアイコンを用意し, 描画するようにしました. 97 | 98 | 2021.07.28.0 99 | * Unity2019LTS対応 (2) 100 | * オブジェクトアクティブ状態のトグルを再実装 101 | * Unityで標準対応されたトグル機能は表示状態を変えるのみでアクティブ状態を変えるものではなかったため, 再実装しました。標準機能と使い分けてください 102 | * 新しい方式では各オブジェクトのアイコン部分をクリックすることでアクティブ状態を切り替える事が出来ます(アイコンが無くても大丈夫です) 103 | * 設定パネル "Enable Object Toggle Checkbox" よりこの機能を有効にするかどうか切り替える事が出来ます 104 | * 設定パネル "Show Toggle Icons" によりマウスオーバー時のxアイコン表示を切り替える事ができます("Enable Object Toggle Checkbox"と連動しています) 105 | * 新しいハイライトモード "Left" の実装 106 | * Leftを選択すると左側のみハイライトが表示されます. Underモードと同様限られた部分のみハイライトを行うため, 見やすくなります. 107 | * 複数モードが追加されたため, モード選択を設定パネルのコンボボックスから行えるようにしました. 108 | 109 | 2021.07.27.0 110 | * Unity2019LTS正式対応 111 | * 不具合がある, またprefabのアイコンを消してしまうため, オブジェクトのトグルボタンは廃止しました 112 | * この機能は2019から標準搭載されましたので, そちらをお使いください. https://docs.unity3d.com/ja/2019.4/Manual/SceneVisibility.html 113 | * ヒエラルキ左部のアイコン領域を隠してしまわないよう, オブジェクトアイコンを右に移動しました 114 | 115 | 2020.12.26.0 116 | * Unity2019ダークモードへの対応 117 | * Unity2018からUnity2019に移行した際、またその逆の場合はそれぞれデフォルトの設定が自動的に適用されます 118 | * 上手く適用されない場合は `Window -> VRCHierarchyHighlighter` から設定パネルを表示し、その中の `Default` ボタンを押してください 119 | * 設定できる色空間設定の範囲の見直しを行いました 120 | 121 | 2020.11.25.0 122 | * アンダーラインハイライトモードの実装。オプションから設定出来ます 123 | * オブジェクトをヒエラルキ上からon/off出来るチェックボックスを実装。オプションから設定出来ます 124 | * ダークモード対応準備 125 | * バージョン表記を追加 126 | 127 | 2020.11.24.0 128 | ヒエラルキに存在するSceneの行はハイライトしないようにしました。 129 | 130 | 2020.11.17.0 131 | SDK3 (Avaters) に含まれる `VRC Avatar Descriptor` に対応していなかったため、対応を行いました。 132 | 133 | 2020.08.17.0 134 | SDK3(Avaters, Worlds)ではコンポーネントの名前空間及び名称が変更されているため、それに対応する変更を行いました。 135 | この変更は応急的なものであり、他の場所で `MirrorRefrection` や `AvaterDescriptor` といったコンポーネントを定義していた場合は影響が及ぶ場合があります。 136 | 137 | 2018.10.17.0 138 | マージしたPRの変更点が反映されたバージョンです 139 | このバージョンには 140 | * Dynamic Boneコンポーネントの扱いの修正 141 | * Unityのビルトインアイコンがある場合はそれを使うように修正 142 | などの対応が含まれます。(詳細はリポジトリのCloseされたPR, #2~#4を参照) 143 | Thanks for contribution, @esperecyan ! 144 | 145 | 2019.08.03.0 146 | 修正 147 | * DynamicBoneColliderが含まれていた場合に以降のオブジェクトが描画されなくなる不具合を修正 148 | 149 | 2019.08.02.0 150 | 機能を追加 151 | * 新たなコンポーネント対応 152 | * AudioSource, LightProbeGroup, ReflectionProbe, Light, VRC_MirrorReflection 153 | 修正 154 | * 既存のアイコンを修正 155 | * DynamicBone, MeshRenderer, SkinnedMeshRenderer 156 | * コンポーネントの判定を名前ベースではなく型ベースに変更 157 | 158 | 2019.07.25.0 159 | 機能を追加 160 | * コントロールパネルの実装(Window -> VRCHierarchyHighlighter) 161 | * ハイライトの色をHSVで変更できるようにしました 162 | * アイコン/ハイライト/頂点数カウント(新機能)のon/offをできるようにしました 163 | * SkinnedMeshRendererの頂点数をヒエラルキから確認できるようにしました(デフォルトoff) 164 | * DynamicBoneに有効なターゲットが指定されていない場合、アイコンが薄くなるようにしました 165 | * MeshRendererのアイコンを表示するようにしました 166 | 167 | 2019.05.19.0 168 | バグを修正 169 | 実行モードから戻ると何故かメンバが初期化され、アイコンリソースが解放されてしまう問題に対処 170 | 171 | 2019.04.27.0 172 | 重篤なバグを修正 173 | 例えば、既にDynamicBoneが設定されているアバターのprefabをHierarchyに読み込んだ場合、 174 | DynamicBoneが存在しない場合は該当オブジェクトがnullとなってしまい、VRCHierarchyHighlighterが 175 | メモリアクセスエラーによってエラーで中断されてしまい、以降のGameObjectが描画されない問題がありました 176 | ``` 177 | 178 | Copyright(c) 2019-201 AzuriteLab 179 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0369f4dc23d65444cba8a1aeb6e3d54a 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.azlab.vrc_hierarchy_highlighter", 3 | "version": "1.1.1", 4 | "displayName": "VRCHierarchyHighlighter", 5 | "description": "Hierarchy Highlighter for VRChat", 6 | "unity": "2019.4", 7 | "keywords": [ 8 | "package", 9 | "vrchat" 10 | ], 11 | "author": { 12 | "name": "azurite" 13 | }, 14 | "legacyFolders" : { 15 | "Assets\\VRCHierarchyHighlighter" : "" 16 | }, 17 | "url" : "https://github.com/AzuriteLab/VRCHierarchyHighlighter/releases/download/v2024.08.30.0/com.azlab.vrc_hierarchy_highlighter-1.1.1.zip", 18 | "documentationUrl": "https://github.com/AzuriteLab/VRCHierarchyHighlighter", 19 | "license": "MIT", 20 | "licensesUrl": "https://opensource.org/license/mit", 21 | "category": "Utility" 22 | } --------------------------------------------------------------------------------