- Home /
Lerp camera based on indexed classes
Having no luck getting my cameras to lerp as desired. Just wanting to iterate through camera positions/rotations when users press a key. Had it working as separate lists, but would really like to go the route of custom classes. Where am I fouling up here? Really think it has to do with the declaration of the custom class Camera Pointer
, but not sure.
public List<CameraPointer> CinematicCameras = new List<CameraPointer>();
public Transform MainCamera = null;
public int cameraIndex = 0;
void Start ()
{
MainCamera = Camera.main.transform;
}
void Update()
{
if (Input.GetKeyDown (KeyCode.UpArrow))
{
IncreaseIndex();
}
if (Input.GetKeyDown (KeyCode.DownArrow))
{
DecreaseIndex();
}
Vector3 OldPos = MainCamera.position;
Quaternion OldRot = MainCamera.rotation;
Vector3 NewPos = CinematicCameras[cameraIndex].Position;
Quaternion NewRot = CinematicCameras[cameraIndex].Rotation;
float Smoothing = CinematicCameras [cameraIndex].Smoothing * Time.deltaTime;
MainCamera.position = Vector3.Lerp (OldPos, NewPos, Smoothing);
MainCamera.rotation = Quaternion.Lerp (OldRot, NewRot, Smoothing);
}
[System.Serializable]
public class CameraPointer
{
private Transform m_transform;
private Vector3 m_position;
private Quaternion m_rotation;
public CameraPointer(Camera cameraObject, float smooth)
{
CamObject = cameraObject;
CamTransform = cameraObject.transform;
Position = CamTransform.position;
Rotation = CamTransform.rotation;
Smoothing = smooth;
}
public Camera CamObject;
public Transform CamTransform { get { return m_transform; } set { m_transform = CamObject.transform; } }
public Vector3 Position { get { return m_position; } set { m_position = CamTransform.position; } }
public Quaternion Rotation { get { return m_rotation; } set { m_rotation = CamTransform.rotation; } }
public float Smoothing;
}
private void IncreaseIndex(int increment = 1)
{
int cameraCount = CinematicCameras.Count - increment;
if (cameraIndex < cameraCount)
{
cameraIndex += increment;
}
else
{
cameraIndex = 0;
}
}
private void DecreaseIndex(int decrement = 1)
{
int cameraCount = CinematicCameras.Count - decrement;
if (cameraIndex > 0)
{
cameraIndex -= decrement;
}
else
{
cameraIndex = cameraCount;
}
}
Comment
Your answer
Follow this Question
Related Questions
Camera Follow sphere with ridgidbody? 4 Answers
Camera Smooth Follow 2 Answers
Top down shooter camera follow cursor 2 Answers