using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraFollow : MonoBehaviour { public Transform ball; public Game game; public float smoothPosSpeed = 0.25f; public float smoothRotSpeed = 10f; private Vector3 fallMove; private Coroutine replayCoroutine; void Update() { if (transform.position.y < GameObject.FindObjectOfType().offsetY && game.camType != Game.CameraType.Anim && !game.isPin) { transform.position = new Vector3(transform.position.x, GameObject.FindObjectOfType().offsetY, transform.position.z); } if (transform.position.z < -GameObject.FindObjectOfType().offsetZ && game.ballType == Game.BallType.SpinBall) { game.camType = Game.CameraType.LookBall; } } void FixedUpdate () { Vector3 desiredPosition; Vector3 smoothedPosition; if (game.camType == Game.CameraType.MoveX) { desiredPosition = new Vector3(ball.position.x + GameObject.FindObjectOfType().pos.x, GameObject.FindObjectOfType().pos.y, GameObject.FindObjectOfType().pos.z); smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothPosSpeed); transform.position = smoothedPosition; transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(GameObject.FindObjectOfType().rot * GameObject.FindObjectOfType().rotSetX, 180, 0), smoothRotSpeed * Time.fixedDeltaTime); } else if (game.camType == Game.CameraType.DropBall) { desiredPosition = new Vector3(ball.position.x, ball.position.y + 45, ball.position.z + 196); smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothPosSpeed); transform.position = smoothedPosition; transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(GameObject.FindObjectOfType().rot * GameObject.FindObjectOfType().rotOffset, 180, 0), smoothRotSpeed * Time.fixedDeltaTime); } else if (game.camType == Game.CameraType.FollowBall) { desiredPosition = new Vector3(ball.position.x + GameObject.FindObjectOfType().offset.x, ball.position.y + GameObject.FindObjectOfType().offset.y, ball.position.z + GameObject.FindObjectOfType().offset.z); if (transform.position.y >= GameObject.FindObjectOfType().offsetY && !game.isPin) { smoothedPosition = Vector3.Lerp(transform.position, new Vector3(desiredPosition.x, desiredPosition.y, desiredPosition.z), smoothPosSpeed); transform.position = smoothedPosition; } else if (transform.position.y < GameObject.FindObjectOfType().offsetY && !game.isPin) { smoothedPosition = Vector3.Lerp(transform.position, new Vector3(desiredPosition.x, transform.position.y, desiredPosition.z), smoothPosSpeed); transform.position = smoothedPosition; } transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(GameObject.FindObjectOfType().rot * GameObject.FindObjectOfType().rotOffset, 180, 0), smoothRotSpeed * Time.fixedDeltaTime); } else if (game.camType == Game.CameraType.LookBall) { desiredPosition = new Vector3(ball.position.x + GameObject.FindObjectOfType().offset.x, transform.position.y, transform.position.z); smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothPosSpeed); transform.position = smoothedPosition; } else if (game.camType == Game.CameraType.MoveCam) { transform.Translate(-fallMove.x * 0.02f * Time.fixedDeltaTime, 3.2f * Time.fixedDeltaTime, 16 * Time.fixedDeltaTime, Space.World); } else if (game.camType == Game.CameraType.Replay2) { transform.Translate(Vector3.forward * 16 * Time.fixedDeltaTime, Space.World); } else if (game.camType == Game.CameraType.ReturnBall) { transform.Translate(-3.0f * Time.fixedDeltaTime, -3.0f * Time.fixedDeltaTime, 180 * Time.fixedDeltaTime, Space.World); desiredPosition = new Vector3(ball.position.x - transform.position.x, ball.position.y - transform.position.y + 32, ball.position.z - transform.position.z); Quaternion lookRotation = Quaternion.LookRotation(desiredPosition); transform.rotation = Quaternion.Lerp(transform.rotation, lookRotation, smoothRotSpeed * 2 * Time.fixedDeltaTime); } } public void Replay(int index) { game.camType = Game.CameraType.Replay; replayCoroutine = StartCoroutine(GameObject.FindObjectOfType().replays[index].ReplayMove()); } public void React(int index) { game.camType = Game.CameraType.ReactCam; transform.position = GameObject.FindObjectOfType().reacts[index].position; transform.rotation = GameObject.FindObjectOfType().reacts[index].rotation; } public void Reset() { if (replayCoroutine != null) { StopCoroutine(replayCoroutine); } Vector3 desiredPosition = new Vector3(ball.position.x + GameObject.FindObjectOfType().pos.x, GameObject.FindObjectOfType().pos.y, GameObject.FindObjectOfType().pos.z); transform.position = desiredPosition; transform.rotation = Quaternion.Euler(GameObject.FindObjectOfType().rot * GameObject.FindObjectOfType().rotSetX, 180, 0); } public void EndCam() { if (replayCoroutine != null) { StopCoroutine(replayCoroutine); } game.camType = Game.CameraType.ReactCam; transform.position = new Vector3(-GameObject.FindObjectOfType().winPos.x, GameObject.FindObjectOfType().winPos.y, GameObject.FindObjectOfType().winPos.z); transform.rotation = Quaternion.Euler(-GameObject.FindObjectOfType().winRot.x, 180 - GameObject.FindObjectOfType().winRot.y, 0); } public void FallMove(Vector3 camMove) { fallMove = camMove; } }