Пример #1
0
    public void ApplyCMDofParam(MotionType type, Vector3 followOffset, Vector3 trackedObjectOffset, float cmFieldOfView, float pitchDamping, float yawDamping, float rollDamping, float screenY)
    {
        CMType cmType = CMType.Notset;

        if (type == MotionType.Dof4)
        {
            cmType = CMType.Jet;
        }
        else if (type == MotionType.Dof6)
        {
            cmType = CMType.JetSpeedUp;
        }

        if (cmType != CMType.Notset)
        {
            CinemachineVirtualCamera cm            = GetCM_VirtualCamera(cmType);
            CinemachineTransposer    bodyComponent = cm.GetCinemachineComponent(CinemachineCore.Stage.Body) as CinemachineTransposer;
            bodyComponent.m_FollowOffset = followOffset;
            bodyComponent.m_PitchDamping = pitchDamping;
            bodyComponent.m_YawDamping   = yawDamping;
            bodyComponent.m_RollDamping  = rollDamping;
            cm.m_Lens.FieldOfView        = cmFieldOfView;

            CinemachineComposer aimComponent = cm.GetCinemachineComponent(CinemachineCore.Stage.Aim) as CinemachineComposer;
            aimComponent.m_TrackedObjectOffset = trackedObjectOffset;
            aimComponent.m_ScreenY             = screenY;
        }
    }
Пример #2
0
    public void SetTrackedObjectOffset(CMType cmType, Vector3 trackedObjectOffset)
    {
        CinemachineVirtualCamera cm           = GetCM_VirtualCamera(cmType);
        CinemachineComposer      aimComponent = cm.GetCinemachineComponent(CinemachineCore.Stage.Aim) as CinemachineComposer;

        aimComponent.m_TrackedObjectOffset = trackedObjectOffset;
    }
Пример #3
0
    private void ApplyCMAxisSetting(CMType cmType
                                    , CMAxisSetting.CM axisSetting)
    {
        CinemachineFreeLook cm = GetCM_FreeLook(cmType);

        cm.m_XAxis.m_MaxSpeed = axisSetting.X.MaxSpeed;
        cm.m_YAxis.m_MaxSpeed = axisSetting.Y.MaxSpeed;
    }
Пример #4
0
    /// <summary>
    /// 不是及时生效的,目的是:
    ///		避免出现同时三个相机在插值
    ///		让上一次插值完成后再切换下一个相机
    /// </summary>
    public void RequestChangeCM(CMType cmType)
    {
        Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG
                                           , string.Format("Request Change CM {0}"
                                                           , cmType));

        m_ChangingCMs.Enqueue(cmType);
    }
Пример #5
0
    /// <summary>
    /// <see cref="RequestChangeCM(CMType)"/>
    /// </summary>
    private void DoLateUpdate_ChangeCM(float deltaTime)
    {
        m_ChangingCMBlendReaminTime = Mathf.Max(0.0f, m_ChangingCMBlendReaminTime - deltaTime);
        if (m_ChangingCMBlendReaminTime > 0 ||
            m_ChangingCMs.Count == 0 ||
            CinemachineCore.Instance.BrainCount > 1)
        {
            return;
        }

        CMType cmType = m_ChangingCMs.Dequeue();

        if (m_LastCMType == cmType)
        {
            Leyoutech.Utility.DebugUtility.LogWarning(CameraManager.LOG_TAG, "Repeat change CM to " + cmType);
            return;
        }

        if (!m_MainCMBrain.enabled)
        {
            m_MainCMBrain.enabled = true;
        }

        CinemachineBlendDefinition cinemachineBlendDefinition = m_MainCMBrain.m_CustomBlends.GetBlendForVirtualCameras(m_LastCMType.ToString(), cmType.ToString(), m_MainCMBrain.m_DefaultBlend);

        Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG
                                           , string.Format("Change CM form {0} to {1} use blend definition Style:{2} Time:{3}"
                                                           , m_LastCMType
                                                           , cmType
                                                           , cinemachineBlendDefinition.m_Style
                                                           , cinemachineBlendDefinition.m_Time));

        try
        {
            Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG, "Begin invoke CM Changed");
            _OnCMChanged?.Invoke(m_LastCMType, cmType);
            Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG, "End invoke CM Changed");
        }
        catch (Exception e)
        {
            Leyoutech.Utility.DebugUtility.LogError(CameraManager.LOG_TAG, "Invoke CM Changed Exception:\n" + e.ToString());
        }

        m_ChangingCMBlendReaminTime = cinemachineBlendDefinition.m_Time;

        TransitionBlendDefinition transitionBlendDefinition = m_MainCameraTransitionBlenderSettings.FindBlend(m_LastCMType.ToString(), cmType.ToString());

        m_CMs[(int)cmType].ApplyTransitionBlendDefinition(transitionBlendDefinition);
        m_CMs[(int)cmType].SetEnable(true);

        if (m_LastCMType != CMType.Notset)
        {
            m_CMs[(int)m_LastCMType].SetEnable(false);
        }

        m_LastCMType = cmType;
    }
Пример #6
0
 /// <summary>
 /// 强制切换机位
 /// 某些特殊情况下使用,可能会出现莫名其妙的问题
 /// </summary>
 public void ForceChangeCM(CMType cmType)
 {
     Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG
                                        , string.Format("Force Change CM {0}"
                                                        , cmType));
     m_ChangingCMs.Clear();
     m_ChangingCMs.Enqueue(cmType);
     m_ChangingCMBlendReaminTime = 0.0f;
     DoLateUpdate_ChangeCM(1.0f / 60.0f);
 }
Пример #7
0
    /// <summary>
    /// 只有这个<see cref="CinemachineFreeLook"/>能用
    /// </summary>
    public void SetCMFreeLookAxisMaxSpeed(CMType cmType, float maxSpeedX, float maxSpeedY)
    {
        Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG
                                           , string.Format("Set CM({0}) AxisMaxSpeed:({1:F2}, {2:F2})"
                                                           , cmType
                                                           , maxSpeedX
                                                           , maxSpeedY));

        CinemachineFreeLook cm = GetCM_FreeLook(cmType);

        cm.m_XAxis.m_MaxSpeed = maxSpeedX;
        cm.m_YAxis.m_MaxSpeed = maxSpeedY;
    }
Пример #8
0
    /// <summary>
    /// 只有这个<see cref="CinemachineFreeLook"/>能用
    /// </summary>
    public void SetCMFreeLookAxisValue(CMType cmType, float valueX, float valueY)
    {
        Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG
                                           , string.Format("Set CM({0}) AxisValue:({1:F2}, {2:F2})"
                                                           , cmType
                                                           , valueX
                                                           , valueY));

        CinemachineFreeLook cm = GetCM_FreeLook(cmType);

        cm.m_XAxis.Value = valueX;
        cm.m_YAxis.Value = valueY;
    }
Пример #9
0
    public void SetLookAt(CMType cmType, Transform lookAt)
    {
        Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG
                                           , string.Format("Set CM({0}) LookAt:({1})"
                                                           , cmType
                                                           , lookAt != null
                                        ? lookAt.name
                                        : "None"));

        CinemachineVirtualCameraBase cm = GetCM_VirtualCameraBase(cmType);

        cm.LookAt = lookAt;
    }
Пример #10
0
    /// <summary>
    /// 应用VirtualCamera的相机参数
    /// TODO 目前所有<see cref="CinemachineVirtualCamera"/>的<see cref="CinemachineCore.Stage.Body"/>都是<see cref="CinemachineTransposer"/>。如果以后不是这样,就要修改这里的逻辑
    /// </summary>
    private void ApplyCMParame_VirtualCamera(CMType cmType
                                             , float cmBodyFollowOffsetX
                                             , float cmBodyFollowOffsetY
                                             , float cmBodyFollowOffsetZ
                                             , float cmFieldOfView)
    {
        CinemachineVirtualCamera cm            = GetCM_VirtualCamera(cmType);
        CinemachineTransposer    bodyComponent = cm.GetCinemachineComponent(CinemachineCore.Stage.Body) as CinemachineTransposer;

        bodyComponent.m_FollowOffset = new Vector3(cmBodyFollowOffsetX
                                                   , cmBodyFollowOffsetY
                                                   , cmBodyFollowOffsetZ);
        cm.m_Lens.FieldOfView = cmFieldOfView;
    }
Пример #11
0
    /// <summary>
    /// 应用FreeLook的相机参数
    /// </summary>
    private void ApplyCMParame_FreeLook(CMType cmType
                                        , float cmTopRigHeight
                                        , float cmTopRigRadius
                                        , float cmMiddleRigHeight
                                        , float cmMiddleRigRadius
                                        , float cmBottomRigHeight
                                        , float cmBottomRigRadius
                                        , float cmFieldOfView)
    {
        CinemachineFreeLook cm = GetCM_FreeLook(cmType);

        cm.m_Orbits[0]        = new CinemachineFreeLook.Orbit(cmTopRigHeight, cmTopRigRadius);
        cm.m_Orbits[1]        = new CinemachineFreeLook.Orbit(cmMiddleRigHeight, cmMiddleRigRadius);
        cm.m_Orbits[2]        = new CinemachineFreeLook.Orbit(cmBottomRigHeight, cmBottomRigRadius);
        cm.m_Lens.FieldOfView = cmFieldOfView;
    }
Пример #12
0
    public override void Initialize()
    {
        base.Initialize();

        m_UpdateProperties = UpdatePropertyFlag.HalfTanFov
                             | UpdatePropertyFlag.Transform;

        m_MainCMBrain      = gameObject.GetComponent <CinemachineBrain>();
        m_PostProcessLayer = gameObject.GetComponent <PostProcessLayer>();
        m_HXVCamera        = gameObject.GetComponent <HxVolumetricCamera>();

        m_LastCMType = CMType.Notset;
        m_CMs        = new CMData[(int)CMType.Count];
        Transform cmRoot = transform.parent;

        for (int iCM = 0; iCM < m_CMs.Length; iCM++)
        {
            CMData cmData = new CMData(cmRoot.Find(CM_GAMEOBJECT_NAME_STARTWITHS + ((CMType)iCM).ToString())
                                       .GetComponent <CinemachineVirtualCameraBase>()
                                       , (CMType)iCM);
            m_CMs[iCM] = cmData;
        }

#if UNITY_EDITOR
        // 预览场景时,不需要读表里的相机参数,也不需要切换手柄鼠标
        if (!CameraManager._s_IsRoaming)
#endif
        {
            GamingConfig gamingConfig = ((CfgEternityProxy)GameFacade.Instance.RetrieveProxy(ProxyName.CfgEternityProxy)).GetGamingConfig(1).Value;
            m_CM_Character_AxisSetting = new CMAxisSetting(new CMAxisSetting.CM(new CMAxisSetting.Axis(gamingConfig.CmCharacter.Value.XaxisMaxSpeedMouse)
                                                                                , new CMAxisSetting.Axis(gamingConfig.CmCharacter.Value.YaxisMaxSpeedMouse))
                                                           , new CMAxisSetting.CM(new CMAxisSetting.Axis(gamingConfig.CmCharacter.Value.XaxisMaxSpeedGamepad)
                                                                                  , new CMAxisSetting.Axis(gamingConfig.CmCharacter.Value.YaxisMaxSpeedGamepad)));
            InputManager.Instance.OnInputDeviceChanged += OnInputDeviceChanged;
        }

        m_ChangingCMs = new Queue <CMType>();
        m_ChangingCMBlendReaminTime = 0;

        m_CameraRenderer = new CRenderer.MainCameraRenderer();
        m_CameraRenderer.Initialize(GetCameraName(), m_Camera, m_CameraRendererResource);

        _ForDebug.GUIEnable = new bool[(int)GUIType.Count];

        TrackCaptureManager.GetInstance().InitializeCapturer("Main Camera", this).StartCapture();
    }
Пример #13
0
    public void SetFarClipPlane(CMType cmType, float far)
    {
        CMData cm = m_CMs[(int)cmType];

        switch (cm.GetCMCameraType())
        {
        case CMCameraType.FreeLook:
            cm.GetCM_FreeLook().m_Lens.FarClipPlane = far;
            break;

        case CMCameraType.VirtualCamera:
            cm.GetCM_VirtualCamera().m_Lens.FarClipPlane = far;
            break;

        default:
            Leyoutech.Utility.DebugUtility.Assert(false, CameraManager.LOG_TAG, $"Not support CameraType({cm.GetCMCameraType()})");
            break;
        }
    }
Пример #14
0
    /// <summary>
    /// 只有这个<see cref="CinemachineFreeLook"/>能用
    /// </summary>
    public void SetFollowAndLookAtCMFreeLookAxisValue(CMType cmType, Transform follow, Transform lookAt, float valueX, float valueY)
    {
        Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG
                                           , string.Format("Set CM({0}) Follow:({1}) LookAt:({2}) AxisValue:({3:F2}, {4:F2})"
                                                           , cmType
                                                           , follow != null
                                        ? follow.name
                                        : "None"
                                                           , lookAt != null
                                        ? lookAt.name
                                        : "None"
                                                           , valueX
                                                           , valueY));

        CinemachineFreeLook cm = GetCM_FreeLook(cmType);

        cm.Follow        = follow;
        cm.LookAt        = lookAt;
        cm.m_XAxis.Value = valueX;
        cm.m_YAxis.Value = valueY;
    }
Пример #15
0
        public CMData(CinemachineVirtualCameraBase cm, CMType cmType)
        {
            m_CM_VirtualCameraBase = cm;
            m_CMType = cmType;

            m_CM_VirtualCamera = null;
            m_CM_FreeLook      = null;
            if (m_CM_VirtualCameraBase is CinemachineVirtualCamera)
            {
                m_CMCameraType     = CMCameraType.VirtualCamera;
                m_CM_VirtualCamera = m_CM_VirtualCameraBase as CinemachineVirtualCamera;
            }
            else if (m_CM_VirtualCameraBase is CinemachineFreeLook)
            {
                m_CMCameraType = CMCameraType.FreeLook;
                m_CM_FreeLook  = m_CM_VirtualCameraBase as CinemachineFreeLook;
            }
            else
            {
                m_CMCameraType = CMCameraType.Unknown;
                Leyoutech.Utility.DebugUtility.Assert(false
                                                      , CameraManager.LOG_TAG
                                                      , string.Format("Not support CMCameraType({0}) in CMType({1})"
                                                                      , m_CM_VirtualCameraBase.GetType()
                                                                      , m_CMType)
                                                      , cm);
            }

            Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG
                                               , string.Format("Initialized CM CMType({0}) CMCameraType({1})"
                                                               , m_CMType
                                                               , m_CMCameraType)
                                               , cm);

            SetEnable(false);
        }
Пример #16
0
    private void DoGUICM(Config config)
    {
        config.BeginToolbarHorizontal();
        if (config.ToolbarButton(m_MainCMBrain.enabled, "Brain"))
        {
            m_MainCMBrain.enabled = !m_MainCMBrain.enabled;
        }
        for (int iCM = 0; iCM < m_CMs.Length; iCM++)
        {
            CMType cmType = (CMType)iCM;
            if (config.ToolbarButton(m_CMs[iCM].IsLive(), cmType.ToString()))
            {
                RequestChangeCM(cmType);
            }
        }
        config.EndHorizontal();

        if (!_ForDebug.DisplayDetail)
        {
            return;
        }

        for (int iCM = 0; iCM < m_CMs.Length; iCM++)
        {
            if (!m_CMs[iCM].IsLive())
            {
                continue;
            }

            CinemachineVirtualCameraBase iterCM = m_CMs[iCM].GetCM_VirtualCameraBase();
            GUILayout.Label(((CMType)iCM).ToString()
                            , (int)m_LastCMType == iCM
                                        ? config.ImportantLabelStyle
                                        : config.LabelStyle);

            GUILayout.Box(string.Format("Priority:{0} Follow:({1}) LookAt:({2})"
                                        , iterCM.Priority
                                        , iterCM.Follow != null
                                                ? iterCM.Follow.name
                                                : "None"
                                        , iterCM.LookAt != null
                                                ? iterCM.LookAt.name
                                                : "None")
                          , config.BoxStyle);

            TransitionBlendDefinition transitionBlendDefinition = m_CMs[iCM].GetTransitionBlendDefinition();
            GUILayout.Box(string.Format("Transition: BlendHint({0}) InheritPosition({1})"
                                        , transitionBlendDefinition.BlendHint
                                        , transitionBlendDefinition.InheritPosition)
                          , config.BoxStyle);

            if (iterCM.Follow)
            {
                Vector3 cameraToFollow = iterCM.Follow.position - GetCamera().transform.position;
                GUILayout.Box(string.Format("To Follow Distance:{0:F2} - Height:{1:F2} - Horizontal:{2:F2}"
                                            , cameraToFollow.magnitude
                                            , cameraToFollow.y
                                            , new Vector2(cameraToFollow.x, cameraToFollow.z).magnitude)
                              , config.BoxStyle);
            }

            if (iterCM is CinemachineFreeLook)
            {
                CinemachineFreeLook iterFreeLookCM = iterCM as CinemachineFreeLook;
                GUILayout.Box(string.Format("Axis: Value({0}) MaxSpeed({1})"
                                            , new Vector2(iterFreeLookCM.m_XAxis.Value, iterFreeLookCM.m_YAxis.Value)
                                            , new Vector2(iterFreeLookCM.m_XAxis.m_MaxSpeed, iterFreeLookCM.m_YAxis.m_MaxSpeed))
                              , config.BoxStyle);
            }
        }
    }
 public CommunicateReturnVO(CMType type) : base(type)
 {
 }
Пример #18
0
 public CinemachineFreeLook GetCM_FreeLook(CMType cmType)
 {
     return(m_CMs[(int)cmType].GetCM_FreeLook());
 }
Пример #19
0
 public CinemachineVirtualCamera GetCM_VirtualCamera(CMType cmType)
 {
     return(m_CMs[(int)cmType].GetCM_VirtualCamera());
 }
 public CommunicateVO(CMType cmType)
 {
     this.cmType = cmType;
     this.uuid   = Guid.NewGuid().ToString();
 }
Пример #21
0
    /// <summary>
    /// 只有这个<see cref="CinemachineFreeLook"/>能用
    /// </summary>
    public Vector2 GetCMFreeLookAxisMaxSpeed(CMType cmType)
    {
        CinemachineFreeLook cm = GetCM_FreeLook(cmType);

        return(new Vector2(cm.m_XAxis.m_MaxSpeed, cm.m_YAxis.m_MaxSpeed));
    }
 public CommunicateVO(CMType cmType)
 {
     this.cmType = cmType;
 }
Пример #23
0
 /// <summary>
 /// cmType是否再请求切换的队列里
 /// </summary>
 public bool HasInChanngingCMs(CMType cmType)
 {
     return(m_ChangingCMs.Contains(cmType));
 }