public override void Awake(GameObject go) { SetButtonListener("BtnVRManual", () => { ChangeXrType(XrType.VrManual); }); SetButtonListener("BtnVRSingle", () => { ChangeXrType(XrType.VrSingle); }); SetButtonListener("BtnVRGlass", () => { ChangeXrType(XrType.VrGlass); }); SetButtonListener("BtnPyramid", () => { ChangeXrType(XrType.Pyramid); OnceTipPage.ShowOnceTip(TipNames.Pyramid); }); SetButtonListener("BtnCameraFile", () => { ChangeXrType(XrType.CameraFile); }); SetButtonListener("BtnArUserDefined", () => { ChangeXrType(XrType.ArUserDefined); }); SetButtonListener("BtnBack", ClosePage); }
private IEnumerator GenerateBonePoseFile() { yield return(null); var context = (Context)data; var model = ModelReader.LoadMmdModel(context.ModelPath, new ModelReadConfig { GlobalToonPath = "" }); var motion = new VmdReader().Read(context.MotionPath); Debug.Log("motion load finished" + motion.Length + " frames"); var generator = BonePoseFileGenerator.GenerateAsync(model, motion, context.SavePath, 1.0f / 60.0f, 5.0f, 1.0f / 120.0f); _generator = generator; while (true) { var generatorStatus = generator.Status; if (generatorStatus == BonePoseFileGenerator.GenerateStatus.Failed || generatorStatus == BonePoseFileGenerator.GenerateStatus.Finished || generatorStatus == BonePoseFileGenerator.GenerateStatus.Canceled) { break; } if (generatorStatus == BonePoseFileGenerator.GenerateStatus.CalculatingFrames) { _tipText.text = "已计算" + generator.CalculatedFrames + "帧, 共" + generator.TotalFrames + "帧。 已完成" + 100L * generator.CalculatedFrames / generator.TotalFrames + "%"; } yield return(null); } if (generator.Status == BonePoseFileGenerator.GenerateStatus.Finished) { MainSceneController.Instance.ChangeCurrentBonePoseFile(context.SavePath); } ClosePage(); switch (generator.Status) { case BonePoseFileGenerator.GenerateStatus.Finished: ShowPage <OkDialog>(new OkDialog.Context { Title = "提示", Tip = "计算完成。现在可以流畅地播放了。以后如果需要再次播放同模型配同动作,选择模型、动作后可以再载入已保存的动作结果文件。记得在选择结果文件时可能需要先点“扫描”才能看到计算结果文件。", OnOk = () => { OnceTipPage.ShowOnceTip(TipNames.WhereIsBonePoseFile); } }); break; case BonePoseFileGenerator.GenerateStatus.Failed: ShowPage <OkDialog>(new OkDialog.Context { Title = "提示", Tip = "计算发生错误。" }); break; } }
public override void Awake(GameObject go) { _cameraFilePanel = transform.Find("MmdCamera").gameObject; _arUserDefinedPanel = transform.Find("ArUserDefined").gameObject; _arUserDefinedInitPanel = transform.Find("ArUserDefined/Init").gameObject; _arUserDefinedResetPanel = transform.Find("ArUserDefined/Reset").gameObject; MainSceneController.Instance.OnXrTypeChanged.AddListener(xrType => { _cameraFilePanel.SetActive(xrType == XrType.CameraFile); _arUserDefinedPanel.SetActive(xrType == XrType.ArUserDefined); if (xrType == XrType.ArUserDefined) { _arUserDefinedInitPanel.SetActive(true); _arUserDefinedResetPanel.SetActive(false); } }); SetButtonListener("Functions/BtnAddModel", () => { ShowPage <MmdFileSelector>(new MmdFileSelector.Context { Type = MmdFileSelector.FileType.Model, Title = "添加模型", OnFileSelect = filePath => { TtuiUtils.RunWithLoadingUI <LoadingDialog>(MainSceneController.Instance, () => { try { if (!MainSceneController.Instance.AddModel(filePath)) { ShowAddModelFailTip(); return; } } catch (Exception e) { Debug.LogException(e); ShowAddModelFailTip(); return; } ShowPage <MmdModelPanel>(); }); } }); OnceTipPage.ShowOnceTip(TipNames.ExportCustomMmdFiles); }); SetButtonListener("Functions/BtnSelectModel", () => { if (MainSceneController.Instance.GetModelCount() > 0) { ShowPage <MmdModelSelectPanel>(); } }); SetButtonListener("Functions/BtnSelectMusic", () => { ShowPage <MmdFileSelector>(new MmdFileSelector.Context { Type = MmdFileSelector.FileType.Music, Title = "选择音乐", OnFileSelect = filePath => { TtuiUtils.RunWithLoadingUI <LoadingDialog>(MainSceneController.Instance, () => { try { MainSceneController.Instance.ChangeMusic(filePath); } catch (Exception e) { Debug.LogException(e); } }); } }); OnceTipPage.ShowOnceTip(TipNames.ExportCustomMmdFiles); }); SetButtonListener("Functions/BtnPlay", () => { if (MainSceneController.Instance.GetXrType().Equals(XrType.VrGlass)) { ShowPage <VrCountdownPage>(); } else { MainSceneController.Instance.SwitchPlayPause(true); } }); SetButtonListener("Functions/BtnXR", ShowPage <XrSelecror>); SetButtonListener("Bottom/BtnQuit", ShowPage <ConfirmReturnTitlePage>); SetButtonListener("Bottom/BtnSave", ShowPage <SaveSceneDialog>); SetButtonListener("Bottom/BtnLoad", ShowPage <LoadSceneDilog>); SetButtonListener("MmdCamera/BtnSelectCamera", () => { ShowPage <MmdFileSelector>(new MmdFileSelector.Context { Type = MmdFileSelector.FileType.Motion, Title = "相机数据", OnFileSelect = filePath => { TtuiUtils.RunWithLoadingUI <LoadingDialog>(MainSceneController.Instance, () => { try { var xrController = MainSceneController.Instance.GetXrController(); var cameraFileController = xrController as CameraFileController; if (cameraFileController == null) { return; } MainSceneController.Instance.SwitchPlayPause(false); MainSceneController.Instance.ResetAll(); MainSceneController.Instance.CameraFilePath = filePath; if (!cameraFileController.CameraObject.LoadCameraMotion(filePath)) { TtuiUtils.ShowPageAfterLoadingUI <OkDialog>(MainSceneController.Instance, new OkDialog.Context { Tip = "载入的文件中不含镜头数据。", Title = "提示" }); } } catch (Exception e) { Debug.LogException(e); TtuiUtils.ShowPageAfterLoadingUI <OkDialog>(MainSceneController.Instance, new OkDialog.Context { Tip = "载入镜头数据失败。", Title = "提示" }); } }); } }); OnceTipPage.ShowOnceTip(TipNames.ExportCustomMmdFiles); }); SetButtonListener("ArUserDefined/Init/BtnStartAR", () => { var arController = MainSceneController.Instance.GetXrController() as ArUserDefinedController; if (arController == null) { return; } _arUserDefinedInitPanel.SetActive(false); _arUserDefinedResetPanel.SetActive(true); }); SetButtonListener("ArUserDefined/Reset/BtnResetAR", () => { var arController = MainSceneController.Instance.GetXrController() as ArUserDefinedController; if (arController == null) { return; } _arUserDefinedInitPanel.SetActive(true); _arUserDefinedResetPanel.SetActive(false); }); }
public override void Awake(GameObject go) { SetButtonListener("BtnSelectMotion", () => { ShowPage <MmdFileSelector>(new MmdFileSelector.Context { Type = MmdFileSelector.FileType.Motion, Title = "选择动作", OnFileSelect = filePath => { TtuiUtils.RunWithLoadingUI <LoadingDialog>(MainSceneController.Instance, () => { try { MainSceneController.Instance.ChangeCurrentMotion(filePath); } catch (Exception e) { Debug.LogException(e); } }); } }); OnceTipPage.ShowOnceTip(TipNames.ExportCustomMmdFiles); }); SetButtonListener("BtnSelectModel", () => { ShowPage <MmdFileSelector>(new MmdFileSelector.Context { Type = MmdFileSelector.FileType.Model, Title = "替换模型", OnFileSelect = filePath => { TtuiUtils.RunWithLoadingUI <LoadingDialog>(MainSceneController.Instance, () => { try { MainSceneController.Instance.ChangeCurrentModel(filePath); } catch (Exception e) { Debug.LogException(e); } }); } }); OnceTipPage.ShowOnceTip(TipNames.ExportCustomMmdFiles); }); SetButtonListener("BtnPosition", ShowPage <MmdModelTransform>); SetButtonListener("BtnDelete", () => { MainSceneController.Instance.DeleteCurrentModel(); }); SetButtonListener("BtnBack", ClosePage); SetButtonListener("BtnBonePoseCalculate", () => { var modelPath = MainSceneController.Instance.GetCurrentModelPath(); var motionPath = MainSceneController.Instance.GetCurrentMotionPath(); if (string.IsNullOrEmpty(modelPath)) { return; } if (string.IsNullOrEmpty(motionPath)) { ShowPage <OkDialog>(new OkDialog.Context { Title = "提示", Tip = "还没有选择动作。" }); return; } ShowPage <PhysicsCalculateSave>(new PhysicsCalculateSave.Context { ModelPath = modelPath, MotionPath = motionPath, DefaultFileName = GenerateDefaultBonePoseFileName(modelPath, motionPath) }); }); }