Проблемы с сбросом камеры с использованием скрипта в Unity - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу центрировать камеру на объекте, а затем, если игрок нажимает кнопку (которая будет добавлена ​​позже) или вне всплывающего окна, которое будет вызвано нажатием на объект (движение камеры - это только первый шаг ).

Моя идея состояла в том, чтобы сохранить самую первую позицию камеры и преобразовать ее обратно, если мышь щелкает вне каких-либо интерактивных объектов, но похоже, что она не работает.

void Update()
{
    Vector3 camoriginposition;
    if (Input.GetMouseButtonDown(0))
    {
        Camera cam = Camera.main;
        camoriginposition = Camera.main.transform.position;
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit))
        {
            Rigidbody rb;
            if (rb = hit.transform.GetComponent<Rigidbody>())
            {
                Vector3 obj = rb.transform.position - new Vector3(0, -3, 2);
                cam.transform.position = obj;
                Debug.Log("curr cam pos" + cam.transform.position);
            }
            else
            {
                cam.transform.position = camoriginposition;
                Debug.Log("It triggers!");
            }
        }
    }
}

Я получаю вывод Debug.Log, но похоже, что transform.position не может быть обработан.

У вас есть идеи, как это исправить?

1 Ответ

0 голосов
/ 10 апреля 2020

Я не уверен, какое поведение вы подразумеваете под "не работает", но, возможно, это потому, что вы декларируете camoriginposition на каждом Update(), что определенно было бы нежелательным поведением. Всякий раз, когда вы пытаетесь сохранить исходную позицию вашей камеры в переменной local , она исчезнет, ​​когда закончится область действия Update(), и будет снова инициализирована новым вызовом Update().

You должны отделить camoriginposition от Update(), например:

private Vector3 camoriginposition;

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
         ...
}

И, похоже, есть еще одна проблема. Вы сохраняете camoriginposition при каждом щелчке мыши, но с вашим описанием, кажется, что он должен быть сохранен, когда луч на самом деле поражает игровой объект.

Вы должны переместиться camoriginposition = Camera.main.transform.position;

в

if (rb = hit.transform.GetComponent<Rigidbody>()) блок.

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