Вопрос или проблема
Я пытаюсь настроить так, чтобы при нажатии клавиш e или w моя камера перемещалась к тем контрольным точкам, которые я установил на рельсах для куклы. Когда я вручную увеличиваю позицию на пути, это работает, но когда я пытаюсь написать скрипт для этого и изменить это значение, по какой-то причине он не позволяет мне добавить отслеживаемую куклу на экран компонента и всегда говорит “none”.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
public class Move : MonoBehaviour
{
public CinemachineTrackedDolly dolly;
public void OnRotateRight(InputAction.CallbackContext context)
{
dolly.m_PathPosition = dolly.m_PathPosition + 1;
}
public void OnRotateLeft(InputAction.CallbackContext context)
{
dolly.m_PathPosition = dolly.m_PathPosition - 1;
}
}
Я пробовал разные блоки Cinemachine и просто не могу понять, что я делаю не так. Я также использую систему ввода для упрощения использования различных нажатий клавиш.
Ответ или решение
Для того чтобы ваша камера перемещалась по позициям точек на треке при нажатии клавиш ‘E’ или ‘W’, вы можете использовать следующее решение на основе вашего кода. Судя по описанию проблемы, у вас возникли затруднения с настройкой компонента CinemachineTrackedDolly
и правильным использованием системы ввода. Давайте разберемся с этим подробнее.
Шаги для решения проблемы:
-
Убедитесь, что у вас есть компонент Tracked Dolly:
- Убедитесь, что вы добавили компонент
CinemachineVirtualCamera
на ваш объект камеры и добавили к нему компонентCinemachineTrackedDolly
. Просто перетащите созданный объект виртуальной камеры на вашу камеру в иерархии, затем убедитесь, что у вас установлен путь (Path), к которому должен привязываться ваш Tracked Dolly.
- Убедитесь, что вы добавили компонент
-
Проверьте настройки в инспекторе:
- Когда вы выберете вашу
CinemachineVirtualCamera
, убедитесь, что в инспекторе правильно настроеныTracked Dolly
. Путь должен быть выбран, и Tracked Dolly должен ссылаться на этот путь. Если вы видитеNone
это означает, что переменнаяdolly
не инициализирована.
- Когда вы выберете вашу
-
Измените скрипт для работы с вводом:
- Если вы используете новую систему ввода Unity, вам необходимо правильно обрабатывать события ввода. Вот исправленный вариант вашего скрипта:
using UnityEngine;
using Cinemachine;
using UnityEngine.InputSystem;
public class Move : MonoBehaviour
{
public CinemachineVirtualCamera virtualCamera; //ссылка на CinemachineVirtualCamera
private CinemachineTrackedDolly dolly;
private void Start()
{
// Получаем компонент Tracked Dolly из виртуальной камеры
if (virtualCamera != null)
{
dolly = virtualCamera.GetCinemachineComponent<CinemachineTrackedDolly>();
}
}
public void OnRotateRight(InputAction.CallbackContext context)
{
if (context.started && dolly != null)
{
dolly.m_PathPosition += 1f; // Увеличиваем позицию пути
}
}
public void OnRotateLeft(InputAction.CallbackContext context)
{
if (context.started && dolly != null)
{
dolly.m_PathPosition -= 1f; // Уменьшаем позицию пути
}
}
}
- Настройка ввода:
- Убедитесь, что у вас корректно настроены действия ввода в вашем Input Action Asset. Вам нужно будет привязать действия
OnRotateRight
иOnRotateLeft
к необходимым клавишам (например, ‘E’ и ‘W’) в редакторе Input System.
- Убедитесь, что у вас корректно настроены действия ввода в вашем Input Action Asset. Вам нужно будет привязать действия
Советы:
- Проверка значений PathPosition: Вы можете использовать временные переменные для отладки и следить за значением
dolly.m_PathPosition
, чтобы убедиться, что оно изменяется, когда вы нажимаете клавиши. - Лимитация значений: Чтобы избежать выход за пределы пути, можно добавить условие:
if (dolly != null)
{
dolly.m_PathPosition = Mathf.Clamp(dolly.m_PathPosition, 0, maxPathPosition); // Замените maxPathPosition на максимальную позицию вашего пути
}
Заключение:
Следуя данным шагам, вы сможете успешно настроить перемещение камеры по пути при нажатии клавиш. Убедитесь, что все компоненты правильно связаны и настроены, чтобы избежать любых ошибок. Если у вас будут дополнительные вопросы, не стесняйтесь обращаться за помощью!