コード例 #1
0
            static public void Lerp(ref BlendedCameraOutput result, ref BlendedCameraOutput from, ref BlendedCameraOutput to,
                                    CameraLerp.LerpStyle style, float interpolatePos, float interpolatePitch, float interpolateYaw)
            {
                if (interpolatePos >= 1f && interpolatePitch >= 1.0f && interpolateYaw >= 1.0f)
                {
                    result = to;
                    return;
                }

                switch (style)
                {
                case CameraLerp.LerpStyle.positionToPosition:

                    Vector3 fromPosition   = from.CalculatePosition();
                    Vector3 toPosition     = to.CalculatePosition();
                    Vector3 resultPosition = fromPosition + ((toPosition - fromPosition) * interpolatePos);
                    result.distFromLookAt = from.distFromLookAt + ((to.distFromLookAt - from.distFromLookAt) * interpolatePos);
                    Vector3 toEuler   = to.rotation.eulerAngles;
                    Vector3 fromEuler = from.rotation.eulerAngles;
                    Vector3 lerpEuler = Vector3.zero;
                    lerpEuler.x = Mathf.LerpAngle(fromEuler.x, toEuler.x, interpolatePitch);
                    lerpEuler.y = Mathf.LerpAngle(fromEuler.y, toEuler.y, interpolateYaw);
                    //result.rotation = Quaternion.Slerp(from.rotation, to.rotation, interpolate);
                    result.rotation = Quaternion.Euler(lerpEuler);
                    result.lookAt   = resultPosition + GameUtils.CalculateForward(result.rotation) * result.distFromLookAt;
                    break;

                case CameraLerp.LerpStyle.keepTargetOnScreen:
                    result.distFromLookAt = from.distFromLookAt + ((to.distFromLookAt - from.distFromLookAt) * interpolatePos);
                    //result.rotation = Quaternion.Slerp(from.rotation, to.rotation, interpolatePos);
                    Vector3 toEulerK   = to.rotation.eulerAngles;
                    Vector3 fromEulerK = from.rotation.eulerAngles;
                    Vector3 lerpEulerK = Vector3.zero;
                    lerpEulerK.x = Mathf.LerpAngle(fromEulerK.x, toEulerK.x, interpolatePitch);
                    lerpEulerK.y = Mathf.LerpAngle(fromEulerK.y, toEulerK.y, interpolateYaw);
                    //result.rotation = Quaternion.Slerp(from.rotation, to.rotation, interpolate);
                    result.rotation = Quaternion.Euler(lerpEulerK);
                    result.lookAt   = from.lookAt + ((to.lookAt - from.lookAt) * interpolatePos);
                    break;

                default:
                    result = to;
                    break;
                }
            }
コード例 #2
0
        public BlendedCameraBehavior(CameraLerp lerp, GameCameraBehavior behavior)
        {
            if (Application.isPlaying)
            {
                transitionStartTime = Time.time;
            }
            else
            {
                transitionStartTime = Time.realtimeSinceStartup;
            }
            this.lerp = lerp;

            if (null != lerp)
            {
                lerpStyle = lerp.lerpStyle;
            }
            else
            {
                lerpStyle = CameraLerp.LerpStyle.positionToPosition;
            }
            this.behavior = behavior;
        }