public bool IsBlendUse(VirtualCameraBase vcam) { if (activeBlend != null && activeBlend.IsUse(vcam)) { return(true); } return(false); }
public bool IsUse(VirtualCameraBase vcam) { if (vcam == camA || vcam == camB) { return(true); } return(false); }
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)); }
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; }
public bool IsLive(VirtualCameraBase vcam) { if (activeCamera == vcam) { return(true); } if (IsBlendUse(vcam)) { return(true); } return(false); }
//选择一个合适的虚拟相机并把信息应用于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); } }
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); }
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); }
//添加相机 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); }
//移除 public void RemoveActiveCamera(VirtualCameraBase vcam) { mActiveCameras.Remove(vcam); }
public override void OnTransitionFromCamera(VirtualCameraBase fromCam, Vector3 worldUp) { base.OnTransitionFromCamera(fromCam, worldUp); }
//相机切换 public virtual void OnTransitionFromCamera(VirtualCameraBase fromCam, Vector3 worldUp) { }