前几篇文章中已经系统介绍了SvrPluginAndroid脚本中调用的dll底层方法。
细心的读者可以观察到所有的方法中都是private 的私有方法。
于是在SvrPluginAndroid中在此基础上封装了一层公共方法供外部的脚本调用。
在介绍这些公有方法之前,首先跟大家介绍一下SvrPluginAndroid中的Create方法:
public sta
tic SvrPluginAndroid Create()
{
if(Application.isEditor)
{
Debug.LogError("SvrPlugin not supported in unity editor!");
throw new InvalidOperationException();
}
return new SvrPluginAndroid ();
}
这个方法的作用是返回SvrPluginAndroid的实例。
在这个方法后面,定义了一个私有的构造方法。
private SvrPluginAndroid() {}私有的构造方法的作用是防止外部创建自由的创建多个SvrPluginAndroid的实例。
public override bool IsInitialized() { return SvrIsInitialized(); }
public override bool IsRunning() { return SvrIsRunning(); }
方法IsInitialized的作用是供外部调用获取当前SDK是否完成初始化。
方法IsRunning的作用是供外部调用获取当前SDK是否在处于运行的状态中。
public override IEnumerator Initialize()
{
//yield return new WaitUntil(() => SvrIsInitialized() == false); // Wait for shutdown
yield return base.Initialize();
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayer.GetStatic
("currentActivity");
SvrInitializeEventData(activity.GetRawObject());
#endif
IssueEvent(RenderEvent.Initialize);
yield return new WaitUntil (() => SvrIsInitialized () == true);
yield return null; // delay one frame - fix for re-init w multi-threaded rendering
deviceInfo = GetDeviceInfo();
}Initialize为当前SvrSDK的初始化方法,首先判断了当前设备的运行环境,如果是andorid平台,获取当前的AndroidJavaObject实例,使用RenderEvent.Initialize事件类型并完成初始化的动作。
等待初始化完成后,为deviceInfo变量赋值,读取当前设备信息。