395 lines
12 KiB
C#
395 lines
12 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Runtime.InteropServices;
|
|||
|
|
|
|||
|
|
|
|||
|
|
public enum VibrationType {
|
|||
|
|
None,
|
|||
|
|
Once,
|
|||
|
|
OnceStrong,
|
|||
|
|
OnceWeak,
|
|||
|
|
DoubleStrong,
|
|||
|
|
DoubleWeak,
|
|||
|
|
Triple,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static class NativeUtils {
|
|||
|
|
|
|||
|
|
// Vibration Effect Type
|
|||
|
|
public static readonly string vEffectOneShot = "EFFECT_DEFAULT_AMPLITUDE";
|
|||
|
|
public static readonly string vEffectClick = "EFFECT_CLICK";
|
|||
|
|
public static readonly string vEffectDClick = "EFFECT_DOUBLE_CLICK";
|
|||
|
|
public static readonly string vEffectHClick = "EFFECT_HEAVY_CLICK";
|
|||
|
|
public static readonly string vEffectTick = "EFFECT_TICK";
|
|||
|
|
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern int _getHeight();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern int _getWidth();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern int _getPointHeight();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern int _getPointWidth();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern bool _enableReviewWindow();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern int _reviewWindow(string appid);
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern long _systemClockTime();
|
|||
|
|
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern bool _canOpenTwitter();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern bool _canOpenFacebook();
|
|||
|
|
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _registerNotification();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _scheduleNotification(int triggerInSeconds, string message, string alarmId);
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _cancelAllNotifications();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _PlayVibration(int id);
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _PlayVibrationOnce();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _PlayVibrationOnceStrong();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _PlayVibrationOnceWeak();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _PlayVibrationDoubleStrong();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _PlayVibrationDoubleWeak();
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _PlayVibrationTriple();
|
|||
|
|
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern void _showAlert(string title, string message);
|
|||
|
|
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
|
|||
|
|
private static void _Vibration(){
|
|||
|
|
Handheld.Vibrate();
|
|||
|
|
}
|
|||
|
|
private static void _VibrationAndroid(string effectType, long msec = 100){
|
|||
|
|
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
|||
|
|
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
|
|||
|
|
using (AndroidJavaObject vibrator = jo.Call<AndroidJavaObject>("getSystemService", "vibrator"))
|
|||
|
|
{
|
|||
|
|
if(androidOSVersion() >= 26 )
|
|||
|
|
{
|
|||
|
|
using (AndroidJavaClass vCls = new AndroidJavaClass("android.os.VibrationEffect"))
|
|||
|
|
{
|
|||
|
|
AndroidJavaObject vEffect = default;
|
|||
|
|
if( effectType != NativeUtils.vEffectOneShot && androidOSVersion() >= 29)
|
|||
|
|
{
|
|||
|
|
vEffect = vCls.CallStatic<AndroidJavaObject>("createPredefined", vCls.GetStatic<int>(effectType));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
vEffect = vCls.CallStatic<AndroidJavaObject>("createOneShot", new object[] { msec, vCls.GetStatic<int>("DEFAULT_AMPLITUDE") });
|
|||
|
|
}
|
|||
|
|
vibrator.Call("vibrate", vEffect);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
vibrator.Call("vibrate", msec);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static int androidOSVersion() {
|
|||
|
|
#if !UNITY_EDITOR
|
|||
|
|
using (var version = new AndroidJavaClass("android.os.Build$VERSION"))
|
|||
|
|
{
|
|||
|
|
return version.GetStatic<int>("SDK_INT");
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
return -1;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
public static int getHeight(){
|
|||
|
|
int height = 0;
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
height = Screen.height;
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
height = _getHeight();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
|||
|
|
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
|
|||
|
|
{
|
|||
|
|
height = (int)jo.Call<float>("getHeightPixels");
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
return height;
|
|||
|
|
}
|
|||
|
|
public static int getWidth(){
|
|||
|
|
int width = 0;
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
width = Screen.width;
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
width = _getWidth();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
|||
|
|
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
|
|||
|
|
{
|
|||
|
|
width = (int)jo.Call<float>("getWidthPixels");
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
return width;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static int getPointHeight(){
|
|||
|
|
int height = 0;
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
height = Screen.height;
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
if (Application.platform != RuntimePlatform.OSXEditor) {
|
|||
|
|
height = _getPointHeight();
|
|||
|
|
}
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
|||
|
|
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
|
|||
|
|
{
|
|||
|
|
height = (int)jo.Call<float>("getPointHeight");
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
return height;
|
|||
|
|
}
|
|||
|
|
public static int getPointWidth(){
|
|||
|
|
int width = 0;
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
width = Screen.width;
|
|||
|
|
#elif UNITY_IOS && !UNITY_EDITOR
|
|||
|
|
if (Application.platform != RuntimePlatform.OSXEditor) {
|
|||
|
|
width = _getPointWidth();
|
|||
|
|
}
|
|||
|
|
#elif UNITY_ANDROID && !UNITY_EDITOR
|
|||
|
|
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
|||
|
|
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
|
|||
|
|
{
|
|||
|
|
width = (int)jo.Call<float>("getPointWidth");
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return width;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void forceOrientationLandscape(){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
|||
|
|
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
|
|||
|
|
{
|
|||
|
|
jo.Call("forceOrientationLandscape");
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
public static void forceOrientationPortrait(){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
|||
|
|
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
|
|||
|
|
{
|
|||
|
|
jo.Call("forceOrientationPortrait");
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static bool enableReviewWindow(){
|
|||
|
|
bool res = false;
|
|||
|
|
#if UNITY_IOS && !UNITY_EDITOR
|
|||
|
|
if (Application.platform != RuntimePlatform.OSXEditor) {
|
|||
|
|
res = _enableReviewWindow();
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
return res;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void reviewWindow( string appid){
|
|||
|
|
#if UNITY_IOS && !UNITY_EDITOR
|
|||
|
|
if (Application.platform != RuntimePlatform.OSXEditor) {
|
|||
|
|
_reviewWindow(appid);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 端末起動からの経過時間(s)
|
|||
|
|
/// </summary>
|
|||
|
|
public static long systemClockTime(){
|
|||
|
|
|
|||
|
|
long res = 0;
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
var start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
|||
|
|
res = (long)(DateTime.Now.ToUniversalTime() - start).TotalSeconds;
|
|||
|
|
#elif UNITY_IOS && !UNITY_EDITOR
|
|||
|
|
if (Application.platform != RuntimePlatform.OSXEditor) {
|
|||
|
|
res = _systemClockTime();
|
|||
|
|
}
|
|||
|
|
#elif UNITY_ANDROID && !UNITY_EDITOR
|
|||
|
|
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
|
|||
|
|
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
|
|||
|
|
{
|
|||
|
|
res = (long)(jo.Call<long>("elapsedRealtime") / 1000);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return res;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if UNITY_ANDROID
|
|||
|
|
public static int getAndroidApiLevel(){
|
|||
|
|
var cls = new AndroidJavaClass("android.os.Build$VERSION");
|
|||
|
|
var apiLevel = cls.GetStatic<int>("SDK_INT");
|
|||
|
|
Debug.Log(apiLevel);
|
|||
|
|
return apiLevel;
|
|||
|
|
}
|
|||
|
|
#elif UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
public static bool canOpenTwitter(){
|
|||
|
|
return _canOpenTwitter();
|
|||
|
|
}
|
|||
|
|
public static bool canOpenFacebook(){
|
|||
|
|
return _canOpenFacebook();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static int GetiOSMajorVersion(){
|
|||
|
|
string version = SystemInfo.operatingSystem;
|
|||
|
|
version = version.Split('.')[0];
|
|||
|
|
string[] stringSplits = version.Split(' ');
|
|||
|
|
version = stringSplits[stringSplits.Length -1];
|
|||
|
|
return int.Parse(version);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
public static void InitNotification()
|
|||
|
|
{
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
// UniLocalNotification.Initialize();
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void RegisterNotification()
|
|||
|
|
{
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_registerNotification();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
public static void ScheduleNotification(int triggerInSeconds, string title, string message, int id)
|
|||
|
|
{
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_scheduleNotification(triggerInSeconds, message, id.ToString());
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
// UniLocalNotification.Register(triggerInSeconds, message, title);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
public static void CancelAllNotifications(){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_cancelAllNotifications();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
// UniLocalNotification.CancelAll();
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void PlayVibration(VibrationType vibrationType){
|
|||
|
|
switch(vibrationType){
|
|||
|
|
case VibrationType.Once:
|
|||
|
|
PlayVibrationOnce();
|
|||
|
|
break;
|
|||
|
|
case VibrationType.OnceStrong:
|
|||
|
|
PlayVibrationOnceStrong();
|
|||
|
|
break;
|
|||
|
|
case VibrationType.OnceWeak:
|
|||
|
|
PlayVibrationOnceWeak();
|
|||
|
|
break;
|
|||
|
|
case VibrationType.DoubleStrong:
|
|||
|
|
PlayVibrationDoubleStrong();
|
|||
|
|
break;
|
|||
|
|
case VibrationType.DoubleWeak:
|
|||
|
|
PlayVibrationDoubleWeak();
|
|||
|
|
break;
|
|||
|
|
case VibrationType.Triple:
|
|||
|
|
PlayVibrationTriple();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void PlayVibrationOnce(){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_PlayVibrationOnce();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
_VibrationAndroid(NativeUtils.vEffectClick, 20);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
public static void PlayVibrationOnceStrong(){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_PlayVibrationOnceStrong();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
_VibrationAndroid(NativeUtils.vEffectHClick, 50);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
public static void PlayVibrationOnceWeak(){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_PlayVibrationOnceWeak();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
_VibrationAndroid(NativeUtils.vEffectTick, 10);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
public static void PlayVibrationDoubleStrong(){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_PlayVibrationDoubleStrong();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
_VibrationAndroid(NativeUtils.vEffectDClick, 80);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
public static void PlayVibrationDoubleWeak(){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_PlayVibrationDoubleWeak();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
_VibrationAndroid(NativeUtils.vEffectOneShot, 100); // TODO:最適化
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
public static void PlayVibrationTriple(){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_PlayVibrationTriple();
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
_VibrationAndroid(NativeUtils.vEffectOneShot, 200); // TODO:最適化
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void ShowAlert(string title, string message){
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
#elif UNITY_IOS
|
|||
|
|
_showAlert(title, message);
|
|||
|
|
#elif UNITY_ANDROID
|
|||
|
|
// TODO:
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|