123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using System.IO;
- using UnityEngine;
- using UnityEngine.UI;
- using UnityEngine.TestTools;
- using NUnit.Framework;
- using System.Collections;
- using UnityEditor;
-
- public class NestedCanvas : IPrebuildSetup
- {
- Object m_GO1;
- Object m_GO2;
-
- const string kPrefabPath = "Assets/Resources/NestedCanvasPrefab.prefab";
-
- public void Setup()
- {
- #if UNITY_EDITOR
-
- var rootGO = new GameObject("RootGO");
-
- var rootCanvasGO = new GameObject("Canvas", typeof(Canvas), typeof(CanvasGroup));
- rootCanvasGO.transform.SetParent(rootGO.transform);
-
- var nestedCanvas = new GameObject("Nested Canvas", typeof(Canvas), typeof(Image));
- nestedCanvas.transform.SetParent(rootCanvasGO.transform);
-
- var nestedCanvasCamera = new GameObject("Nested Canvas Camera", typeof(Camera));
- nestedCanvasCamera.transform.SetParent(rootCanvasGO.transform);
-
- var rootCanvas = rootCanvasGO.GetComponent<Canvas>();
- rootCanvas.renderMode = RenderMode.WorldSpace;
- rootCanvas.worldCamera = nestedCanvasCamera.GetComponent<Camera>();
-
- if (!Directory.Exists("Assets/Resources/"))
- Directory.CreateDirectory("Assets/Resources/");
-
- UnityEditor.PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabPath);
- GameObject.DestroyImmediate(rootGO);
- #endif
- }
-
- [UnityTest]
- [Description("[UI] Button does not interact after nested canvas is used(case 892913)")]
- public IEnumerator WorldCanvas_CanFindCameraAfterDisablingAndEnablingRootCanvas()
- {
- m_GO1 = Object.Instantiate(Resources.Load("NestedCanvasPrefab"));
- yield return null;
-
- var nestedCanvasGo = GameObject.Find("Nested Canvas");
- var nestedCanvas = nestedCanvasGo.GetComponent<Canvas>();
- Assert.IsNotNull(nestedCanvas.worldCamera, "Expected the nested canvas worldCamera to NOT be null after loading the scene.");
-
- nestedCanvasGo.transform.parent.gameObject.SetActive(false);
- nestedCanvasGo.transform.parent.gameObject.SetActive(true);
- Assert.IsNotNull(nestedCanvas.worldCamera, "Expected the nested canvas worldCamera to NOT be null after the parent canvas has been re-enabled.");
- }
-
- [UnityTest]
- public IEnumerator WorldCanvas_CanFindTheSameCameraAfterDisablingAndEnablingRootCanvas()
- {
- m_GO2 = Object.Instantiate(Resources.Load("NestedCanvasPrefab"));
- yield return null;
-
- var nestedCanvasGo = GameObject.Find("Nested Canvas");
- var nestedCanvas = nestedCanvasGo.GetComponent<Canvas>();
- var worldCamera = nestedCanvas.worldCamera;
- nestedCanvasGo.transform.parent.gameObject.SetActive(false);
- nestedCanvasGo.transform.parent.gameObject.SetActive(true);
- Assert.AreEqual(worldCamera, nestedCanvas.worldCamera, "Expected the same world camera to be returned after the root canvas was disabled and then re-enabled.");
- }
-
- [UnityTest]
- public IEnumerator NestedCanvasHasProperInheritedAlpha()
- {
- GameObject root = (GameObject)Object.Instantiate(Resources.Load("NestedCanvasPrefab"));
- CanvasGroup group = root.GetComponentInChildren<CanvasGroup>();
- Image image = root.GetComponentInChildren<Image>();
-
- group.alpha = 0.5f;
-
- yield return null;
-
- Assert.True(image.canvasRenderer.GetInheritedAlpha() == 0.5f);
- GameObject.DestroyImmediate(root);
- }
-
- [TearDown]
- public void TearDown()
- {
- GameObject.DestroyImmediate(m_GO1);
- GameObject.DestroyImmediate(m_GO2);
- }
-
- [OneTimeTearDown]
- public void OneTimeTearDown()
- {
- #if UNITY_EDITOR
- AssetDatabase.DeleteAsset(kPrefabPath);
- #endif
- }
- }
|