Exemple #1
0
        /// <summary>
        /// Try to find a CinemachineBrain to associate with a
        /// Cinemachine Virtual Camera.  The first CinemachineBrain
        /// in which this Cinemachine Virtual Camera is live will be used.
        /// If none, then the first active CinemachineBrain will be used.
        /// Brains with OutputCamera == null will not be returned.
        /// Final result may be null.
        /// </summary>
        /// <param name="vcam">Virtual camera whose potential brain we need.</param>
        /// <returns>First CinemachineBrain found that might be
        /// appropriate for this vcam, or null</returns>
        public CinemachineBrain FindPotentialTargetBrain(ICinemachineCamera vcam)
        {
            int numBrains = BrainCount;

            if (vcam != null && numBrains > 1)
            {
                for (int i = 0; i < numBrains; ++i)
                {
                    CinemachineBrain b = GetActiveBrain(i);
                    if (b != null && b.OutputCamera != null && b.IsLive(vcam))
                    {
                        return(b);
                    }
                }
            }
            for (int i = 0; i < numBrains; ++i)
            {
                CinemachineBrain b = GetActiveBrain(i);
                if (b != null && b.OutputCamera != null)
                {
                    return(b);
                }
            }
            return(null);
        }
Exemple #2
0
    IEnumerator <float> StartToggle(InputProperty _inputProperty)
    {
        yield return(Timing.WaitForOneFrame);

        while (brain.IsLive(enterCamera))
        {
            yield return(Timing.WaitForOneFrame);

            if (_inputProperty.GetInputDown())
            {
                break;
            }
        }
        DeactivateSwitchObjects();
        ExitCamera();
    }
 private void OnCameraSwapEvent(CinemachineVirtualCamera vcam)
 {
     if (vcam != null)
     {
         if (!cinemachineBrain.IsLive(vcam))
         {
             cinemachineBrain.ActiveVirtualCamera.Priority = 1;
             vcam.Priority = 100;
         }
     }
     // null indicates default camera. in our case the free look camera
     else if (vcam == null)
     {
         if (!cinemachineBrain.IsLive(freeLookVCam))
         {
             cinemachineBrain.ActiveVirtualCamera.Priority = 1;
             freeLookVCam.Priority = 100;
         }
     }
 }
Exemple #4
0
        protected virtual void OnGUI()
        {
            // Draw the camera guides
            if (Target == null || !CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
            {
                return;
            }

            // If inspector is collapsed in the vcam editor, don't draw the guides
            if (!VcamStageEditor.ActiveEditorRegistry.IsActiveEditor(this))
            {
                return;
            }

            // Don't draw the guides if rendering to texture
            var vcam = Target.VirtualCamera;
            CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(vcam);

            if (brain == null || (brain.OutputCamera.activeTexture != null && CinemachineCore.Instance.BrainCount > 1))
            {
                return;
            }

            // Screen guides
            bool isLive = targets.Length <= 1 && brain.IsLive(vcam, true);

            m_ScreenGuideEditor.OnGUI_DrawGuides(isLive, brain.OutputCamera, Target.VcamState.Lens, true);

            // Draw an on-screen gizmo for the target
            if (Target.LookAtTarget != null && isLive)
            {
                Vector3 targetScreenPosition = brain.OutputCamera.WorldToScreenPoint(Target.TrackedPoint);
                if (targetScreenPosition.z > 0)
                {
                    targetScreenPosition.y = Screen.height - targetScreenPosition.y;

                    GUI.color = CinemachineSettings.ComposerSettings.TargetColour;
                    Rect  r    = new Rect(targetScreenPosition, Vector2.zero);
                    float size = (CinemachineSettings.ComposerSettings.TargetSize
                                  + CinemachineScreenComposerGuides.kGuideBarWidthPx) / 2;
                    GUI.DrawTexture(r.Inflated(new Vector2(size, size)), Texture2D.whiteTexture);
                    size -= CinemachineScreenComposerGuides.kGuideBarWidthPx;
                    if (size > 0)
                    {
                        Vector4 overlayOpacityScalar
                                  = new Vector4(1f, 1f, 1f, CinemachineSettings.ComposerSettings.OverlayOpacity);
                        GUI.color = Color.black * overlayOpacityScalar;
                        GUI.DrawTexture(r.Inflated(new Vector2(size, size)), Texture2D.whiteTexture);
                    }
                }
            }
        }
Exemple #5
0
 /// <summary>
 /// Signal that the virtual camera's content is discontinuous WRT the previous frame.
 /// If the camera is live, then all CinemachineBrains that are showing it will send a cut event.
 /// </summary>
 public void GenerateCameraCutEvent(ICinemachineCamera vcam)
 {
     if (vcam != null)
     {
         for (int i = 0; i < BrainCount; ++i)
         {
             CinemachineBrain b = GetActiveBrain(i);
             if (b != null && b.IsLive(vcam))
             {
                 b.m_CameraCutEvent.Invoke(b);
             }
         }
     }
 }
Exemple #6
0
 /// <summary>
 /// Is this virtual camera currently actively controlling any Camera?
 /// </summary>
 public bool IsLive(ICinemachineCamera vcam)
 {
     if (vcam != null)
     {
         for (int i = 0; i < BrainCount; ++i)
         {
             CinemachineBrain b = GetActiveBrain(i);
             if (b != null && b.IsLive(vcam))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Exemple #7
0
 public void CamDisplay()
 {
     Brain.IsLive(currentCam, true);
 }