public void Update() { EUNITY_CALLBACK_EVENT eventID = (EUNITY_CALLBACK_EVENT)MetaioSDKUnity.getUnityCallbackEventID(); if (eventID != EUNITY_CALLBACK_EVENT.EUCE_NONE) { IntPtr eventValuePtr = MetaioSDKUnity.getUnityCallbackEventValue(); String eventValue = Marshal.PtrToStringAnsi(eventValuePtr); // Debug.Log("Callback event: "+eventID+", "+eventValue); switch (eventID) { case EUNITY_CALLBACK_EVENT.EUCE_LOG: onLog(eventValue); break; case EUNITY_CALLBACK_EVENT.EUCE_LOG_WARNING: onLogWarning(eventValue); break; case EUNITY_CALLBACK_EVENT.EUCE_LOG_ERROR: onLogError(eventValue); break; case EUNITY_CALLBACK_EVENT.EUCE_SDK_READY: onSDKReady(); break; case EUNITY_CALLBACK_EVENT.EUCE_TRACKING_EVENT: uint length = MetaioSDKUnity.getUnityCallbackEventValueLength(); byte[] pbAsBytes = new byte[length]; Marshal.Copy(eventValuePtr, pbAsBytes, 0, (int)length); metaio.unitycommunication.OnTrackingEventProtocol prot = metaio.unitycommunication.OnTrackingEventProtocol.ParseFrom(pbAsBytes); List <TrackingValues> listTV = new List <TrackingValues>(); for (int i = 0; i < prot.TrackingValuesCount; ++i) { listTV.Add(TrackingValues.FromPB(prot.TrackingValuesList[i])); } onTrackingEvent(listTV); break; case EUNITY_CALLBACK_EVENT.EUCE_INSTANT_TRACKING_EVENT: onInstantTrackingEvent(eventValue); break; case EUNITY_CALLBACK_EVENT.EUCE_CAMERA_IMAGE_SAVED: onCameraImageSaved(eventValue); break; case EUNITY_CALLBACK_EVENT.EUCE_VISUAL_SEARCH_RESULT: parseVisualSearchResponse(eventValue); break; case EUNITY_CALLBACK_EVENT.EUCE_VISUAL_SEARCH_STATUS: onVisualSearchStatusChanged(eventValue); break; case EUNITY_CALLBACK_EVENT.EUCE_MOVIE_END: IntPtr movieTextureGeometryPtr = new IntPtr(int.Parse(eventValue)); onMovieEnd(metaioMovieTexture.getGameObjectNameForMovieTextureGeometryPtr(movieTextureGeometryPtr)); break; } // remove the callback event from queue MetaioSDKUnity.removeUnityCallbackEvent(); } }