This repository has been archived on 2026-04-30. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2019-03-08 09:54:14 +11:00

64 lines
1.6 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour {
//public access members
public GameObject targetObject;
public Vector3 offset;
public float lerpSpeed = 2f;
Vector2 peek = new Vector2(0, 0);
//private members
Vector3 virtualLocation;
void Start() {
virtualLocation = transform.position;
}
void Update() {
//only continue if the target has been set
if (targetObject == null) {
return;
}
//cache the position we want to move to
Vector3 targetPosition = targetObject.transform.position + offset + new Vector3(peek.x, peek.y, 0f);
//If the distance is small, short circuit the lerp, so we don't have sudden pops in camera motion.
if ((targetPosition - virtualLocation).sqrMagnitude > 0.01f) {
//Interpolate to the target location.
virtualLocation = Vector3.Lerp(virtualLocation, targetPosition, lerpSpeed * Time.deltaTime);
//Snap to pixel coordinates
Vector3 snapped = virtualLocation;
snapped.x = Mathf.Round(snapped.x * 100) / 100;
snapped.y = Mathf.Round(snapped.y * 100) / 100;
snapped.z = transform.position.z; //BUGFIX
transform.position = snapped;
}
}
public Vector2 GetPeek() {
return peek;
}
public void SetPeek(Vector2 newPeek, float delay = 0.5f) {
peek = new Vector2(0f, 0f);
StartCoroutine(SetPeekAfter(delay, newPeek)); //NOTE: a delay to peeking, for smooth gameplay
}
IEnumerator SetPeekAfter(float delay, Vector2 addition) {
yield return new WaitForSeconds(delay);
peek = addition;
}
public void ResetPeek() {
peek = new Vector2(0, 0);
}
}