Проблема в том, чтобы ущипнуть и ущипнуть трехмерную анимацию в единстве - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок здесь.Я работаю над проектом, основанным на дополненной реальности, и играю 3D-анимацию в этом приложении.Я хочу добавить функцию в приложение «Ущипнуть» и «ущипнуть» любую 3D-анимацию.Я столкнулся с проблемой в Pinch in и Pinch из 3D-анимации.Я пробовал код, предоставленный в форме единства, но была проблема с ортогональной камерой.

Код сайта Unity

using UnityEngine;

public class PinchZoom : MonoBehaviour

{
public float perspectiveZoomSpeed = 0.5f;        // The rate of change of the field of view in perspective mode.
public float orthoZoomSpeed = 0.5f;        // The rate of change of the orthographic size in orthographic mode.


void Update()
{
    // If there are two touches on the device...
    if (Input.touchCount == 2)
    {
        // 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;

        // If the camera is orthographic...
        if (camera.isOrthoGraphic)
        {
            // ... change the orthographic size based on the change in distance between the touches.
            camera.orthographicSize += deltaMagnitudeDiff * orthoZoomSpeed;

            // Make sure the orthographic size never drops below zero.
            camera.orthographicSize = Mathf.Max(camera.orthographicSize, 0.1f);
        }
        else
        {
            // Otherwise change the field of view based on the change in distance between the touches.
            camera.fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed;

            // Clamp the field of view to make sure it's between 0 and 180.
            camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 0.1f, 179.9f);
        }
    }
}

}

Моя попытка

using UnityEngine;

public class Pinch_MUN : MonoBehaviour {

public float perspectiveZoomSpeed = 0.5f;        // The rate of change of the field of view in perspective mode.
public float orthoZoomSpeed = 0.5f;        // The rate of change of the orthographic size in orthographic mode.


void Update()
{
    // If there are two touches on the device...
    if (Input.touchCount == 2)
    {
        // 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;

        // If the camera is orthographic...
        if (GetComponent<Camera>().orthographic == true)
        {
            // ... change the orthographic size based on the change in distance between the touches.
            GetComponent<Camera>().orthographicSize += deltaMagnitudeDiff * orthoZoomSpeed;

            // Make sure the orthographic size never drops below zero.
            GetComponent<Camera>().orthographicSize = Mathf.Max(GetComponent<Camera>().orthographicSize, 0.1f);
        }
        else
        {
            // Otherwise change the field of view based on the change in distance between the touches.
            GetComponent<Camera>().fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed;

            // Clamp the field of view to make sure it's between 0 and 180.
            GetComponent<Camera>().fieldOfView = Mathf.Clamp(GetComponent<Camera>().fieldOfView, 0.1f, 179.9f);
        }
    }
}

}

Для меня не имеет значения, что мы либо зажимаем камеру, либо просто зажимаем 3D-анимацию в представлении.Пожалуйста, помогите мне разобраться в моей ошибке, согласно приведенному выше сценарию.Заранее спасибо за помощь.

1 Ответ

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

Вместо написания собственной логики обнаружения жестов, используйте готовое решение (я использовал TouchKit в некоторых моих проектах).В AR вы не можете изменять свойства камеры (положение или fov), так как это приведет к потере синхронизации вашей виртуальной камеры с физической камерой.Вы должны постепенно масштабировать игровой объект вверх и вниз, чтобы настроить размер.

...