Переместить к цели со смещением - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь переместить мою камеру в положение Gameobjects, на которое нажали, с указанным смещением.Таким образом, скрипт должен вычислять результирующую позицию по позиции игровых объектов, по которой щелкнули, фактической позиции камеры и смещению.

Я пробовал это с этим кодом:

Vector3 distanceVector = transform.position - target.transform.position;
Vector3 distanceVectorNormalized = distanceVector.normalized;
targetPosition = (distanceVectorNormalized * preferredDistance);

Но я получаю некоторыедействительно странные ценности.Вот код, который я сделал для этого:

public float moveSpeed = 0.1f;

private bool moving = false;
private GameObject target;

// The distance between the camera and the targets position
private float preferredDistance = 3;

// The position the camera will move to
private Vector3 targetPosition;

// Start is called before the first frame update
void Start()
{
}

// Update is called once per frame
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        var ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out var hit, 100) == false) return;

        Debug.Log(hit.transform.gameObject.name);
        target = hit.transform.gameObject;

        ... Here should be the calculations

        moving = true;
    }

    if (moving)
    {
        transform.position = Vector3.Lerp(transform.position, targetPosition, moveSpeed);
        transform.LookAt(target.transform.position);

        var offsetX = Math.Abs(transform.position.x - targetPosition.x);
        var offsetZ = Math.Abs(transform.position.z - targetPosition.z);

        if (offsetX < .01
            && offsetZ < .01) moving = false;
    }
}

1 Ответ

0 голосов
/ 21 января 2019

Ваш нормализованный distanceVector действует как направление камеры к объекту.Это направление следует нормализовать, что вы и делаете, чтобы его можно было умножить на ваше preferredDistance.Затем он становится смещением камеры от цели.

Часть, в которой происходит ошибка, состоит в том, что вы устанавливаете это нормализованное смещение в качестве новой позиции камеры, в то время как оно должно быть добавлено к ней.:

Vector3 distanceVector = transform.position - target.transform.position;
Vector3 distanceVectorNormalized = distanceVector.normalized;
targetPosition = target.transform.position + (distanceVectorNormalized * preferredDistance);

Обратите внимание на разницу в последней строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...