private void UpdateHandler() { GPUSkinGenerator gen = target as GPUSkinGenerator; float deltaTime = Time.realtimeSinceStartup - previewTime; if (previewAnimation != null) { //PreviewDrawBounds(); //PreviewDrawArrows(); //PreviewDrawGrid(); previewAnimation.UpdateEditor(deltaTime); PreviewInteractionCameraRestriction(); previewCamera.Render(); } previewTime = Time.realtimeSinceStartup; if (!gen.isSampling && gen.IsSamplingProgress()) { if (++gen.samplingClipIndex < gen.animClips.Count) { gen.StartSample(); } else { gen.EndSample(); EditorApplication.isPlaying = false; LockInspector(false); } } }
private void OnGUIProperty(GPUSkinGenerator gen) { guiEnabled = !Application.isPlaying; BeginBox(); { GUI.enabled = guiEnabled; { EditorGUILayout.PropertyField(serializedObject.FindProperty("animName"), new GUIContent("Animation Name")); GUI.enabled = false; EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.PropertyField(serializedObject.FindProperty("animData"), new GUIContent("Animation Data")); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.PropertyField(serializedObject.FindProperty("savedMesh"), new GUIContent("Saved Mesh")); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); GUI.enabled = guiEnabled; EditorGUILayout.PropertyField(serializedObject.FindProperty("skinQuality"), new GUIContent("Quality")); EditorGUILayout.PropertyField(serializedObject.FindProperty("rootBoneTransform"), new GUIContent("Root Bone")); OnGUIAnimClips(gen); } GUI.enabled = true; if (!Application.isPlaying && gen.rootBoneTransform != null) { gen.rootTransformMatrix = Matrix4x4.TRS(gen.rootBoneTransform.localPosition, gen.rootBoneTransform.localRotation, gen.rootBoneTransform.localScale); } if (GUILayout.Button("Step1: Start Generate Animation Data")) { //DestroyPreview(); EditorApplication.isPlaying = true; } if (Application.isPlaying) { if (GUILayout.Button("Step2: Sample And Generate ")) { LockInspector(true); gen.BeginSample(); gen.StartSample(); } } } EndBox(); }
private void OnPreview(GPUSkinGenerator gen) { BeginBox(); { if (GUILayout.Button("Preview")) { } } EndBox(); serializedObject.ApplyModifiedProperties(); }
public override void OnInspectorGUI() { GPUSkinGenerator gen = target as GPUSkinGenerator; if (gen == null) { return; } gen.CollectAnimationClips(); OnGUIProperty(gen); OnPreview(gen); }
private void UpdateHandler() { GPUSkinGenerator gen = target as GPUSkinGenerator; if (!gen.isSampling && gen.IsSamplingProgress()) { if (++gen.samplingClipIndex < gen.animClips.Count) { gen.StartSample(); } else { gen.EndSample(); EditorApplication.isPlaying = false; LockInspector(false); } } }
private void Awake() { EditorApplication.update += UpdateHandler; if (!Application.isPlaying) { Object obj = AssetDatabase.LoadMainAssetAtPath(GPUSkinGenerator.ReadTempData(GPUSkinGenerator.TEMP_SAVED_ANIM_PATH)); if (obj != null && obj is GPUSkinAnimationData) { serializedObject.FindProperty("animData").objectReferenceValue = obj; } obj = AssetDatabase.LoadMainAssetAtPath(GPUSkinGenerator.ReadTempData(GPUSkinGenerator.TEMP_SAVED_MESH_PATH)); if (obj != null && obj is Mesh) { serializedObject.FindProperty("savedMesh").objectReferenceValue = obj; } serializedObject.ApplyModifiedProperties(); GPUSkinGenerator.DeleteTempData(GPUSkinGenerator.TEMP_SAVED_ANIM_PATH); GPUSkinGenerator.DeleteTempData(GPUSkinGenerator.TEMP_SAVED_MESH_PATH); } }
private void OnGUIAnimClips(GPUSkinGenerator gen) { BeginBox(); { if (!gen.IsAnimatorOrAnimation()) { EditorGUILayout.HelpBox("Set AnimClips with Animation Component", MessageType.Info); } EditorGUILayout.PrefixLabel("Sample Clips"); int animClips_count = gen.animClips.Count; GUI.enabled = false; EditorGUILayout.BeginHorizontal(); { EditorGUILayout.IntField("Size", animClips_count); } EditorGUILayout.EndHorizontal(); GUI.enabled = guiEnabled; EditorGUILayout.BeginHorizontal(); { for (int j = -1; j < 5; ++j) { EditorGUILayout.BeginVertical(); { EditorGUILayout.BeginHorizontal(); { if (j == -1) { GUILayout.Label(" "); } else if (j == 0) { GUILayout.Label("Name"); } else if (j == 1) { GUILayout.Label("Frame Rate"); } else if (j == 2) { GUILayout.Label("Wrap Mode"); } else if (j == 3) { GUILayout.Label("Animation Clip"); } else if (j == 4) { GUILayout.Label("Root Motion"); } } EditorGUILayout.EndHorizontal(); for (int i = 0; i < animClips_count; i++) { var data = gen.animClips[i]; if (j == -1) { GUILayout.Label((i + 1) + ": "); } else if (j == 0) { data.name = EditorGUILayout.TextField(data.name); } else if (j == 1) { data.frameRate = EditorGUILayout.IntField(data.frameRate); } else if (j == 2) { data.wrapMode = (GPUSkinWrapMode)EditorGUILayout.EnumPopup(data.wrapMode); } else if (j == 3) { GUI.enabled = gen.IsAnimatorOrAnimation() && guiEnabled; EditorGUILayout.ObjectField(data.clip, data.clip.GetType(), false); GUI.enabled = guiEnabled; } else if (j == 4) { EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); data.rootMotion = GUILayout.Toggle(data.rootMotion, string.Empty); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); } } } EditorGUILayout.EndVertical(); } } EditorGUILayout.EndHorizontal(); } EndBox(); }
private void OnPreview(GPUSkinGenerator gen) { BeginBox(); { if (GUILayout.Button("Preview And Edit")) { animData = gen.animData; mesh = gen.savedMesh; previewMaterial = gen.previewMaterial; if (animData == null || mesh == null || previewMaterial == null) { EditorUtility.DisplayDialog("GPUSkin", "Missing Preview Resources", "OK"); } else { if (previewRenderTexture == null && !EditorApplication.isPlaying) { previewRenderTexture = new RenderTexture(1024, 1024, 32, RenderTextureFormat.Default, RenderTextureReadWrite.Default); previewRenderTexture.hideFlags = HideFlags.HideAndDontSave; GameObject cameroGo = new GameObject("GPUSkinEditorCameraGo"); cameroGo.hideFlags = HideFlags.HideAndDontSave; previewCamera = cameroGo.AddComponent <Camera>(); previewCamera.hideFlags = HideFlags.HideAndDontSave; previewCamera.farClipPlane = 100; previewCamera.targetTexture = previewRenderTexture; previewCamera.enabled = false; previewCamera.clearFlags = CameraClearFlags.SolidColor; previewCamera.backgroundColor = new Color(0.2f, 0.2f, 0.2f, 1.0f); previewCamera.transform.position = new Vector3(999, 1002, 999); GameObject previewGo = new GameObject("GPUSkinEditorPreviewGo"); previewGo.hideFlags = HideFlags.HideAndDontSave; previewGo.transform.position = new Vector3(999, 999, 1002); previewAnimation = previewGo.AddComponent <GPUSkinAnimation>(); previewAnimation.hideFlags = HideFlags.HideAndDontSave; previewAnimation.Init(animData, mesh, previewMaterial); previewAnimation.CullingMode = GPUSkinCullingMode.AlwaysAnimate; } } } GetLastGUIRect(ref previewEditBtnRect); if (previewRenderTexture != null) { int previewRectSize = Mathf.Min((int)(previewEditBtnRect.width * 0.98f), 512); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.BeginVertical(); { GUILayout.Box(previewRenderTexture, GUILayout.Width(previewRectSize), GUILayout.Height(previewRectSize)); GetLastGUIRect(ref previewInteractionRect); PreviewInteraction(previewInteractionRect); EditorGUILayout.HelpBox("Drag to Orbit\nCtrl + Drag to Pitch\nAlt+ Drag to Zoom\nPress P Key to Pause", MessageType.None); } EditorGUILayout.EndVertical(); //EditorGUI.ProgressBar(new Rect(previewInteractionRect.x, previewInteractionRect.y + previewInteractionRect.height, previewInteractionRect.width, 5), previewAnimation.NormalizedTime, string.Empty); } EditorGUILayout.EndHorizontal(); } } EndBox(); serializedObject.ApplyModifiedProperties(); }