Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,21 @@ public override VisualElement CreateInspectorGUI()

#if CINEMACHINE_URP || CINEMACHINE_PIXEL_PERFECT_2_0_3
this.AddMissingCmCameraHelpBox(ux);

var infoBox = ux.AddChild(new HelpBox(
"This component is driving the Pixel Perfect Camera component on the Unity Camera.",
HelpBoxMessageType.Info));
var helpBox = ux.AddChild(new HelpBox(
"This component requires an active Pixel Perfect Camera component on the Unity Camera.",
HelpBoxMessageType.Warning));

ux.TrackAnyUserActivity(() =>
{
var pp = target as CinemachinePixelPerfect;
bool isValid = pp.HasValidPixelPerfectCamera();
infoBox.SetVisible(isValid && pp.enabled);
helpBox.SetVisible(!isValid);
});
#else
ux.Add(new HelpBox("This component is only valid within URP projects", HelpBoxMessageType.Warning));
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

#if CINEMACHINE_URP || CINEMACHINE_PIXEL_PERFECT_2_0_3

#if CINEMACHINE_URP
using PixelPerfectCamera = UnityEngine.Rendering.Universal.PixelPerfectCamera;
#else
using PixelPerfectCamera = UnityEngine.U2D.PixelPerfectCamera;
#endif

namespace Unity.Cinemachine
{
/// <summary>
Expand Down Expand Up @@ -35,28 +41,33 @@ protected override void PostPipelineStageCallback(
if (brain == null || !brain.IsLiveChild(vcam))
return;

#if CINEMACHINE_URP
#if UNITY_2023_2_OR_NEWER
UnityEngine.Rendering.Universal.PixelPerfectCamera pixelPerfectCamera;
#else
UnityEngine.Experimental.Rendering.Universal.PixelPerfectCamera pixelPerfectCamera;
#endif
#elif CINEMACHINE_PIXEL_PERFECT_2_0_3
UnityEngine.U2D.PixelPerfectCamera pixelPerfectCamera;
#endif
brain.TryGetComponent(out pixelPerfectCamera);
if (pixelPerfectCamera == null || !pixelPerfectCamera.isActiveAndEnabled)
var pixelPerfectCamera = GetPixelPerfectCamera(vcam, true);
if (pixelPerfectCamera == null)
return;

#if UNITY_EDITOR
if (!UnityEditor.EditorApplication.isPlaying && !pixelPerfectCamera.runInEditMode)
return;
#endif

var lens = state.Lens;
lens.OrthographicSize = pixelPerfectCamera.CorrectCinemachineOrthoSize(lens.OrthographicSize);
state.Lens = lens;
}

PixelPerfectCamera GetPixelPerfectCamera(CinemachineVirtualCameraBase vcam, bool liveOnly)
{
var brain = CinemachineCore.FindPotentialTargetBrain(vcam);
if (brain == null || (liveOnly && !brain.IsLiveChild(vcam)))
return null;
var camera = brain.OutputCamera;
if (camera == null || !camera.TryGetComponent(out PixelPerfectCamera pixelPerfectCamera)
|| !pixelPerfectCamera.isActiveAndEnabled)
return null;
return pixelPerfectCamera;
}

// Used by inspector
internal bool HasValidPixelPerfectCamera()
=> TryGetComponent<CinemachineVirtualCameraBase>(out var vcam) && GetPixelPerfectCamera(vcam, false) != null;
}
}
#else
Expand Down