UniversalViewer/Assets/Scripts/ModelViewerBase/Pose/Timeline/KeyframeDataCamera.cs

72 lines
2.8 KiB
C#

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
[System.Serializable]
public class KeyframeDataCamera : KeyframeData
{
public SerializableTransform CamTransform;
public int CameraMode;
public bool CameraLock;
public float Fov = 45;
public float CamDist = 5;
public float CamHeight = 1;
public float TargetHeigh = 1;
public float CamAngle = 0;
public float MovSpeed = 5;
public float RotSpeed = 1;
public float ZoomSpeed = 0.2f;
public KeyframeDataCamera() { }
public KeyframeDataCamera(CameraContainer camera)
{
Root = new SerializableTransform(camera.Camera.transform);
CamTransform = new SerializableTransform(camera.Camera.Cam.transform);
var settings = camera.Settings;
CameraMode = settings.CameraMode;
CameraLock = settings.CameraLock;
Fov = settings.Fov;
CamDist = settings.CamDist;
CamHeight = settings.CamHeight;
TargetHeigh = settings.TargetHeight;
CamAngle = settings.CamAngle;
MovSpeed = settings.MovSpeed;
RotSpeed = settings.RotSpeed;
ZoomSpeed = settings.ZoomSpeed;
}
public override KeyframeData Clone()
{
var keyframe = new KeyframeDataCamera();
keyframe.Root = new SerializableTransform(this.Root);
keyframe.CamTransform = new SerializableTransform(this.CamTransform);
keyframe.CameraMode = this.CameraMode;
keyframe.CameraLock = this.CameraLock;
keyframe.Fov = this.Fov;
keyframe.CamDist = this.CamDist;
keyframe.CamHeight = this.CamHeight;
keyframe.TargetHeigh = this.TargetHeigh;
keyframe.CamAngle = this.CamAngle;
keyframe.MovSpeed = this.MovSpeed;
keyframe.RotSpeed = this.RotSpeed;
keyframe.ZoomSpeed = this.ZoomSpeed;
return keyframe;
}
public override KeyframeData Lerp(KeyframeData target1, float amount)
{
var target = target1 as KeyframeDataCamera;
var copy = this.Clone() as KeyframeDataCamera;
copy.Root = copy.Root.LerpWith(target.Root, amount);
copy.CamTransform = copy.CamTransform.LerpWith(target.CamTransform, amount);
copy.Fov = Mathf.Lerp(copy.Fov, target.Fov, amount);
copy.CamDist = Mathf.Lerp(copy.CamDist, target.CamDist, amount);
copy.CamHeight = Mathf.Lerp(copy.CamHeight, target.CamHeight, amount);
copy.TargetHeigh = Mathf.Lerp(copy.TargetHeigh, target.TargetHeigh, amount);
copy.CamAngle = Mathf.Lerp(copy.CamAngle, target.CamAngle, amount);
return copy;
}
}