52 lines
982 B
C#
52 lines
982 B
C#
|
|
#if UNITY_EDITOR || UNITY_ANDROID
|
|||
|
|
using System;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
namespace NativeGalleryNamespace
|
|||
|
|
{
|
|||
|
|
public class NGCallbackHelper : MonoBehaviour
|
|||
|
|
{
|
|||
|
|
private bool autoDestroyWithCallback;
|
|||
|
|
private Action mainThreadAction = null;
|
|||
|
|
|
|||
|
|
public static NGCallbackHelper Create( bool autoDestroyWithCallback )
|
|||
|
|
{
|
|||
|
|
NGCallbackHelper result = new GameObject( "NGCallbackHelper" ).AddComponent<NGCallbackHelper>();
|
|||
|
|
result.autoDestroyWithCallback = autoDestroyWithCallback;
|
|||
|
|
DontDestroyOnLoad( result.gameObject );
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void CallOnMainThread( Action function )
|
|||
|
|
{
|
|||
|
|
lock( this )
|
|||
|
|
{
|
|||
|
|
mainThreadAction += function;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void Update()
|
|||
|
|
{
|
|||
|
|
if( mainThreadAction != null )
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
Action temp;
|
|||
|
|
lock( this )
|
|||
|
|
{
|
|||
|
|
temp = mainThreadAction;
|
|||
|
|
mainThreadAction = null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
temp();
|
|||
|
|
}
|
|||
|
|
finally
|
|||
|
|
{
|
|||
|
|
if( autoDestroyWithCallback )
|
|||
|
|
Destroy( gameObject );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif
|