Пример #1
0
 public bool IsBlendUse(VirtualCameraBase vcam)
 {
     if (activeBlend != null && activeBlend.IsUse(vcam))
     {
         return(true);
     }
     return(false);
 }
Пример #2
0
 public bool IsUse(VirtualCameraBase vcam)
 {
     if (vcam == camA || vcam == camB)
     {
         return(true);
     }
     return(false);
 }
Пример #3
0
    private CameraBlend CreateBlend(VirtualCameraBase camA, VirtualCameraBase camB, AnimationCurve blendCurve, float duration)
    {
        if (blendCurve == null || duration <= 0 || (camA == null && camB == null))
        {
            return(null);
        }

        return(new CameraBlend(camA, camB, blendCurve, duration, 0));
    }
Пример #4
0
 public CameraBlend(VirtualCameraBase a, VirtualCameraBase b, AnimationCurve curve, float duration, float t)
 {
     if (a == null || b == null)
     {
         throw new ArgumentException("Blend cameras cannot be null");
     }
     camA        = a;
     camB        = b;
     blendCurve  = curve;
     TimeInBlend = t;
     Duration    = duration;
 }
Пример #5
0
 public bool IsLive(VirtualCameraBase vcam)
 {
     if (activeCamera == vcam)
     {
         return(true);
     }
     if (IsBlendUse(vcam))
     {
         return(true);
     }
     return(false);
 }
Пример #6
0
    //选择一个合适的虚拟相机并把信息应用于unity 相机
    private void ProcessActiveCamera()
    {
        if (!isActiveAndEnabled)
        {
            return;
        }

        VirtualCameraBase previousCam = activeCamera;

        activeCamera = ActiveVirtualCamera;
        if (activeCamera != null)
        {
            if (previousCam != null && previousCam.VirtualCameraGameObject == null)
            {
                return;
            }

            //进行转移
            if (previousCam != null && previousCam != activeCamera)
            {
                float          duration = 0;
                AnimationCurve curve    = LookupBlendCurve(previousCam, activeCamera, out duration);
                activeBlend = CreateBlend(previousCam, activeCamera, curve, duration);
                //
                activeCamera.OnTransitionFromCamera(previousCam, DefaultWorldUp);
            }

            activeCamera.UpdateCameraInfo(DefaultWorldUp);
            CameraInfo info = activeCamera.CInfo;

            if (activeBlend != null)
            {
                if (activeBlend.IsComplete)
                {
                    activeBlend = null;
                    if (blendComplete != null)
                    {
                        blendComplete();
                    }
                }
                else
                {
                    activeBlend.UpdateCameraState(DefaultWorldUp);
                    info = activeBlend.CInfo;
                }
            }

            PushInfoToUnityCamera(info);
        }
    }
Пример #7
0
    private AnimationCurve LookupBlendCurve(VirtualCameraBase fromKey, VirtualCameraBase toKey, out float duration)
    {
        AnimationCurve blendCurve = toKey.defaultBlendDefinition.BlendCurve;

        if (toKey.customBlends != null)
        {
            blendCurve = toKey.customBlends.GetBlendCurveForVirtualCameras(fromKey, blendCurve);
        }

        var keys = blendCurve.keys;

        duration = (keys == null || keys.Length == 0) ? 0 : keys[keys.Length - 1].time;
        return(blendCurve);
    }
Пример #8
0
    public override void OnTransitionFromCamera(VirtualCameraBase fromCam, Vector3 worldUp)
    {
        base.OnTransitionFromCamera(fromCam, worldUp);

        if (!userSelfAngle)
        {
            if (fromCam is FreeLookCamera)
            {
                Quaternion q = Quaternion.LookRotation(fromCam.transform.forward);
                angleX = q.eulerAngles.x;
                angleY = q.eulerAngles.y;
            }
        }

        UpdateCameraInfo(worldUp);
    }
Пример #9
0
    //添加相机
    public void AddActiveCamera(VirtualCameraBase vcam)
    {
        // Bring it to the top of the list
        RemoveActiveCamera(vcam);

        // Keep list sorted by priority
        int insertIndex;

        for (insertIndex = 0; insertIndex < mActiveCameras.Count; ++insertIndex)
        {
            if (vcam.Priority >= mActiveCameras[insertIndex].Priority)
            {
                break;
            }
        }

        mActiveCameras.Insert(insertIndex, vcam);
    }
Пример #10
0
 //移除
 public void RemoveActiveCamera(VirtualCameraBase vcam)
 {
     mActiveCameras.Remove(vcam);
 }
Пример #11
0
 public override void OnTransitionFromCamera(VirtualCameraBase fromCam, Vector3 worldUp)
 {
     base.OnTransitionFromCamera(fromCam, worldUp);
 }
Пример #12
0
 //相机切换
 public virtual void OnTransitionFromCamera(VirtualCameraBase fromCam, Vector3 worldUp)
 {
 }