diff --git a/Explorer/Assets/DCL/AvatarRendering/AvatarShape/Tests/Instantiate/AvatarInstantiatorSystemShould.cs b/Explorer/Assets/DCL/AvatarRendering/AvatarShape/Tests/Instantiate/AvatarInstantiatorSystemShould.cs index beb8b946bd4..60f77768364 100644 --- a/Explorer/Assets/DCL/AvatarRendering/AvatarShape/Tests/Instantiate/AvatarInstantiatorSystemShould.cs +++ b/Explorer/Assets/DCL/AvatarRendering/AvatarShape/Tests/Instantiate/AvatarInstantiatorSystemShould.cs @@ -160,7 +160,7 @@ private IWearable GetMockWearable(string materialName, string category) mockWearable.DTO.Returns(dto); - var rendererInfo = new AttachmentRegularAsset.RendererInfo(skinnedMeshRenderer, fakeABMaterial); + var rendererInfo = new AttachmentRegularAsset.RendererInfo(fakeABMaterial); var wearableAsset = new AttachmentRegularAsset(avatarGameObject, new List { rendererInfo }, null); wearableAsset.AddReference(); diff --git a/Explorer/Assets/DCL/AvatarRendering/Emotes/EmbeddedEmotesData.cs b/Explorer/Assets/DCL/AvatarRendering/Emotes/EmbeddedEmotesData.cs index 46ead683f8e..b3526a2fbc6 100644 --- a/Explorer/Assets/DCL/AvatarRendering/Emotes/EmbeddedEmotesData.cs +++ b/Explorer/Assets/DCL/AvatarRendering/Emotes/EmbeddedEmotesData.cs @@ -2,6 +2,7 @@ using DCL.AvatarRendering.Loading.Components; using DCL.AvatarRendering.Loading.DTO; using DCL.AvatarRendering.Wearables.Helpers; +using ECS.StreamableLoading; using ECS.StreamableLoading.AudioClips; using ECS.StreamableLoading.Common.Components; using ECS.StreamableLoading.Textures; @@ -122,9 +123,9 @@ private static AttachmentRegularAsset CreateAttachmentAsset(GameObject glb) var rendererInfos = new List(); foreach (SkinnedMeshRenderer? renderer in glb.GetComponentsInChildren()) - rendererInfos.Add(new AttachmentRegularAsset.RendererInfo(renderer, renderer.sharedMaterial)); + rendererInfos.Add(new AttachmentRegularAsset.RendererInfo(renderer.sharedMaterial)); - return new AttachmentRegularAsset(glb, rendererInfos, ECS.StreamableLoading.IStreamableRefCountData.Null.INSTANCE); + return new AttachmentRegularAsset(glb, rendererInfos, IStreamableRefCountData.Null.INSTANCE); } } } diff --git a/Explorer/Assets/DCL/AvatarRendering/Loading/Assets/AttachmentAssetBase.cs b/Explorer/Assets/DCL/AvatarRendering/Loading/Assets/AttachmentAssetBase.cs index 1ae96e50783..59513645f7b 100644 --- a/Explorer/Assets/DCL/AvatarRendering/Loading/Assets/AttachmentAssetBase.cs +++ b/Explorer/Assets/DCL/AvatarRendering/Loading/Assets/AttachmentAssetBase.cs @@ -1,6 +1,7 @@ using DCL.Optimization.Pools; using DCL.Profiling; using ECS.StreamableLoading; +using ECS.StreamableLoading.AssetBundles; using System; using System.Collections.Generic; using UnityEngine; @@ -61,19 +62,17 @@ protected override void DisposeInternal() public readonly struct RendererInfo { - public readonly SkinnedMeshRenderer SkinnedMeshRenderer; public readonly Material Material; - public RendererInfo(SkinnedMeshRenderer skinnedMeshRenderer, Material material) + public RendererInfo(Material material) { - SkinnedMeshRenderer = skinnedMeshRenderer; Material = material != null ? material : DefaultMaterial.New(); } } public string GetInstanceName() { - var assetBundleData = assetData as ECS.StreamableLoading.AssetBundles.AssetBundleData; + var assetBundleData = assetData as AssetBundleData; return assetBundleData != null ? assetBundleData.GetInstanceName() : $"NOT_AB_{MainAsset.name}"; } } diff --git a/Explorer/Assets/DCL/AvatarRendering/Loading/Assets/AttachmentAssetUtility.cs b/Explorer/Assets/DCL/AvatarRendering/Loading/Assets/AttachmentAssetUtility.cs index d354fd85875..cab6b67b40f 100644 --- a/Explorer/Assets/DCL/AvatarRendering/Loading/Assets/AttachmentAssetUtility.cs +++ b/Explorer/Assets/DCL/AvatarRendering/Loading/Assets/AttachmentAssetUtility.cs @@ -22,6 +22,14 @@ public static CachedAttachment InstantiateWearable(this IAttachmentsAssetsCache else { var instantiatedWearable = Object.Instantiate(originalAsset.MainAsset, parent); + + using PoolExtensions.Scope> meshRenderers = instantiatedWearable.GetComponentsInChildrenIntoPooledList(true); + + //A wearable cannot have a MeshRenderer, only SkinnedMeshRenderer. + //We need to destroy it form the source wearable + for (var i = 0; i < meshRenderers.Value.Count; i++) + Object.DestroyImmediate(meshRenderers.Value[i].gameObject); + instantiatedWearable.name = originalAsset.GetInstanceName(); cachedWearable = new CachedAttachment(originalAsset, instantiatedWearable, outlineCompatible); } diff --git a/Explorer/Assets/DCL/AvatarRendering/Wearables/Helpers/WearablePolymorphicBehaviour.cs b/Explorer/Assets/DCL/AvatarRendering/Wearables/Helpers/WearablePolymorphicBehaviour.cs index 5f56c0643dc..9eeaf76b68e 100644 --- a/Explorer/Assets/DCL/AvatarRendering/Wearables/Helpers/WearablePolymorphicBehaviour.cs +++ b/Explorer/Assets/DCL/AvatarRendering/Wearables/Helpers/WearablePolymorphicBehaviour.cs @@ -331,7 +331,7 @@ public static AttachmentRegularAsset ToRegularAsset(this StreamableLoadingResult using PoolExtensions.Scope> pooledList = go.GetComponentsInChildrenIntoPooledList(); foreach (SkinnedMeshRenderer skinnedMeshRenderer in pooledList.Value) - rendererInfos.Add(new AttachmentRegularAsset.RendererInfo(skinnedMeshRenderer, skinnedMeshRenderer.sharedMaterial)); + rendererInfos.Add(new AttachmentRegularAsset.RendererInfo(skinnedMeshRenderer.sharedMaterial)); return new AttachmentRegularAsset(go, rendererInfos, result.Asset); } @@ -346,7 +346,7 @@ public static AttachmentRegularAsset ToRegularAsset(this StreamableLoadingResult using PoolExtensions.Scope> pooledList = go.GetComponentsInChildrenIntoPooledList(); foreach (SkinnedMeshRenderer skinnedMeshRenderer in pooledList.Value) - rendererInfos.Add(new AttachmentRegularAsset.RendererInfo(skinnedMeshRenderer, skinnedMeshRenderer.sharedMaterial)); + rendererInfos.Add(new AttachmentRegularAsset.RendererInfo(skinnedMeshRenderer.sharedMaterial)); return new AttachmentRegularAsset(go, rendererInfos, result.Asset); } diff --git a/Explorer/Assets/DCL/AvatarRendering/Wearables/Systems/Load/LoadDefaultWearablesSystem.cs b/Explorer/Assets/DCL/AvatarRendering/Wearables/Systems/Load/LoadDefaultWearablesSystem.cs index 7b6bc033d6a..88d177ca761 100644 --- a/Explorer/Assets/DCL/AvatarRendering/Wearables/Systems/Load/LoadDefaultWearablesSystem.cs +++ b/Explorer/Assets/DCL/AvatarRendering/Wearables/Systems/Load/LoadDefaultWearablesSystem.cs @@ -91,7 +91,7 @@ public override void Initialize() foreach (var skinnedMeshRenderer in emptyDefaultWearable.GetComponentsInChildren()) { skinnedMeshRenderer.sharedMesh = mesh; - rendererInfos.Add(new AttachmentRegularAsset.RendererInfo(skinnedMeshRenderer, skinnedMeshRenderer.sharedMaterial)); + rendererInfos.Add(new AttachmentRegularAsset.RendererInfo(skinnedMeshRenderer.sharedMaterial)); } IWearable emptyWearable = wearableStorage.GetOrAddByDTO(wearableDTO, false);