using UnityEngine; using UnityEngine.UI; using QFramework; using System.IO; using UnityEngine.Rendering.Universal; using TMPro; using UnityEngine.EventSystems; using DG.Tweening; using System; namespace QFramework.Example { public class UIDrawData : UIPanelData { } public partial class UIDraw : UIPanel { protected override void OnInit(IUIData uiData = null) { mData = uiData as UIDrawData ?? new UIDrawData(); // 关闭按钮监听 CloseBtn.onClick.AddListener(() => { StringEventSystem.Global.Send($"On{UIDraw.Name}Close"); Hide(); }); PenSizeSlider.onValueChanged.AddListener(value => { RefreshPenSize(); }); AlphaSlider.onValueChanged.AddListener(value => { RefreshAlphaSet(); }); HideBtn.onValueChanged.AddListener(isOn => { if (isOn) { Content.GetComponent().DORestart(); HideBtn.transform.Find("Label").GetComponent().text = "显示"; } else { Content.GetComponent().DOPlayBackwards(); HideBtn.transform.Find("Label").GetComponent().text = "隐藏"; } }); foreach (var toggle in Colors.GetComponentsInChildren()) { toggle.onValueChanged.AddListener(isOn => { if (isOn) { ChangeColor(toggle.transform.Find("Color").GetComponent().color); } }); } BackBtn.onClick.AddListener(() => { ScreenShotPainter.instance.Undo(); }); ClearBtn.onClick.AddListener(() => { ScreenShotPainter.instance.Clear(); }); Pen.onValueChanged.AddListener(isOn => { if (isOn) { ScreenShotPainter.instance.SetStatus(ScreenShotPainter.Status.Pen); RefreshPenSize(); } }); Eraser.onValueChanged.AddListener(isOn => { if (isOn) { ScreenShotPainter.instance.SetStatus(ScreenShotPainter.Status.Eraser); RefreshPenSize(); } }); Line.onValueChanged.AddListener(isOn => { if (isOn) { ScreenShotPainter.instance.SetStatus(ScreenShotPainter.Status.Line); } }); Rect.onValueChanged.AddListener(isOn => { if (isOn) { ScreenShotPainter.instance.SetStatus(ScreenShotPainter.Status.Rect); } }); Circle.onValueChanged.AddListener(isOn => { if (isOn) { ScreenShotPainter.instance.SetStatus(ScreenShotPainter.Status.Circle); } }); Arrow.onValueChanged.AddListener(isOn => { if (isOn) { ScreenShotPainter.instance.SetStatus(ScreenShotPainter.Status.Arrow); } }); ColorAreaBtn.onClick.AddListener(() => { ColorArea.gameObject.SetActive(true); }); colorPicker.GetComponent().OnSelected = color => { ChangeColor(color); }; mask.onClick.AddListener(() => { ColorArea.gameObject.SetActive(false); }); } public void ChangeColor(Color color) { Icon.color = new Color(color.r, color.g, color.b, Icon.color.a); ScreenShotPainter.instance.SetPaintColor(Icon.color); } public void RefreshPenSize() { var normalValue = PenSizeSlider.value / PenSizeSlider.maxValue; if (Eraser.isOn) { //大小 float size = PaintingParams.EraserSizeMaxValue + (1 - normalValue) * PaintingParams.EraserSizeFactor; float sizeY = ((float)Screen.height / (float)Screen.width) * size; ScreenShotPainter.instance.SetEraserSize(size, sizeY); float width = Screen.width / size; float height = Screen.width / size;//不缩放y轴了 Icon.transform.localScale = new Vector3(width / Icon.rectTransform.rect.width, height / Icon.rectTransform.rect.height, 1); } else { float size = PaintingParams.BrushSizeMaxValue + (1 - normalValue) * PaintingParams.BrushSizeFactor; float sizeY = ((float)Screen.height / (float)Screen.width) * size; ScreenShotPainter.instance.SetPaintingSize(size, sizeY); float width = Screen.width / size; float height = Screen.width / size;//不缩放y轴了 Icon.transform.localScale = new Vector3(width / Icon.rectTransform.rect.width, height / Icon.rectTransform.rect.height, 1); } Penvalue.text = PenSizeSlider.value.ToString(); } public void RefreshAlphaSet() { var color = Icon.color; color.a = AlphaSlider.value / 100f; Icon.color = color; ScreenShotPainter.instance.SetPaintColor(Icon.color); AlphaValue.text = AlphaSlider.value + "%"; } private void HandleSaveClearColorInput() { if (Input.GetKeyDown(KeyCode.S)) { SaveDrawing(); } } // 保存绘制结果的方法 private void SaveDrawing() { string filePath = Application.dataPath + "/Drawings/" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".png"; // 创建保存文件夹 Directory.CreateDirectory(Path.GetDirectoryName(filePath)); ScreenCapture.CaptureScreenshot(filePath); Debug.Log("Drawing saved to: " + filePath); } protected override void OnOpen(IUIData uiData = null) { TypeEventSystem.Global.Register(OnBeginScreenShot); TypeEventSystem.Global.Register(OnEndScreenShot); Show3DCamera.instance.lockMove = true; DrawController.instance.gameObject.SetActive(true); ScreenShotPainter.instance.Init(RawImg, captureBGImg, CirCleImg, RectImg); ScreenShotPainter.instance.SwitchOn(true); ScreenShotPainter.instance.SetPaintColor(Icon.color); RefreshAlphaSet(); RefreshPenSize(); } private void OnEndScreenShot(EndScreenShot shot) { Content.gameObject.SetActive(true); } private void OnBeginScreenShot(BeginScreenShot shot) { Content.gameObject.SetActive(false); } protected override void OnShow() { } protected override void OnHide() { Show3DCamera.instance.lockMove = false; DrawController.instance.gameObject.SetActive(false); TypeEventSystem.Global.UnRegister(OnBeginScreenShot); TypeEventSystem.Global.UnRegister(OnEndScreenShot); } protected override void OnClose() { } } }