You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.4 KiB
81 lines
2.4 KiB
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
using UnityEngine.EventSystems; |
|
using System.Runtime.InteropServices; // for DllImport |
|
using AOT; |
|
using System; |
|
|
|
namespace WebGLSupport |
|
{ |
|
class WebGLInputMobilePlugin |
|
{ |
|
#if UNITY_WEBGL && !UNITY_EDITOR |
|
[DllImport("__Internal")] |
|
public static extern int WebGLInputMobileRegister(Action<int> OnTouchEnd); |
|
|
|
[DllImport("__Internal")] |
|
public static extern void WebGLInputMobileOnFocusOut(int id, Action<int> OnFocusOut); |
|
#else |
|
/// <summary> |
|
/// ID を割り振り |
|
/// </summary> |
|
/// <returns></returns> |
|
public static int WebGLInputMobileRegister(Action<int> OnTouchEnd) { return 0; } |
|
|
|
public static void WebGLInputMobileOnFocusOut(int id, Action<int> OnFocusOut) {} |
|
#endif |
|
} |
|
|
|
public class WebGLInputMobile : MonoBehaviour, IPointerDownHandler |
|
{ |
|
static Dictionary<int, WebGLInputMobile> instances = new Dictionary<int, WebGLInputMobile>(); |
|
|
|
int id = -1; |
|
|
|
private void Awake() |
|
{ |
|
#if !(UNITY_WEBGL && !UNITY_EDITOR) |
|
// WebGL 以外、更新メソッドは動作しないようにします |
|
enabled = false; |
|
#endif |
|
} |
|
|
|
/// <summary> |
|
/// 押されたら、touchend イベントを登録する |
|
/// </summary> |
|
/// <param name="eventData"></param> |
|
public void OnPointerDown(PointerEventData eventData) |
|
{ |
|
if (id != -1) return; |
|
id = WebGLInputMobilePlugin.WebGLInputMobileRegister(OnTouchEnd); |
|
instances[id] = this; |
|
} |
|
|
|
[MonoPInvokeCallback(typeof(Action<int>))] |
|
static void OnTouchEnd(int id) |
|
{ |
|
var @this = instances[id]; |
|
@this.GetComponent<WebGLInput>().OnSelect(); |
|
@this.StartCoroutine(RegisterOnFocusOut(id)); |
|
} |
|
|
|
static IEnumerator RegisterOnFocusOut(int id) |
|
{ |
|
yield return null; // wait one frame. |
|
WebGLInputMobilePlugin.WebGLInputMobileOnFocusOut(id, OnFocusOut); |
|
} |
|
|
|
[MonoPInvokeCallback(typeof(Action<int>))] |
|
static void OnFocusOut(int id) |
|
{ |
|
Debug.Log(string.Format("OnFocusOut:{0}", id)); |
|
var @this = instances[id]; |
|
@this.GetComponent<WebGLInput>().DeactivateInputField(); |
|
// release |
|
@this.id = -1; |
|
instances.Remove(id); |
|
} |
|
} |
|
} |
|
|
|
|