コード例 #1
0
 private void ApplyChanges()
 {
     if (Event.current.isKey)
     {
         switch (Event.current.keyCode)
         {
         case KeyCode.Return:
         case KeyCode.KeypadEnter:
             Event.current.Use();
             MeshAnimationExport.ResizeDataLists(ref m_ExportParam.boneTransforms, ref m_ExportParam.boneNames, m_BoneCount);
             MeshAnimationExport.ResizeDataLists(ref m_ExportParam.animationClips, ref m_ExportParam.animationNames, m_ClipCount);
             break;
         }
     }
 }
コード例 #2
0
        private void OnGUI()
        {
            if (null == m_OutputFolerPath)
            {
                m_OutputFolerPath = Application.streamingAssetsPath;
            }

            if (null == m_ExportParam)
            {
                ResetSettings();
            }

            m_WindowWidth = position.width;

            #region ScrollView

            m_MainScrollPosition = EditorGUILayout.BeginScrollView(m_MainScrollPosition);

            //烘培定义角度转向
            eulerAngle = EditorGUILayout.Vector3Field("Bake model after apply Rotation Offset XYZ", eulerAngle);
            EditorGUILayout.Space();

            string defaultPath = DEFAULT_OUTPUT_FOLDER + (null == m_GoFBX ? "" : (m_GoFBX.name + "/"));

            m_ExportParam.outputFilePath   = m_OutputFilePath = defaultPath;
            m_ExportParam.outputFolderPath = m_OutputFolerPath = Path.GetDirectoryName(defaultPath);

            EditorGUILayout.LabelField("Default Folder:" + m_ExportParam.outputFolderPath);
            EditorGUILayout.Space();


            #region select output file
            EditorGUILayout.BeginHorizontal();
            string projectRelativeFilePath = GetAssetPath(m_OutputFilePath);

            EditorGUILayout.SelectableLabel(projectRelativeFilePath,
                                            EditorStyles.textField,
                                            GUILayout.Height(EditorGUIUtility.singleLineHeight));

            GUI.SetNextControlName("BrowseButton");
            if (GUILayout.Button("Browse"))
            {
                BrowseSaveFile();
            }
            EditorGUILayout.EndHorizontal();
            #endregion select output file

            EditorGUILayout.Space();

            #region select FBX file
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Base FBX:", GUILayout.Width(EditorGUIUtility.labelWidth - 4));
            GameObject newFbx = EditorGUILayout.ObjectField(m_GoFBX, typeof(GameObject), true) as GameObject;

            if (newFbx != null && newFbx != m_GoFBX)
            {
                // error if they drag the prefab itself, since it won't have any transform data
                // 必须是挂载在场景中的 GameObject
                if (PrefabUtility.GetPrefabParent(newFbx) != null)
                {
                    m_GoFBX           = newFbx;
                    m_ExportParam     = MeshAnimationExport.GenerateDefaultSettings(newFbx);
                    m_OutputFolerPath = m_ExportParam.outputFolderPath;
                    m_OutputFilePath  = m_ExportParam.outputFilePath;
                    m_ClipCount       = m_ExportParam.animationClips.Length;
                    m_BoneCount       = m_ExportParam.boneTransforms.Length;
                }
            }
            EditorGUILayout.EndHorizontal();
            #endregion select FBX file

            EditorGUILayout.Space();

            #region Framerate Setting
            m_ExportParam.framerate = EditorGUILayout.FloatField("Capture Framerate:", m_ExportParam.framerate);
            m_ExportParam.framerate = Mathf.Max(m_ExportParam.framerate, 1.0f);
            #endregion

            EditorGUILayout.Space();

            #region Clip Count Setting
            m_ClipCount = EditorGUILayout.IntField("Number of Clips:", m_ClipCount);
            ApplyChanges();
            #endregion

            EditorGUILayout.Space();

            m_LabelWidth = GUILayout.Width(m_WindowWidth * 0.35f);

            #region Animation Clip Setting
            EditorGUILayout.BeginHorizontal();
            {
                EditorGUILayout.LabelField("Animation Name:", m_LabelWidth);
                EditorGUILayout.LabelField("Animation File:", m_LabelWidth);
                EditorGUILayout.LabelField("Frames:", GUILayout.Width(m_WindowWidth * 0.2f));
            }
            EditorGUILayout.EndHorizontal();

            DrawAnimationArrayGui();
            #endregion

            EditorGUILayout.Space();

            #region Bone Count Setting
            m_BoneCount = EditorGUILayout.IntField("Number of Bones:", m_BoneCount);
            ApplyChanges();
            #endregion

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Bone Name:", m_LabelWidth);
            EditorGUILayout.LabelField("Bone Transform:", m_LabelWidth);
            EditorGUILayout.EndHorizontal();

            DrawBoneArrayGui();

            #region Clear and Save Buttons
            EditorGUILayout.BeginHorizontal();
            GUI.SetNextControlName("ClearButton");
            if (GUILayout.Button("Clear"))
            {
                ResetSettings();
                GUI.FocusControl("ClearButton");
            }

            if (GUILayout.Button("Export"))
            {
                //Save
                if (eulerAngle != Vector3.zero)
                {
                    m_ExportParam.quaternionOffset = Quaternion.Euler(eulerAngle);
                }

                //MeshAnimationExporter.Export(fbx, exportSettings);
                MeshAnimationExport.ExportCombinedTexture(m_GoFBX, m_ExportParam);
            }
            EditorGUILayout.EndHorizontal();
            #endregion

            EditorGUILayout.EndScrollView();

            #endregion ScrollView
        }