Проблемы Unity Multi Touch с WebGL - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь реализовать простую камею орбиты, которая может вращать и масштабировать сцену.Я следовал некоторым учебникам, и я могу без проблем запускать свою программу на Windows, если я создаю ее как отдельный ПК.Если я создаю его как WebGL, моя камера по-прежнему корректно работает с одним касанием (вращением), с мультитачем, у меня странное поведение. Трудно объяснить, но оно увеличивается и уменьшается, даже если я не двигаю пальцами.Является королем "нечетких".Это происходит с Firefox и Chrome, браузерами, которые я тестировал.

using System.Collections;

using System.Collections.Generic;using UnityEngine;

открытый класс CameraOrbitTouch: MonoBehaviour {

protected Transform _XForm_Camera;
protected Transform _XForm_Parent;

protected Vector3 _LocalRotation;
protected float _CameraDistance = 10f;

// The rate of change of the field of view in perspective mode.
public float perspectiveZoomSpeed = 0.2f;    

public float OrbitDampening = 30f;
public float ScrollDampening = 18f;

public bool CameraDisabled = false;


// Use this for initialization
void Start() {
    this._XForm_Camera = this.transform;
    this._XForm_Parent = this.transform.parent;
}


void LateUpdate() {
    if (Input.GetKeyDown(KeyCode.LeftShift))
        CameraDisabled = !CameraDisabled;

    if (!CameraDisabled)
    {
        //Rotation of the Camera based on Mouse Coordinates
        if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
        {
            _LocalRotation.x += Input.touches[0].deltaPosition.x ;
            _LocalRotation.y += Input.touches[0].deltaPosition.y;

            //Clamp the y Rotation to horizon and not flipping over at the top
            if (_LocalRotation.y < 0f)
                _LocalRotation.y = 0f;
            else if (_LocalRotation.y > 90f)
                _LocalRotation.y = 90f;


        }

        //Zooming Input from our Mouse Scroll Wheel
        if (Input.touchCount == 2 && Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved)
        {
            // Store both touches.
            Touch touchZero = Input.GetTouch(0);
            Touch touchOne = Input.GetTouch(1);

            // Find the position in the previous frame of each touch.
            Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
            Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;

            // Find the magnitude of the vector (the distance) between the touches in each frame.
            float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
            float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;

            // Find the difference in the distances between each frame.
            float deltaMagnitudeDiff = (prevTouchDeltaMag - touchDeltaMag);

            //this._CameraDistance += deltaMagnitudeDiff * -1f;
            this._CameraDistance += deltaMagnitudeDiff * perspectiveZoomSpeed;
            this._CameraDistance = Mathf.Clamp(this._CameraDistance, 1.5f, 100f);
        }
    }

    //Actual Camera Rig Transformations
    Quaternion QT = Quaternion.Euler(_LocalRotation.y, _LocalRotation.x, 0);
    this._XForm_Parent.rotation = Quaternion.Lerp(this._XForm_Parent.rotation, QT, Time.deltaTime * OrbitDampening);

    if ( this._XForm_Camera.localPosition.z != this._CameraDistance * -1f )
    {
        this._XForm_Camera.localPosition = new Vector3(0f, 0f, Mathf.Lerp(this._XForm_Camera.localPosition.z, this._CameraDistance * -1f, Time.deltaTime * ScrollDampening));
    }
}

}

Может кто-нибудь сказать мне, почему это происходит?Есть ли в моем коде ошибки?Есть какая-то несовместимость с WebGL и multi touch?Спасибо за ваше время и ответы

1 Ответ

0 голосов
/ 26 июня 2018

Хорошо, я нашел проблему.Проблема была в Windows 7. Я использовал тот же код на другом компьютере с Windows 10, и он работает как положено ...

...