Подтвердить что ты не робот

В единстве3D нажмите = Touch?

Я хочу обнаружить событие click/touch на моем gameObject 2D.

И это мой код:

void Update()
{
   if (Input.touchCount > 0)
   {
     Debug.Log("Touch");
   }
}

Debug.Log("Touch"); не отображается, когда я нажимаю на экран или свой объект gameObject.

4b9b3361

Ответ 1

Краткий ответ: да, касание может быть обработано с помощью Input.GetMouseButtonDown().

  • Input.GetMouseButtonDown(), Input.mousePosition и связанные с ними функции работают как тап на сенсорном экране (что довольно странно, но приветствуется). Если у вас нет мультитач-игры, это хороший способ обеспечить нормальную работу игры в редакторе, сохраняя сенсорный ввод для устройств. (источник: Unity Community)
    Симуляция мыши касаниями может быть включена/отключена с Input.simulateMouseWithTouches параметра Input.simulateMouseWithTouches. По умолчанию эта опция включена.
    Хотя это хорошо для тестирования, я считаю, что Input.GetTouch() должен использоваться в производственном коде (потому что он способен обрабатывать одновременные касания).

  • Интересный подход заключается в добавлении обработки касаний в OnMouseUp()/OnMouseDown():

    //  OnTouchDown.cs
    //  Allows "OnMouseDown()" events to work on the iPhone.
    //  Attach to the main camera.
    
    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class OnTouchDown : MonoBehaviour {
        void Update () {
            // Code for OnMouseDown in the iPhone. Unquote to test.
            RaycastHit hit = new RaycastHit();
            for (int i = 0; i < Input.touchCount; ++i)
                if (Input.GetTouch(i).phase.Equals(TouchPhase.Began)) {
                    // Construct a ray from the current touch coordinates
                    Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);
                    if (Physics.Raycast(ray, out hit))
                        hit.transform.gameObject.SendMessage("OnMouseDown");
                }
        }
    }
    

    (источник: ответы Unity)

UPD.: Существует мобильное приложение Unity Remote для имитации касания в режиме редактора (работает с Unity Editor 4 и Unity Editor 5).

Ответ 2

Из того, что я понимаю, игрок Unity не позволяет вам запускать события касания, только события мыши.

Но вы можете имитировать события поддельного касания на основе событий мыши, как объясняется в этом сообщении в блоге: http://2sa-studio.blogspot.com/2015/01/simulating-touch-events-from-mouse.html

void Update () {
    // Handle native touch events
    foreach (Touch touch in Input.touches) {
        HandleTouch(touch.fingerId, Camera.main.ScreenToWorldPoint(touch.position), touch.phase);
    }

    // Simulate touch events from mouse events
    if (Input.touchCount == 0) {
        if (Input.GetMouseButtonDown(0) ) {
            HandleTouch(10, Camera.main.ScreenToWorldPoint(Input.mousePosition), TouchPhase.Began);
        }
        if (Input.GetMouseButton(0) ) {
            HandleTouch(10, Camera.main.ScreenToWorldPoint(Input.mousePosition), TouchPhase.Moved);
        }
        if (Input.GetMouseButtonUp(0) ) {
            HandleTouch(10, Camera.main.ScreenToWorldPoint(Input.mousePosition), TouchPhase.Ended);
        }
    }
}

private void HandleTouch(int touchFingerId, Vector3 touchPosition, TouchPhase touchPhase) {
    switch (touchPhase) {
    case TouchPhase.Began:
        // TODO
        break;
    case TouchPhase.Moved:
        // TODO
        break;
    case TouchPhase.Ended:
        // TODO
        break;
    }
}

Ответ 3

Ответ: нет, существует приложение единство удаленного android (Play Store) для моделирования касания в редакторе Режим. Я думаю, что это может быть полезно.