Unity3D следит за вращением камеры игрока сферы - PullRequest
0 голосов
/ 05 ноября 2018

Привет. Я пытаюсь заставить свою камеру следовать за моим игроком (Сферой), когда бы он ни двигался. У меня есть камера, чтобы следить за игроком, но когда сфера вращается, камера тоже. Это не то, что я ищу. Мне нужна камера, чтобы оставаться на сфере и вращаться, когда я поворачиваюсь. Это мой код:

РЕДАКТИРОВАТЬ: Я ищу то, что вы видите в видео. где камера вращается, когда сфера поворачивается, поэтому она все время находится позади нее. https://www.youtube.com/watch?v=jPAgPQi1l0c

using UnityEngine;
using System.Collections;

public class TransformFollower : MonoBehaviour
{
[SerializeField]
private Transform target;

[SerializeField]
private Vector3 offsetPosition;

[SerializeField]
private Space offsetPositionSpace = Space.Self;

[SerializeField]
private bool lookAt = true;

private void Start()
{
    offsetPosition = new Vector3(-3, -2, 0);
}
private void Update()
{
    Refresh();
}

public void Refresh()
{
    if (target == null)
    {
        Debug.LogWarning("Missing target ref !", this);

        return;
    }

    // compute position
    if (offsetPositionSpace == Space.Self)
    {
        transform.position = target.TransformPoint(offsetPosition);
    }
    else
    {
        transform.position = target.position + offsetPosition;
    }

    // compute rotation
    if (lookAt)
    {
        transform.LookAt(target);
    }
    else
    {
        transform.rotation = target.rotation;
    }
}
}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы должны реализовать следующую логику:

Создайте пустой игровой объект: персонаж, в котором он будет как потомок: камера, сфера

когда вы двигаетесь, вы просто трансформируете персонажа, поэтому камера и сфера преобразуются точно так же.

Теперь, когда вы хотите вращать только Сферу, но не камеру, просто примените свое вращение (или что-нибудь еще), только в сфере. Для этого в вашем скрипте вы можете передать Персонаж и Сферу. Таким образом, к персонажу и любому другому пользовательскому движению будут применены подвижные преобразования, только в сфере.

Nik

0 голосов
/ 05 ноября 2018

Вы сами написали этот код?

Просто кажется, что если lookat верно, он будет делать то, что вы хотите. Если это ложь, если будет делать то, что вы описываете.

Просто загляните в редактор и установите флажок «смотреть на».

Если вы никогда не хотите использовать его, вы можете удалить его из кода, удалив переменную lookat и заменив

// compute rotation
if (lookAt)
{
    transform.LookAt(target);
}
else
{
    transform.rotation = target.rotation;
}

от

// compute rotation
transform.LookAt(target);

РЕДАКТИРОВАТЬ больше объяснений:

В вашем коде у вас есть две опции: lookat и offsetPositionSpace.

Как правило, offsetPositionSpace может принимать два значения:

  • Self -> Камера всегда будет позади игрока (если вы поворачиваете плеер, она перемещается, чтобы остаться позади
  • World -> Камера всегда будет имитировать движения игрока (если игрок вращается, камера не будет двигаться

LookAt также может иметь два значения

  • true -> камера смотрит на игрока, всегда
  • false -> камера имитирует вращение игроков (если игрок вращается, камера делает то же самое и перестает смотреть на игрока)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...