131 lines
2.7 KiB
C#
131 lines
2.7 KiB
C#
|
//#define ENABLE_LOG
|
|||
|
/*
|
|||
|
* Copyright (c) 2014 - 2022 t_saki@serenegiant.com
|
|||
|
*/
|
|||
|
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace Serenegiant {
|
|||
|
public class TouchEventManager
|
|||
|
{
|
|||
|
public enum TouchState
|
|||
|
{
|
|||
|
// タッチ無し
|
|||
|
None = -1,
|
|||
|
// タッチ開始
|
|||
|
Began = TouchPhase.Began,
|
|||
|
// タッチ移動
|
|||
|
Moved = TouchPhase.Moved,
|
|||
|
// タッチ静止
|
|||
|
Stationary = TouchPhase.Stationary,
|
|||
|
// タッチ終了
|
|||
|
Ended = TouchPhase.Ended,
|
|||
|
// タッチキャンセル
|
|||
|
Canceled = TouchPhase.Canceled,
|
|||
|
}
|
|||
|
|
|||
|
public class TouchEvent
|
|||
|
{
|
|||
|
public Vector2 position;
|
|||
|
public TouchState state;
|
|||
|
|
|||
|
/**
|
|||
|
* コンストラクタ
|
|||
|
* @param touched
|
|||
|
* @param position
|
|||
|
* @param phase
|
|||
|
*/
|
|||
|
public TouchEvent(Vector2? position = null, TouchState state = TouchState.Began)
|
|||
|
{
|
|||
|
if (position == null)
|
|||
|
{
|
|||
|
this.position = new Vector2(0, 0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
this.position = (Vector2)position;
|
|||
|
}
|
|||
|
this.state = state;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* コピーコンストラクタ
|
|||
|
* @param other
|
|||
|
*/
|
|||
|
public TouchEvent(TouchEvent other)
|
|||
|
{
|
|||
|
this.position = new Vector2(other.position.x, other.position.y);
|
|||
|
this.state = other.state;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private TouchEvent touchEvent = new TouchEvent();
|
|||
|
|
|||
|
/**
|
|||
|
* デフォルトコンストラクタ
|
|||
|
*/
|
|||
|
public TouchEventManager()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* タッチ状態の更新
|
|||
|
* MonoBehaviourの下位クラスのUpdateから呼ぶこと
|
|||
|
*/
|
|||
|
public void Update()
|
|||
|
{
|
|||
|
touchEvent.state = TouchState.None;
|
|||
|
|
|||
|
if (Application.isEditor)
|
|||
|
{ // エディタで実行中…マウスの状態でタッチイベントをシミュレートする
|
|||
|
if (Input.GetMouseButtonDown(0))
|
|||
|
{ // タッチしたとき
|
|||
|
touchEvent.state = TouchState.Began;
|
|||
|
#if (!NDEBUG && DEBUG && ENABLE_LOG)
|
|||
|
Console.WriteLine("タッチした:");
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
if (Input.GetMouseButtonUp(0))
|
|||
|
{ // 離したとき
|
|||
|
touchEvent.state = TouchState.Ended;
|
|||
|
#if (!NDEBUG && DEBUG && ENABLE_LOG)
|
|||
|
Console.WriteLine("タッチした:");
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
if (Input.GetMouseButton(0))
|
|||
|
{ // 押し続けているとき
|
|||
|
touchEvent.state = TouchState.Moved;
|
|||
|
#if (!NDEBUG && DEBUG && ENABLE_LOG)
|
|||
|
Console.WriteLine("押し続けている");
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
if (touchEvent.state != TouchState.None)
|
|||
|
{ // タッチイベントがあるときは座標を取得
|
|||
|
touchEvent.position = Input.mousePosition;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{ // 実機で実行中
|
|||
|
if (Input.touchCount > 0)
|
|||
|
{
|
|||
|
Touch touch = Input.GetTouch(0);
|
|||
|
touchEvent.position = touch.position;
|
|||
|
touchEvent.state = (TouchState)touch.phase;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 現在のタッチ状態を取得
|
|||
|
*/
|
|||
|
public TouchEvent GetTouch()
|
|||
|
{
|
|||
|
return new TouchEvent(touchEvent);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
} // namespace Serenegiant
|