From 3e5782d44c6904df2b5d978977c7d9f23add3005 Mon Sep 17 00:00:00 2001 From: arthurkehrwald <50906979+arthurkehrwald@users.noreply.github.com> Date: Sun, 8 Sep 2024 15:05:21 +0200 Subject: [PATCH] Check for null mesh --- .../VPT/Bumper/BumperComponent.cs | 92 ++++++++++--------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/VisualPinball.Unity/VisualPinball.Unity/VPT/Bumper/BumperComponent.cs b/VisualPinball.Unity/VisualPinball.Unity/VPT/Bumper/BumperComponent.cs index ccc1de0d2..2b6e8ad89 100644 --- a/VisualPinball.Unity/VisualPinball.Unity/VPT/Bumper/BumperComponent.cs +++ b/VisualPinball.Unity/VisualPinball.Unity/VPT/Bumper/BumperComponent.cs @@ -197,32 +197,34 @@ public override IEnumerable SetReferencedData(BumperData data, Ta // children visibility foreach (var mf in GetComponentsInChildren()) { - var mr = mf.GetComponent(); - switch (mf.sharedMesh.name) { - case SkirtMeshName: - mf.gameObject.SetActive(data.IsSocketVisible); - if (!string.IsNullOrEmpty(data.SocketMaterial)) { - mr.sharedMaterial = materialProvider.MergeMaterials(data.SocketMaterial, mr.sharedMaterial); - } - break; - case BaseMeshName: - mf.gameObject.SetActive(data.IsBaseVisible); - if (!string.IsNullOrEmpty(data.BaseMaterial)) { - mr.sharedMaterial = materialProvider.MergeMaterials(data.BaseMaterial, mr.sharedMaterial); - } - break; - case CapMeshName: - mf.gameObject.SetActive(data.IsCapVisible); - if (!string.IsNullOrEmpty(data.CapMaterial)) { - mr.sharedMaterial = materialProvider.MergeMaterials(data.CapMaterial, mr.sharedMaterial); - } - break; - case RingMeshName: - mf.gameObject.SetActive(data.IsRingVisible); - if (!string.IsNullOrEmpty(data.RingMaterial)) { - mr.sharedMaterial = materialProvider.MergeMaterials(data.RingMaterial, mr.sharedMaterial); - } - break; + if (mf.sharedMesh) { + var mr = mf.GetComponent(); + switch (mf.sharedMesh.name) { + case SkirtMeshName: + mf.gameObject.SetActive(data.IsSocketVisible); + if (!string.IsNullOrEmpty(data.SocketMaterial)) { + mr.sharedMaterial = materialProvider.MergeMaterials(data.SocketMaterial, mr.sharedMaterial); + } + break; + case BaseMeshName: + mf.gameObject.SetActive(data.IsBaseVisible); + if (!string.IsNullOrEmpty(data.BaseMaterial)) { + mr.sharedMaterial = materialProvider.MergeMaterials(data.BaseMaterial, mr.sharedMaterial); + } + break; + case CapMeshName: + mf.gameObject.SetActive(data.IsCapVisible); + if (!string.IsNullOrEmpty(data.CapMaterial)) { + mr.sharedMaterial = materialProvider.MergeMaterials(data.CapMaterial, mr.sharedMaterial); + } + break; + case RingMeshName: + mf.gameObject.SetActive(data.IsRingVisible); + if (!string.IsNullOrEmpty(data.RingMaterial)) { + mr.sharedMaterial = materialProvider.MergeMaterials(data.RingMaterial, mr.sharedMaterial); + } + break; + } } } @@ -248,24 +250,26 @@ public override BumperData CopyDataTo(BumperData data, string[] materialNames, s data.IsRingVisible = false; data.IsSocketVisible = false; foreach (var mf in GetComponentsInChildren(true)) { - var mr = mf.gameObject.GetComponent(); - switch (mf.sharedMesh.name) { - case SkirtMeshName: - data.IsSocketVisible = mf.gameObject.activeInHierarchy; - CopyMaterialName(mr, materialNames, textureNames, ref data.SocketMaterial); - break; - case BaseMeshName: - data.IsBaseVisible = mf.gameObject.activeInHierarchy; - CopyMaterialName(mr, materialNames, textureNames, ref data.BaseMaterial); - break; - case CapMeshName: - data.IsCapVisible = mf.gameObject.activeInHierarchy; - CopyMaterialName(mr, materialNames, textureNames, ref data.CapMaterial); - break; - case RingMeshName: - data.IsRingVisible = mf.gameObject.activeInHierarchy; - CopyMaterialName(mr, materialNames, textureNames, ref data.RingMaterial); - break; + if (mf.sharedMesh) { + var mr = mf.gameObject.GetComponent(); + switch (mf.sharedMesh.name) { + case SkirtMeshName: + data.IsSocketVisible = mf.gameObject.activeInHierarchy; + CopyMaterialName(mr, materialNames, textureNames, ref data.SocketMaterial); + break; + case BaseMeshName: + data.IsBaseVisible = mf.gameObject.activeInHierarchy; + CopyMaterialName(mr, materialNames, textureNames, ref data.BaseMaterial); + break; + case CapMeshName: + data.IsCapVisible = mf.gameObject.activeInHierarchy; + CopyMaterialName(mr, materialNames, textureNames, ref data.CapMaterial); + break; + case RingMeshName: + data.IsRingVisible = mf.gameObject.activeInHierarchy; + CopyMaterialName(mr, materialNames, textureNames, ref data.RingMaterial); + break; + } } }