private void BuildRenderComponents() { var leftHand = CAPI.ovrAvatarPose_GetLeftHandComponent(sdkAvatar); var rightHand = CAPI.ovrAvatarPose_GetRightHandComponent(sdkAvatar); var body = CAPI.ovrAvatarPose_GetBodyComponent(sdkAvatar); var leftController = CAPI.ovrAvatarPose_GetLeftControllerComponent(sdkAvatar); var rightController = CAPI.ovrAvatarPose_GetRightControllerComponent(sdkAvatar); var baseComponent = CAPI.ovrAvatarPose_GetBaseComponent(sdkAvatar); UInt32 componentCount = CAPI.ovrAvatarComponent_Count(sdkAvatar); for (UInt32 i = 0; i < componentCount; i++) { IntPtr ptr = CAPI.ovrAvatarComponent_Get_Native(sdkAvatar, i); ovrAvatarComponent component = (ovrAvatarComponent)Marshal.PtrToStructure(ptr, typeof(ovrAvatarComponent)); if (!trackedComponents.ContainsKey(component.name)) { GameObject componentObject = new GameObject(); componentObject.name = component.name; componentObject.transform.SetParent(transform); AddAvatarComponent(componentObject, component); if (leftHand.HasValue && ptr == leftHand.Value.renderComponent) { HandLeft = componentObject.AddComponent <OvrAvatarHand>(); } if (rightHand.HasValue && ptr == rightHand.Value.renderComponent) { HandRight = componentObject.AddComponent <OvrAvatarHand>(); } if (body.HasValue && ptr == body.Value.renderComponent) { Body = componentObject.AddComponent <OvrAvatarBody>(); } if (leftController.HasValue && ptr == leftController.Value.renderComponent) { ControllerLeft = componentObject.AddComponent <OvrAvatarTouchController>(); } if (rightController.HasValue && ptr == rightController.Value.renderComponent) { ControllerRight = componentObject.AddComponent <OvrAvatarTouchController>(); } if (baseComponent.HasValue && ptr == baseComponent.Value.renderComponent) { Base = componentObject.AddComponent <OvrAvatarBase>(); } } } }