Пример #1
0
        /// <summary>
        /// Convert the target avatar for Quest.
        /// </summary>
        /// <param name="canOverwrite">Callback to check overwriting.</param>
        /// <param name="progressCallback">Callback to show progress.</param>
        /// <returns>Converted avatar's game object.</returns>
        internal GameObject ConvertAvatar(CanOverwriteCallback canOverwrite, AvatarConverter.ProgressCallback progressCallback)
        {
            if (AssetDatabase.IsValidFolder(outputPath))
            {
                if (!canOverwrite())
                {
                    return(null);
                }
            }

            var undoGroup = Undo.GetCurrentGroup();

            Undo.SetCurrentGroupName("Convert Avatar for Quest");

            var(questAvatar, prefabName) = AvatarConverter.ConvertForQuest(TargetAvatar, outputPath, generateQuestTextures, (int)texturesSizeLimit, Remover, progressCallback);
            PrefabUtility.SaveAsPrefabAssetAndConnect(questAvatar.AvatarDescriptor.gameObject, prefabName, InteractionMode.UserAction);

            if (TargetAvatarDescriptor.gameObject.activeInHierarchy)
            {
                Undo.RecordObject(TargetAvatarDescriptor.gameObject, "Disable original avatar");
                TargetAvatarDescriptor.gameObject.SetActive(false);
            }

            Undo.CollapseUndoOperations(undoGroup);

            return(questAvatar.AvatarDescriptor.gameObject);
        }
Пример #2
0
 private void OnEnable()
 {
     titleContent.text = "Convert Avatar for Quest";
     progressCallback  = new AvatarConverter.ProgressCallback
     {
         onTextureProgress = (total, index, exception, material) =>
         {
             var i18n = VRCQuestToolsSettings.I18nResource;
             if (exception != null)
             {
                 var message = $"{i18n.MaterialExceptionDialogMessage}\n" +
                               "\n" +
                               $"Material: {AssetDatabase.GetAssetPath(material)}\n" +
                               $"Shader: {material.shader.name}\n" +
                               "\n" +
                               $"Exception: {exception.Message}";
                 EditorUtility.DisplayDialog(VRCQuestTools.Name, message, "OK");
                 EditorUtility.ClearProgressBar();
             }
             else
             {
                 var progress = (float)index / total;
                 EditorUtility.DisplayProgressBar(VRCQuestTools.Name, $"{i18n.GeneratingTexturesDialogMessage} : {index + 1}/{total}", progress);
             }
         },
         onAnimationClipProgress = (total, index, exception, clip) =>
         {
             var i18n = VRCQuestToolsSettings.I18nResource;
             if (exception != null)
             {
                 var message = $"{i18n.AnimationClipExceptionDialogMessage}\n" +
                               $"\n" +
                               $"AnimationClip: {clip.name}\n" +
                               $"\n" +
                               $"Exception: {exception.Message}";
                 EditorUtility.DisplayDialog(VRCQuestTools.Name, message, "OK");
                 EditorUtility.ClearProgressBar();
             }
             else
             {
                 var progress = (float)index / total;
                 EditorUtility.DisplayProgressBar(VRCQuestTools.Name, $"Converting AnimationCilps : {index}/{total}", progress);
             }
         },
         onRuntimeAnimatorProgress = (total, index, exception, controller) =>
         {
             var i18n = VRCQuestToolsSettings.I18nResource;
             if (exception != null)
             {
                 var message = $"{i18n.AnimatorControllerExceptionDialogMessage}\n" +
                               $"\n" +
                               $"AnimatorController: {controller.name}\n" +
                               $"\n" +
                               $"Exception: {exception.Message}";
                 EditorUtility.DisplayDialog(VRCQuestTools.Name, message, "OK");
                 EditorUtility.ClearProgressBar();
             }
             else
             {
                 var progress = (float)index / total;
                 EditorUtility.DisplayProgressBar(VRCQuestTools.Name, $"Converting AnimatorControllers : {index + 1}/{total}", progress);
             }
         },
     };
     model.AvatarConverter = VRCQuestTools.AvatarConverter;
 }