private void Start()
        {
            if (OverlayCamera == default)
            {
                return;
            }

            if (OverlayCamera.GetUniversalAdditionalCameraData().renderType != CameraRenderType.Overlay && !OverwriteRenderType)
            {
                Debug.LogWarning($"Camera component in {OverlayCamera.gameObject.name} does not seems to be Overlay Camera. Set 'Overlay' to RenderType field.");
                return;
            }

            var originalCameraStack = new List <Camera>();

            if (OverlayCamera.GetUniversalAdditionalCameraData().renderType == CameraRenderType.Base)
            {
                originalCameraStack = OverlayCamera.GetUniversalAdditionalCameraData().cameraStack?.ToList();
                OverlayCamera.GetUniversalAdditionalCameraData().cameraStack?.Clear();
            }

            OverlayCamera.GetUniversalAdditionalCameraData().renderType = CameraRenderType.Overlay;
            OverlayCamera.depth = priority;

            TargetCameraData = FindObjectsOfType <Camera>()
                               .Select(x => (x.depth, data: x.GetUniversalAdditionalCameraData()))
                               .Where(x => x.data.renderType == CameraRenderType.Base)
                               .OrderByDescending(x => x.depth)
                               .FirstOrDefault()
                               .data;
            if (TargetCameraData == default)
            {
                return;
            }

            var cameraStack = TargetCameraData.cameraStack.ToList();

            cameraStack.Add(OverlayCamera);
            if (originalCameraStack != default && originalCameraStack.Any())
            {
                cameraStack.AddRange(originalCameraStack);
            }

            TargetCameraData.cameraStack.Clear();
            foreach (var c in cameraStack.OrderBy(x => x.depth))
            {
                TargetCameraData.cameraStack.Add(c);
            }
        }
Exemplo n.º 2
0
        public IEnumerator OverlayCameraが正しくCameraStackに追加される()
        {
            BaseCamera.GetUniversalAdditionalCameraData().renderType    = CameraRenderType.Base;
            OverlayCamera.GetUniversalAdditionalCameraData().renderType = CameraRenderType.Overlay;
            OverlayCamera.gameObject.AddComponent <AddOverlayCameraToCameraStack>();
            yield return(null);

            Assert.That(
                BaseCamera
                .GetUniversalAdditionalCameraData()
                .cameraStack
                .Contains(OverlayCamera),
                Is.True
                );
            yield return(SceneManager.UnloadSceneAsync(SingleScene));
        }
Exemplo n.º 3
0
        public IEnumerator OverwriteRenderTypeを真にするとCameraStackに追加される()
        {
            BaseCamera.GetUniversalAdditionalCameraData().renderType    = CameraRenderType.Base;
            OverlayCamera.GetUniversalAdditionalCameraData().renderType = CameraRenderType.Base;
            var addOverlayCameraToCameraStack = OverlayCamera.gameObject.AddComponent <AddOverlayCameraToCameraStack>();

            addOverlayCameraToCameraStack.GetType().GetField("overwriteRenderType", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(addOverlayCameraToCameraStack, true);
            yield return(null);

            Assert.That(
                BaseCamera
                .GetUniversalAdditionalCameraData()
                .cameraStack
                .Contains(OverlayCamera),
                Is.True
                );
            yield return(SceneManager.UnloadSceneAsync(SingleScene));
        }