您的位置:首页 > 编程语言 > Go语言

Qualcomm_Snapdragon_VR_SDK SvrEye脚本简介(2)

2018-02-28 11:22 507 查看
从本文开始,将介绍SvrEye脚本中详细的代码逻辑。
在SvrEye中首先利用一个静态变量Instances保存了场景中SvrEye的实例。 public static List<SvrEye> Instances = new List<SvrEye>();用户可以通过SvrEye.Instances获取到场景中的全部SvrEye的实例。
上文提到由于SvrEye是在运行状态下动态添加到leftEye以及RightEye的物体上的,因此程序运行后需要对Instances进行赋值。
在SvrEye脚本中实在Awake的方法里对Instances进行赋值的。 void Awake()
{
Instances.Add(this);
AcquireComponents();
InitializeCoords();
}除了对Instances进行赋值以外,Awake还完成了其他初始化的方法,该部分后续文章中会进行详细的讲解。
除了赋值以外,Svr还在OnDestroy的方法中清除Instances实例,防止Instances的重复赋值等。 void OnDestroy()
{
Instances.Remove(this);
}如何使用?
在SvrManager中正是通过SvrEye.Instances变量获取到场景中左右眼的SvrEye脚本。
并对该脚本进行赋值的。 for (int i = 0; i < SvrEye.Instances.Count; i++)
{
var eye = SvrEye.Instances[i];
if (!eyes.Contains(eye))
{
eyes.Add(eye); // Add eyes found outside of svr camera hierarchy
}
}

SvrPlugin.DeviceInfo info = plugin.deviceInfo;

foreach(SvrEye eye in eyes)
{
if (eye == null) continue;

eye.FovMargin = settings.eyeFovMargin;
eye.Format = RenderTextureFormat.Default;
eye.Resolution = new Vector2(info.targetEyeWidthPixels, info.targetEyeHeightPixels);
eye.Depth = (int)settings.eyeDepth;
eye.AntiAliasing = (int)settings.eyeAntiAliasing; // hdr not supported with antialiasing
eye.FrustumType = (int)settings.frustumType;
eye.OnPreRenderListener = OnPreRenderListener;
eye.OnPostRenderListener = OnPostRenderListener;

eye.Initialize();
}在SvrManager中首先通过一个for循环以及一个私有变量eyes保存了场景中的SvrEye属性,之后通过遍历eyes对每一个SvrEye脚本进行属性以及方法的赋值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: