GameObject 2Dでクリック/タッチイベントを検出したい。
そして、これは私のコードです:
void Update()
{
if (Input.touchCount > 0)
{
Debug.Log("Touch");
}
}
Debug.Log("Touch");
は、画面またはgameObjectをクリックしても表示されません。
簡単な答え:はい、タッチは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で動作します) )。
私の理解では、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;
}
}
答えはノー、unity remoteAndroid app( Play Store )エディターモードでタッチをシミュレートするために。