到了本章节,SvrPluginAndroid脚本的全部代码已经介绍完毕。
SvrPluginAndroid集成了SvrPlugin类,是SDK在Android平台上适配的VR模式相关方法和逻辑脚本。
其中比较关键的方法和逻辑如下:
1.BeginVR开始VR模式
public override IEnumerator BeginVr(int cpuPerfLevel, int gpuPerfLevel)
{
//yield return new WaitUntil(() => SvrIsRunning() == false); // Wait for EndVr
yield return base.BeginVr(cpuPerfLevel, gpuPerfLevel);
// float[6]: x, y, z, w, u, v
float[] lowerLeft = { -1f, -1f, 0f, 1f, 0f, 0f };
float[] upperLeft = { -1f, 1f, 0f, 1f, 0f, 1f };
float[] upperRight = { 1f, 1f, 0f, 1f, 1f, 1f };
float[] lowerRight = { 1f, -1f, 0f, 1f, 1f, 0f };
SvrSetupLayerCoords(0, -1, lowerLeft, lowerRight, upperLeft, upperRight); // Eye/All
SvrSetupLayerCoords(1, -1, lowerLeft, lowerRight, upperLeft, upperRight); // Overlay/All
SvrSetPerformanceLevelsEventData(cpuPerfLevel, gpuPerfLevel);
yield return new WaitUntil(() => SvrCanBeginVR() == true);
IssueEvent (RenderEvent.BeginVr);
yield return new WaitUntil(() => SvrIsRunning() == true);
}
2.EndVR 关闭VR模式
public override void EndVr()
{
base.EndVr();
IssueEvent (RenderEvent.EndVr);
}
3.SetTrackingMode 设置当前VR模式。
public override void SetTrackingMode(TrackingMode mode)
{
SvrSetTrackingModeEventData((int)mode);
IssueEvent (RenderEvent.SetTrackingMode);
}
4.GetPredictedPose获取当前头部朝向和位置数据
public override int GetPredictedPose(ref Quaternion orientation, ref Vector3 position, int frameIndex)
{
orientation.z = -orientation.z;
position.x = -position.x;
position.y = -position.y;
int rv = SvrGetPredictedPose(ref orientation.x, ref orientation.y, ref orientation.z, ref orientation.w,
ref position.x, ref position.y, ref position.z, frameIndex);
orientation.z = -orientation.z;
position.x = -position.x;
position.y = -position.y;
return rv;
}