From 344267a8edb7bc6eaa67a0493292f438d31ca20e Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Tue, 17 Nov 2020 21:10:57 +0800 Subject: [PATCH] buff补充 --- Assets/Scripts/Guide/Mask/RectGuidance.cs | 53 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 46 insertions(+), 7 deletions(-) diff --git a/Assets/Scripts/Guide/Mask/RectGuidance.cs b/Assets/Scripts/Guide/Mask/RectGuidance.cs index a202905..0cd3188 100644 --- a/Assets/Scripts/Guide/Mask/RectGuidance.cs +++ b/Assets/Scripts/Guide/Mask/RectGuidance.cs @@ -42,10 +42,6 @@ /// </summary> private float currentOffsetY = 0f; /// <summary> - /// 高亮区域缩放的动画时间 - /// </summary> - private float shrinkTime = 0.5f; - /// <summary> /// 事件渗透组件 /// </summary> private GuidanceEventPenetrate eventPenetrate; @@ -54,18 +50,25 @@ { instance = this; canvas = GameObject.Find("MainUI").GetComponent<Canvas>(); + eventPenetrate = GetComponent<GuidanceEventPenetrate>(); + material = GetComponent<Image>().material; } public void Init(Image target) { this.target = target; - eventPenetrate = GetComponent<GuidanceEventPenetrate>(); if (eventPenetrate != null) { eventPenetrate.SetTargetImage(target); } //获取高亮区域的四个顶点的世界坐标 target.rectTransform.GetWorldCorners(corners); + + for (int i = 0; i < corners.Length; i++) + { + Debug.Log("corners i:" + i + " vec3:" + corners[i]); + } + //计算高亮显示区域在画布中的范围 targetOffsetX = Vector2.Distance(WorldToCanvasPos(canvas, corners[0]), WorldToCanvasPos(canvas, corners[3])) / 2f; targetOffsetY = Vector2.Distance(WorldToCanvasPos(canvas, corners[0]), WorldToCanvasPos(canvas, corners[1])) / 2f; @@ -101,6 +104,38 @@ material.SetFloat("_SliderX", currentOffsetX); material.SetFloat("_SliderY", currentOffsetY); } + + + public void InitForCamera(Image target, float x, float y) + { + this.target = target; + if (eventPenetrate != null) + { + eventPenetrate.SetTargetImage(target); + } + + Vector2 center = target.GetComponent<RectTransform>().anchoredPosition; + + material.SetVector("_Center", center); + material.SetFloat("_SliderX", x); + material.SetFloat("_SliderY", y); + + } + + public void InitForCamera(Image target, Vector2 center ,float x, float y) + { + this.target = target; + if (eventPenetrate != null) + { + eventPenetrate.SetTargetImage(target); + } + + material.SetVector("_Center", center); + material.SetFloat("_SliderX", x); + material.SetFloat("_SliderY", y); + + } + /// <summary> /// 收缩速度 /// </summary> @@ -126,17 +161,19 @@ //立刻显示阴影区域 public void ShowImmediately() { + //return; + float valueX = Mathf.SmoothDamp(currentOffsetX, targetOffsetX, ref shrinkVelocityX, 0); float valueY = Mathf.SmoothDamp(currentOffsetY, targetOffsetY, ref shrinkVelocityY, 0); if (!Mathf.Approximately(valueX, currentOffsetX)) { currentOffsetX = valueX; - material.SetFloat("_SliderX", currentOffsetX); + material.SetFloat("_SliderX", targetOffsetX); } if (!Mathf.Approximately(valueY, currentOffsetY)) { currentOffsetY = valueY; - material.SetFloat("_SliderY", currentOffsetY); + material.SetFloat("_SliderY", targetOffsetY); } } @@ -149,7 +186,9 @@ private Vector2 WorldToCanvasPos(Canvas canvas, Vector3 world) { Vector2 position; + RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, world, canvas.GetComponent<Camera>(), out position); + return position; } } -- Gitblit v1.9.1