transform.localEulerAngles + Canvas World Space

Ошибки и баги Unity3D

transform.localEulerAngles + Canvas World Space

Сообщение Falkonio 11 апр 2018, 16:40

Странный наблюдаю глюк.

На камере есть элемент поворота завязанный на кнопку мыши:

Синтаксис:
Используется csharp
private float screenYdistance = 15; // отступ от края экрана
private float scrollWheel, horizontal, vertical, mouseX, mouseY;
private float rotationX, rotationY, rotationZ;

    private void Update()
    {
        if (Input.GetMouseButton(2))
        {
            mouseX = Input.GetAxis("Mouse X");
            mouseY = Input.GetAxis("Mouse Y");
        }
    }

    private void LateUpdate()
    {
        //Управление наклоном
        float playerY = Camera.main.WorldToScreenPoint(Vector3.zero).y; //Кэшируем положение точки в стек
        if ((playerY <= Camera.main.pixelHeight - screenYdistance && mouseY < 0) || (playerY >= screenYdistance && mouseY > 0)) //Наклоняем камеру, если точка в кадре
            rotationX -= mouseY * sensitivity;

        //Управление вращением и наклоном
        transform.RotateAround(ViewCenter, Vector3.up, mouseX);
        transform.localEulerAngles = new Vector3(rotationX, transform.localEulerAngles.y, 0);
    }
 


И есть кусок кода:

Синтаксис:
Используется csharp

        if (Input.GetMouseButtonDown(1))
        {
            var data = PointerRaycast(Input.mousePosition); // пускаем луч
            Debug.Log(data); // объект куда попал луч

            if (data != null)
            {
                //Делаем что-то полезное
            }
        }

    GameObject PointerRaycast(Vector2 position)
    {
        PointerEventData pointerData = new PointerEventData(EventSystem.current);
        List<RaycastResult> resultsData = new List<RaycastResult>();
        pointerData.position = position;
        EventSystem.current.RaycastAll(pointerData, resultsData);
        if (resultsData.Count > 0)
        {
            return resultsData[0].gameObject;
        }
        return null;
    }
 

Тут пускается луч для получения объекта UI.

Проблема в том, что если есть transform.localEulerAngles = new Vector3(rotationX, transform.localEulerAngles.y, 0); (из скрипта камеры), то рэйкаст возвращает null от объектов UI канваса в WorldSpace, но при этом нормально из канваса Screen Space Overlay. Далее зажимаем кнопку мыши и поворачиваем чуть камеру, та-да! и всё работает как надо - рэйкаст возвращает нужные объекты. А если закомментировать указанную строку, то всё работает со старта до поворота/наклона камеры, но камеру не наклонить (естественно). В чём может быть подвох, почему только после поворота камеры всё работает?
Аватара пользователя
Falkonio
UNец
 
Сообщения: 4
Зарегистрирован: 19 дек 2017, 15:41

Вернуться в Глюки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


cron