/// <summary> /// Generates avatar with the selected set of resources and displayed it in AvatarViewer scene /// </summary> protected override IEnumerator GenerateAndDisplayHead(byte[] photoBytes, PipelineType pipeline) { //Get selected resources AvatarResources avatarResources = GetSelectedResources(); Debug.Log(CoreTools.GetAvatarCalculationParamsJson(avatarResources)); yield return(Await(null)); // generate avatar from the photo and get its code in the Result of request /* * var initializeRequest = avatarProvider.InitializeAvatarAsync(photoBytes, "name", "description", pipeline, avatarResources); * yield return Await(initializeRequest); * string avatarCode = initializeRequest.Result; * * StartCoroutine(SampleUtils.DisplayPhotoPreview(avatarCode, photoPreview)); * * var calculateRequest = avatarProvider.StartAndAwaitAvatarCalculationAsync(avatarCode); * yield return Await(calculateRequest); * * AvatarViewer.SetSceneParams(new AvatarViewer.SceneParams() * { * avatarCode = avatarCode, * showSettings = false, * sceneToReturn = SceneManager.GetActiveScene().name, * avatarProvider = avatarProvider, * useAnimations = false * }); * SceneManager.LoadScene(Scenes.GetSceneName(SceneType.AVATAR_VIEWER)); */ }
/// <summary> /// Upload photo and create avatar instance on the server. Calculations will start right away after the photo is uploaded. /// </summary> public virtual AsyncWebRequest <AvatarData> CreateAvatarWithPhotoAsync( string name, string description, byte[] photoBytes, bool forcePowerOfTwoTexture = false, PipelineType pipeline = PipelineType.FACE, AvatarResources resources = null ) { var request = new AsyncWebRequest <AvatarData> (AvatarSdkMgr.Str(Strings.UploadingPhoto), TrackProgress.UPLOAD); #if UNITY_2017_1_OR_NEWER Func <UnityWebRequest> webRequestFactory = () => { List <IMultipartFormSection> formData = new List <IMultipartFormSection>(); formData.Add(new MultipartFormDataSection("name", name)); if (!string.IsNullOrEmpty(description)) { formData.Add(new MultipartFormDataSection("description", description)); } formData.Add(new MultipartFormFileSection("photo", photoBytes, "photo.jpg", "application/octet-stream")); formData.Add(new MultipartFormDataSection("preserve_original_texture", (!forcePowerOfTwoTexture).ToString())); formData.Add(new MultipartFormDataSection("pipeline", pipeline.GetPipelineTypeName())); if (resources != null) { formData.Add(new MultipartFormDataSection("pipeline_subtype", pipeline_subtype)); formData.Add(new MultipartFormDataSection("resources", CoreTools.GetAvatarCalculationParamsJson(resources))); } var webRequest = UnityWebRequest.Post(GetUrl("avatars"), formData); webRequest.chunkedTransfer = false; SetAuthHeaders(webRequest); return(webRequest); }; Debug.LogFormat("Uploading photo..."); AvatarSdkMgr.SpawnCoroutine(AwaitJsonWebRequest(webRequestFactory, request)); return(request); #else // Unity 5.5.0 (and probably earlier versions) have a weird bug in default multipart form data // implementation, which causes incorrect boundaries between data fields. To work around this bug the // multipart request body is constructed manually, see below. byte[] requestBodyData = null; using (var requestBody = new MultipartBody()) { requestBody.WriteTextField("name", name); requestBody.WriteTextField("description", description); requestBody.WriteFileField("photo", "photo.jpg", photoBytes); requestBody.WriteTextField("preserve_original_texture", (!forcePowerOfTwoTexture).ToString()); requestBody.WriteTextField("pipeline", pipeline.GetPipelineTypeName()); if (resources != null) { requestBody.WriteTextField("pipeline_subtype", pipeline_subtype); requestBody.WriteTextField("resources", CoreTools.GetAvatarCalculationParamsJson(resources)); } requestBody.WriteFooter(); requestBodyData = requestBody.GetRequestBodyData(); Func <UnityWebRequest> webRequestFactory = () => { var webRequest = UnityWebRequest.Post(GetUrl("avatars"), " "); webRequest.uploadHandler = new UploadHandlerRaw(requestBodyData); webRequest.SetRequestHeader( "Content-Type", string.Format("multipart/form-data; boundary=\"{0}\"", requestBody.Boundary) ); webRequest.chunkedTransfer = false; SetAuthHeaders(webRequest); return(webRequest); }; Debug.LogFormat("Uploading photo..."); AvatarSdkMgr.SpawnCoroutine(AwaitJsonWebRequest(webRequestFactory, request)); return(request); } #endif }