Files
ScienceLab.WeightAndMass/Assets/Scripts/Asrtronaut/CameraTransition.cs
2026-04-07 03:14:32 +03:00

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);
}
}