using UnityEngine; using UnityEngine.TestTools; using NUnit.Framework; using System.Collections; using UnityEngine.UI; public class ParentCanvasIsSane { GameObject rootCanvas; GameObject rootObject; GameObject child1; CanvasGroup c1CanvasGroup; GameObject child2; GameObject child3; [SetUp] public void TestSetup() { // root GO // root Canvas // L child1 GO (RectTransform, CanvasGroup) // L child2 GO (RectTransform) // L child3 GO (Image) rootCanvas = new GameObject("root Canvas"); rootCanvas.AddComponent(); rootCanvas.AddComponent(); rootObject = new GameObject("root GO"); child1 = new GameObject("child1 GO"); child1.AddComponent(); c1CanvasGroup = child1.AddComponent(); child2 = new GameObject("child2 GO"); child2.AddComponent(); child3 = new GameObject("child3 GO"); child3.AddComponent(); child3.transform.SetParent(child2.transform); child2.transform.SetParent(child1.transform); child1.transform.SetParent(rootCanvas.transform); } [UnityTest] public IEnumerator RecalculatingAlphaOnReparentedInactiveObjectsDoesNotCrash() { Assert.IsNotNull(child3.GetComponent()); c1CanvasGroup.alpha = 0.5f; child1.SetActive(false); child1.transform.SetParent(rootObject.transform, true); // This will crash if child3.GetComponent().m_ParentCanvas is not null. yield return null; } }