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.
82 lines
2.4 KiB
82 lines
2.4 KiB
1 year ago
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|