@VKhupovets

Как настроить пролёт и остановку камеры с автозапуском по счётчику вокруг объекта Unity 3D?

Имеется 3D игра на движке Unity.
Сцена, в центре расположен игрок которым осуществляются различные действия. Территория движения у него ограничена.
Имеется счётчик времени который запускается после старта. У него имеется "флаг", по достижению которого запускается скрипт облёта камеры на 360 вокруг объекта. И умножается на 2, для дальнейшего запуска в будущем и так далее. (Пример: при счётчике 10, 20, 40, 80 и.т.д)

using UnityEngine;
using TMPro;
using System;

public class DistanceCounter : MonoBehaviour
{
    public TextMeshProUGUI disCountText;
    public static int secondsPassed;

    public event Action<int> OnCounterReached; // Событие для оповещения о достижении цели
    public int targetValue = 25; // Целевое значение секунд

    private void Update()
    {
        // Увеличиваем прошедшее время на каждом кадре
        secondsPassed = Mathf.FloorToInt(Time.time);

        // Обновляем значение TextMeshPro компонента "DisCount"
        disCountText.text = secondsPassed.ToString();

        // Проверяем, достигли ли цели и вызываем событие
        if (secondsPassed >= targetValue)
        {
            if (OnCounterReached != null)
            {
                OnCounterReached(targetValue);
            }

            targetValue *= 2;
        }
    }
}


Вот сам скрипт который запускает облёт камеры.

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public float speed;
    private bool script2Started = false;

    private void Start()
    {
        // Находим объект с скриптом DistanceCounter и получаем доступ к компоненту.
        DistanceCounter script1 = FindObjectOfType<DistanceCounter>();

        // Подписываемся на событие OnCounterReached.
        script1.OnCounterReached += StartScript2;
    }

    private void Update()
    {
        if (script2Started)
        {
            // Код для выполнения после достижения цели в скрипте DistanceCounter.
            transform.Rotate(0, speed * Time.deltaTime, 0);
        }
    }

    private void StartScript2(int counterValue)
    {
        // Метод будет вызван, когда достигнуто целевое значение в скрипте DistanceCounter.
        script2Started = true;
    }
}


Хотелось бы, что бы камера по завершению пролёта на 360 градусов останавливалась на своей начальной позиции. Но, так как при пролёте камеры в данном скрипте не отслеживаются координаты камеры по какой-либо оси движении. Не за что "зацепиться", установить маркер с конкретными координатами и при возвращении на них что бы она останавливалась.
Сделал скрипт в таком формате, что бы сохранить все позиции камеры (по всем векторам, углам наклона и.т.д).

Подскажите, какое решение можно использовать для решения данной задачи?
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы