You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.6 KiB
C#
103 lines
3.6 KiB
C#
1 year ago
|
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
|
||
|
}
|
||
|
}
|