예제 #1
0
        /// <summary>
        /// To make Getting Started sample as simple as possible all code required for creating and
        /// displaying an avatar is placed here in a single function. This function is also a good example of how to
        /// chain asynchronous requests, just like in traditional sequential code.
        /// </summary>
        protected virtual IEnumerator GenerateAndDisplayHeadRoutine(byte[] photoBytes, PipelineType pipeline, Action <AsyncRequest> callback = null)
        {
            if (avatarProvider == null)
            {
                Debug.LogError("avatarProvider null");
                yield break;
            }

            // Choose all available parameters
            var parametersRequest = avatarProvider.GetParametersAsync(ComputationParametersSubset.ALL, pipeline);

            yield return(AwaitRoutine(parametersRequest));

            ComputationParameters allParameters = parametersRequest.Result;
            ComputationParameters parameters    = ComputationParameters.Empty;

            parameters.haircuts    = allParameters.haircuts;
            parameters.blendshapes = allParameters.blendshapes;
            parameters.modelInfo   = allParameters.modelInfo;
            parameters.modelInfo.hairColor.Value      = true;
            parameters.modelInfo.predictHaircut.Value = true;

            // generate avatar from the photo and get its code in the Result of request
            var initializeRequest = avatarProvider.InitializeAvatarAsync(photoBytes, "name", "description", pipeline, parameters);

            yield return(AwaitRoutine(initializeRequest));

            var avatarCode = initializeRequest.Result;

            var calculateRequest = avatarProvider.StartAndAwaitAvatarCalculationAsync(avatarCode);

            yield return(AwaitRoutine(calculateRequest));

            string avatarName = "Avatar " + System.DateTime.Now.ToString("dd/MM/yy HH:mm:ss");

            WriteAvatarNameByCode(avatarCode, avatarName);

            if (callback != null)
            {
                callback.Invoke(calculateRequest);
            }

            UpdateAvatarList();

            if (!calculateRequest.IsError)
            {
                yield return(ShowAvatarByCode(avatarCode));
            }
            else
            {
                Debug.LogErrorFormat("Unable to calculate avatar: {0}", avatarName);
            }
        }