Я делаю мобильную игру от третьего лица с помощью джойстиков.Я установил, где joystick.vertical
перемещает персонажа вперед или назад в зависимости от того, куда он смотрит, а joystick.horizontal
поворачивает персонажа.Поскольку камера связана с персонажем, камера всегда остается позади персонажа.
При перемещении по экрану камера поворачивается вокруг плеера с сенсорной панелью с использованием функции Camera.main.transform.RotateAround()
, а transform.LookAt()
гарантирует, что я смотрюу моего персонажа всегда.
Моя проблема : Я хотел бы, чтобы при движении пальца камера возвращалась в исходное положение за персонажем , но плавным движением или вустановленная скорость перемещения игрока .
Мое решение 1 : сделать пустой символ gameObject
, связанный с персонажем, и поместить его в положение, в которое я хочу, чтобы камера вернулась назад, и вызвать это положение, когда мышь находитсяотпустить.
float spanCamera = -Joystick.Horizontal;
Camera.main.transform.LookAt(rb.transform.position);
if (spanCamera != 0)
Camera.main.transform.RotateAround(rb.position, Vector3.up, spanCamera * Time.fixedDeltaTime * spanSpeed);
else if (Input.touchCount <= 1)
{
float var6 = var5 * Time.deltaTime;
Camera.main.transform.position = camPos.transform.position;
Camera.main.transform.LookAt(camLookAt.transform.position);
}
Этот фрагмент кода немедленно перемещает камеру в исходное положение без сглаживания.
Решение 2 : вместо этого используйте Vector3.MoveTowards()
// Camera.main.transform.position = camPos.transform.position;
Camera.main.transform.position = Vector3.MoveTowards(Camera.main.transform.position, camPos.transform.position, var6);
Этот код позволяет мне плавно перейти в начальную позицию по прямой .Я хочу, чтобы он обошел плеер.
Поэтому я попробовал другой метод, в котором я назначаю значение с плавающей запятой 1
, если камера поворачивается вправо и проверяет, отпущена ли кнопка поворота, и если значение равно 1
в пределах блока if
.
public float axisDir;
...
else if (spanCamera == 0 && axisDir == 1)
{
Camera.main.transform.RotateAround(rb.position, Vector3.up, -1 * Time.fixedDeltaTime * spanSpeed);
}
Но это приводит к бесконечному вращению, потому что я не знаю, как проверить, была ли достигнута желаемая позиция.
Я надеюсь, что кто-томожет помочь.Это довольно длинный пост.(