Qualcomm_Snapdragon_VR_SDK SvrPluginAndroid脚本简介(6)

前几篇文章中已经系统介绍了SvrPluginAndroid脚本中调用的dll底层方法。

细心的读者可以观察到所有的方法中都是private 的私有方法。


于是在SvrPluginAndroid中在此基础上封装了一层公共方法供外部的脚本调用。

在介绍这些公有方法之前,首先跟大家介绍一下SvrPluginAndroid中的Create方法:

	public static 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<AndroidJavaObject>("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变量赋值,读取当前设备信息。




阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页