163 lines
5.6 KiB
C#
163 lines
5.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class CameraTransition : MonoBehaviour
|
|
{
|
|
[SerializeField] private Camera _cinematicCamera;
|
|
[SerializeField] private Camera _astronautCamera;
|
|
[SerializeField] private Camera _secretCamera;
|
|
[SerializeField] private Transform _endPoint;
|
|
[SerializeField] private float _duration = 2f;
|
|
[SerializeField] private GameObject _astronautCanvas;
|
|
[SerializeField] private GameObject _planetCanvas;
|
|
[SerializeField] private GameObject _secretCanvas;
|
|
[SerializeField] private UnityEngine.UI.Button _secretButton;
|
|
[SerializeField] private AstronautController _astronautController;
|
|
[SerializeField] private GameObject _secretPlanet;
|
|
[SerializeField] private GameObject _mainPlanet;
|
|
|
|
private Vector3 _startPos;
|
|
private Quaternion _startRot;
|
|
|
|
void Start()
|
|
{
|
|
_startPos = _cinematicCamera.transform.position;
|
|
_startRot = _cinematicCamera.transform.rotation;
|
|
|
|
_cinematicCamera.gameObject.SetActive(true);
|
|
_astronautCamera.gameObject.SetActive(false);
|
|
_secretCamera.gameObject.SetActive(false);
|
|
_astronautController.enabled = false;
|
|
_astronautCanvas.SetActive(false);
|
|
_secretCanvas.SetActive(false);
|
|
_planetCanvas.SetActive(true);
|
|
_secretButton.gameObject.SetActive(false);
|
|
_secretPlanet.SetActive(false);
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (_astronautCanvas.activeSelf && Input.GetKeyDown(KeyCode.LeftControl))
|
|
{
|
|
_secretButton.gameObject.SetActive(true);
|
|
}
|
|
}
|
|
|
|
public void StartTransition()
|
|
{
|
|
_planetCanvas.SetActive(false);
|
|
StartCoroutine(FlyToAstronaut());
|
|
}
|
|
|
|
public void ReturnToPlanets()
|
|
{
|
|
_astronautCanvas.SetActive(false);
|
|
_astronautController.enabled = false;
|
|
_astronautCamera.gameObject.SetActive(false);
|
|
_cinematicCamera.gameObject.SetActive(true);
|
|
StartCoroutine(FlyBack());
|
|
}
|
|
|
|
public void GoToSecret()
|
|
{
|
|
_astronautCanvas.SetActive(false);
|
|
_astronautController.enabled = false;
|
|
_astronautCamera.gameObject.SetActive(false);
|
|
_cinematicCamera.gameObject.SetActive(true);
|
|
StartCoroutine(FlyToSecret());
|
|
}
|
|
|
|
public void ReturnFromSecret()
|
|
{
|
|
_secretCanvas.SetActive(false);
|
|
_secretCamera.gameObject.SetActive(false);
|
|
_cinematicCamera.gameObject.SetActive(true);
|
|
StartCoroutine(FlyFromSecret());
|
|
}
|
|
|
|
IEnumerator FlyToAstronaut()
|
|
{
|
|
float t = 0f;
|
|
Vector3 startPos = _cinematicCamera.transform.position;
|
|
Quaternion startRot = _cinematicCamera.transform.rotation;
|
|
|
|
while (t < 1f)
|
|
{
|
|
t += Time.deltaTime / _duration;
|
|
_cinematicCamera.transform.position = Vector3.Lerp(startPos, _endPoint.position, Mathf.SmoothStep(0f, 1f, t));
|
|
_cinematicCamera.transform.rotation = Quaternion.Lerp(startRot, _endPoint.rotation, Mathf.SmoothStep(0f, 1f, t));
|
|
yield return null;
|
|
}
|
|
|
|
_cinematicCamera.gameObject.SetActive(false);
|
|
_astronautCamera.gameObject.SetActive(true);
|
|
_astronautCanvas.SetActive(true);
|
|
_astronautController.enabled = true;
|
|
}
|
|
|
|
IEnumerator FlyBack()
|
|
{
|
|
float t = 0f;
|
|
Vector3 startPos = _cinematicCamera.transform.position;
|
|
Quaternion startRot = _cinematicCamera.transform.rotation;
|
|
|
|
while (t < 1f)
|
|
{
|
|
t += Time.deltaTime / _duration;
|
|
_cinematicCamera.transform.position = Vector3.Lerp(startPos, _startPos, Mathf.SmoothStep(0f, 1f, t));
|
|
_cinematicCamera.transform.rotation = Quaternion.Lerp(startRot, _startRot, Mathf.SmoothStep(0f, 1f, t));
|
|
yield return null;
|
|
}
|
|
|
|
_planetCanvas.SetActive(true);
|
|
}
|
|
|
|
IEnumerator FlyToSecret()
|
|
{
|
|
float t = 0f;
|
|
Vector3 startPos = _cinematicCamera.transform.position;
|
|
Quaternion startRot = _cinematicCamera.transform.rotation;
|
|
Vector3 secretPos = _secretCamera.transform.position;
|
|
Quaternion secretRot = _secretCamera.transform.rotation;
|
|
|
|
while (t < 1f)
|
|
{
|
|
t += Time.deltaTime / _duration;
|
|
_cinematicCamera.transform.position = Vector3.Lerp(startPos, secretPos, Mathf.SmoothStep(0f, 1f, t));
|
|
_cinematicCamera.transform.rotation = Quaternion.Lerp(startRot, secretRot, Mathf.SmoothStep(0f, 1f, t));
|
|
yield return null;
|
|
}
|
|
|
|
_cinematicCamera.gameObject.SetActive(false);
|
|
_secretCamera.gameObject.SetActive(true);
|
|
_secretCanvas.SetActive(true);
|
|
_secretPlanet.SetActive(true);
|
|
_mainPlanet.SetActive(false);
|
|
}
|
|
|
|
IEnumerator FlyFromSecret()
|
|
{
|
|
float t = 0f;
|
|
Vector3 startPos = _cinematicCamera.transform.position;
|
|
Quaternion startRot = _cinematicCamera.transform.rotation;
|
|
Vector3 targetPos = _astronautCamera.transform.position;
|
|
Quaternion targetRot = _astronautCamera.transform.rotation;
|
|
|
|
while (t < 1f)
|
|
{
|
|
t += Time.deltaTime / _duration;
|
|
_cinematicCamera.transform.position = Vector3.Lerp(startPos, targetPos, Mathf.SmoothStep(0f, 1f, t));
|
|
_cinematicCamera.transform.rotation = Quaternion.Lerp(startRot, targetRot, Mathf.SmoothStep(0f, 1f, t));
|
|
yield return null;
|
|
}
|
|
|
|
_cinematicCamera.gameObject.SetActive(false);
|
|
_astronautCamera.gameObject.SetActive(true);
|
|
_astronautController.enabled = true;
|
|
_astronautCanvas.SetActive(true);
|
|
_mainPlanet.SetActive(true);
|
|
_secretPlanet.SetActive(false);
|
|
}
|
|
}
|