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); } }
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)); }
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)); }