web-dev-qa-db-ja.com

unity3Dでは、クリック=タッチ?

GameObject 2Dでクリック/タッチイベントを検出したい。

そして、これは私のコードです:

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

Debug.Log("Touch");は、画面またはgameObjectをクリックしても表示されません。

28
Lnitus

簡単な答え:はい、タッチはInput.GetMouseButtonDown()で処理できます。

  • Input.GetMouseButtonDown()、_Input.mousePosition_、および関連する関数は、タッチスクリーンのタップとして機能します(これは奇妙ですが、歓迎されます)。マルチタッチゲームをお持ちでない場合、これは、デバイスのタッチ入力を維持したまま、エディター内のゲームを正常に機能させる良い方法です。 (ソース: nity Community
    タッチによるマウスシミュレーションは、 _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");
                }
        }
    }
    _

    (ソース: nity Answers

UPD.:エディターモードでのタッチをシミュレートするためのモバイルアプリ nity Remote があります(Unity Editor 4およびUnity Editor 5で動作します) )。

30
naXa

私の理解では、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;
    }
}
17
sdabet

答えはノー、unity remoteAndroid app( Play Store )エディターモードでタッチをシミュレートするために。

2
tim