first commit
This commit is contained in:
162
Assets/Scripts/Asrtronaut/CameraTransition.cs
Normal file
162
Assets/Scripts/Asrtronaut/CameraTransition.cs
Normal file
@@ -0,0 +1,162 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user