Exemplo n.º 1
0
        void ShowBuildAvatarUI()
        {
            EditorGUILayout.LabelField("Avatar", EditorStyles.boldLabel);

            avatarGameObject =
                EditorGUILayout.ObjectField("Avatar", avatarGameObject, typeof(GameObject), true) as GameObject;
            EditorGUILayout.Space();
            avatarName      = EditorGUILayout.TextField("Avatar name", avatarName);
            thumbnailCamera =
                EditorGUILayout.ObjectField("Thumbnail camera", thumbnailCamera, typeof(Camera), true) as Camera;

            ShowThumbnail();

            var canExport = false;

            if (avatarGameObject != null && IsLoggedIn && !string.IsNullOrEmpty(avatarName))
            {
                canExport      = true;
                exportSettings = new VRMExportSettings();
                exportSettings.InitializeFrom(avatarGameObject);

                if (string.IsNullOrEmpty(exportSettings.Title))
                {
                    exportSettings.Title = avatarName;
                }

                if (string.IsNullOrEmpty(exportSettings.Author))
                {
                    exportSettings.Author = Username;
                }

                foreach (var error in exportSettings.CanExport())
                {
                    canExport = false;
                    CreateMessage(new Message(error, MessageType.Error));
                }
            }

            canBuildAvatar = IsLoggedIn &&
                             !string.IsNullOrEmpty(VerifiedToken) &&
                             !string.IsNullOrEmpty(avatarName) &&
                             thumbnailCamera != null &&
                             canExport;

            EditorGUI.BeginDisabledGroup(!canBuildAvatar || isProcessing);
            if (GUILayout.Button("Build"))
            {
                BuildVRM();
            }

            if (canUploadAvatar)
            {
                if (GUILayout.Button("Open test room"))
                {
                    GetWindow <PreviewLauncherWindow>("Open test room");
                }
            }

            EditorGUI.EndDisabledGroup();
        }
Exemplo n.º 2
0
        void ShowBuildAvatarUI()
        {
            EditorGUILayout.LabelField("Avatar", EditorStyles.boldLabel);

            avatarGameObject =
                EditorGUILayout.ObjectField("Avatar", avatarGameObject, typeof(GameObject), true) as GameObject;
            EditorGUILayout.Space();
            avatarName      = EditorGUILayout.TextField("Avatar name", avatarName);
            thumbnailCamera =
                EditorGUILayout.ObjectField("Thumbnail camera", thumbnailCamera, typeof(Camera), true) as Camera;

            ShowThumbnail();

            var canExport = false;

            if (avatarGameObject != null && tokenAuth.reactiveUserInfo.Val.HasValue && !string.IsNullOrEmpty(avatarName))
            {
                var userInfo = tokenAuth.reactiveUserInfo.Val.Value;

                canExport      = true;
                exportSettings = new VRMExportSettings();
                exportSettings.InitializeFrom(avatarGameObject);

                if (string.IsNullOrEmpty(exportSettings.Title))
                {
                    exportSettings.Title = avatarName;
                }

                if (string.IsNullOrEmpty(exportSettings.Author))
                {
                    exportSettings.Author = userInfo.Username;
                }

                foreach (var error in exportSettings.CanExport())
                {
                    canExport = false;
                    messages.Add(new Message(error, MessageType.Error));
                }
            }

            canBuildAvatar = tokenAuth.reactiveUserInfo.Val.HasValue &&
                             !string.IsNullOrEmpty(avatarName) &&
                             thumbnailCamera != null &&
                             canExport;

            EditorGUI.BeginDisabledGroup(!canBuildAvatar || isProcessing);
            if (GUILayout.Button("Build") && tokenAuth.reactiveUserInfo.Val.HasValue)
            {
                BuildVRM(tokenAuth.reactiveUserInfo.Val.Value);
            }

            EditorGUI.EndDisabledGroup();
        }
Exemplo n.º 3
0
    /// <summary>
    /// モデルの出力
    /// </summary>
    public void Save()
    {
        if (Title.text == "" || Version.text == "" || Author.text == "")
        {
            ExportText.GetComponent <RectTransform>().offsetMax = ErrorPos;
            ExportErrorText.text = ErrorMsg;
            return;
        }
        ExportText.GetComponent <RectTransform>().offsetMax = Vector2.zero;
        ExportErrorText.text = "";

#if UNITY_EDITOR
        var path = Application.dataPath + "/../_exe/Export.vrm";
#else
        var path = VRM.Samples.FileDialogForWindows.SaveDialog("save VRM", Application.dataPath + "/../");
#endif
        if (string.IsNullOrEmpty(path))
        {
            return;
        }
        else if (string.Compare(Path.GetExtension(path), ".vrm", true) != 0)
        {
            path += ".vrm";
        }

        // 表情リセット
        var proxy = Model.GetComponent <VRMBlendShapeProxy>();
        proxy.AccumulateValue(BlendShapePreset.Joy, 0);
        proxy.AccumulateValue(BlendShapePreset.Angry, 0);
        proxy.AccumulateValue(BlendShapePreset.Sorrow, 0);
        proxy.AccumulateValue(BlendShapePreset.Fun, 0);
        proxy.Apply();

        // 身長適用
        var scaling = Instantiate(Model);
        scaling.transform.localScale = Vector3.one * float.Parse(Height.text) / 100;

        // 再正規化
        var model = BoneNormalizer.Execute(scaling, false, false);
        VRMExportSettings.CopyVRMComponents(scaling, model.Root, model.BoneMap);

        // メタ情報
        var meta = model.Root.GetComponent <VRMMeta>().Meta;
        meta.Thumbnail          = GetTex2D(Thumbnail.texture);
        meta.Title              = Title.text;
        meta.Version            = Version.text;
        meta.Author             = Author.text;
        meta.ContactInformation = Contact.text;
        meta.Reference          = Reference.text;
        meta.AllowedUser        = (AllowedUser)AllowedUser.value;
        meta.ViolentUssage      = (UssageLicense)Violent.value;
        meta.SexualUssage       = (UssageLicense)Sexual.value;
        meta.CommercialUssage   = (UssageLicense)Commercial.value;
        meta.OtherPermissionUrl = OtherPermissionUrl.text;
        meta.LicenseType        = (LicenseType)License.value;
        meta.OtherLicenseUrl    = OtherLicenseUrl.text;

        // 出力
        var vrm   = VRMExporter.Export(model.Root);
        var bytes = vrm.ToGlbBytes();
        File.WriteAllBytes(path, bytes);

        Destroy(scaling);
        Destroy(model.Root);
    }