Как я могу изменить следующий код движка объекта Unity C # влево / вправо для щелчков мышью? - PullRequest
1 голос
/ 26 сентября 2019

Я хочу протестировать игру в редакторе Unity, поэтому я хочу изменить следующий код для щелчка мышью, так как «касание» не работает в редакторе единства.Я должен сделать APK каждый раз, чтобы проверить игру.Пожалуйста, помогите мне с этим.

float swipespeed = 0.002f;
void Update 
{
    if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
    {
        // Get movement of the finger since last frame
        Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
        float pos=touchDeltaPosition.x;
        // Move object across XY plane
        transform.Translate( 0f,0f,-pos * swipespeed);
    }
}

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Предполагая, что все остальное работает, как вам нужно, вы можете проверить Input.mousePresent

Указывает, обнаружено ли устройство мыши.

В Windows, Android иНа платформах Metro эта функция фактически обнаруживает присутствие мыши, поэтому может возвращать значение true или false.В Linux, Mac, WebGL эта функция всегда возвращает true.На платформах iOS и консоли эта функция всегда будет возвращать значение false.

или также Input.touchSupported

Возвращает ли устройство на каком приложениив настоящее время работает, поддерживает сенсорный ввод.

Вместо проверки платформы используйте это свойство, чтобы определить, следует ли вашей игре ожидать сенсорного ввода, поскольку некоторые платформы могут поддерживать несколько методов ввода.

и сделать что-то вроде

public float swipeSpeed = 0.002f;

// Here every frame the last mousePosition will be stored
// so we can compare the current one against it
private Vector3 lastMousePos;

private void Update 
{
    if(Input.mousePresent)
    {
        if(Input.GetMouseButton(0))
        {
            var currentMousePos = Input.mousePosition;
            var mouseDeltaPosition = currentMousePos - lastMousePos;

            transform.Translate( 0f,0f, -mouseDeltaPosition.x * swipespeed);
        }

        // update the last position with the current
        lastMousePos = currentMousePos;
    }
    else
    {
        if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
        {
            // Get movement of the finger since last frame
            var touchDeltaPosition = Input.GetTouch(0).deltaPosition;

            // Move object across XY plane
            transform.Translate( 0f,0f, -touchDeltaPosition.x * swipespeed);
        }
    }
}
1 голос
/ 27 сентября 2019

Вместо того, чтобы создавать монолитную структуру if / else, которая будет компилироваться в ваш код и выполняться всеми платформами, рассмотрите вопрос Компиляция, зависящая от платформы .Это позволяет вам писать код, который компилируется по-разному для определенных сред.

Например:

public float swipeSpeed = 0.002f;
#if UNITY_EDITOR
    private Vector3 lastMousePos;
#endif

private void Update 
{
    bool touch;
    Vector3 deltaPosition;

    #if UNITY_EDITOR
        touch = Input.GetMouseButton(0);
        if(touch)
        {
            deltaPosition = Input.mousePosition - lastMousePos;
            lastMousePos = Input.mousePosition;
        }
    #else
        touch = (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved);
        if(touch)
        {
            deltaPosition = Input.GetTouch(0).deltaPosition
        }
    #endif


    if(touch)
    {
        transform.Translate( 0f,0f, -deltaPosition.x * swipespeed);
    }
}

Обновление: Поскольку очевидно, что кто-то, кто бросил свое эго, очевидно, удаляет мой комментарий, нет, это не так.дубликат его / ее ответа.Это лучшая практика для мультиплатформенной разработки и значительно отличается от его / ее ответа.

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