| | |
| | | /// 事件渗透组件 |
| | | /// </summary> |
| | | private GuidanceEventPenetrate eventPenetrate; |
| | | |
| | | Canvas canvas; |
| | | private void Awake() |
| | | { |
| | | 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); |
| | | } |
| | | Canvas canvas = GameObject.Find("MainUI").GetComponent<Canvas>(); |
| | | //获取高亮区域的四个顶点的世界坐标 |
| | | 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; |
| | |
| | | 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); |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 收缩速度 |
| | | /// </summary> |
| | |
| | | private float shrinkVelocityY = 0f; |
| | | //private void Update() |
| | | //{ |
| | | //从当前偏移量到目标偏移量差值显示收缩动画 |
| | | // float valueX = Mathf.SmoothDamp(currentOffsetX, targetOffsetX, ref shrinkVelocityX, shrinkTime); |
| | | // float valueY = Mathf.SmoothDamp(currentOffsetY, targetOffsetY, ref shrinkVelocityY, shrinkTime); |
| | | // if (!Mathf.Approximately(valueX, currentOffsetX)) |
| | | // { |
| | | // currentOffsetX = valueX; |
| | | // material.SetFloat("_SliderX", currentOffsetX); |
| | | // } |
| | | // if (!Mathf.Approximately(valueY, currentOffsetY)) |
| | | // { |
| | | // currentOffsetY = valueY; |
| | | // material.SetFloat("_SliderY", currentOffsetY); |
| | | // } |
| | | //从当前偏移量到目标偏移量差值显示收缩动画 |
| | | // float valueX = Mathf.SmoothDamp(currentOffsetX, targetOffsetX, ref shrinkVelocityX, shrinkTime); |
| | | // float valueY = Mathf.SmoothDamp(currentOffsetY, targetOffsetY, ref shrinkVelocityY, shrinkTime); |
| | | // if (!Mathf.Approximately(valueX, currentOffsetX)) |
| | | // { |
| | | // currentOffsetX = valueX; |
| | | // material.SetFloat("_SliderX", currentOffsetX); |
| | | // } |
| | | // if (!Mathf.Approximately(valueY, currentOffsetY)) |
| | | // { |
| | | // currentOffsetY = valueY; |
| | | // material.SetFloat("_SliderY", currentOffsetY); |
| | | // } |
| | | //} |
| | | |
| | | //立刻显示阴影区域 |
| | | 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); |
| | | } |
| | | } |
| | | |
| | |
| | | private Vector2 WorldToCanvasPos(Canvas canvas, Vector3 world) |
| | | { |
| | | Vector2 position; |
| | | |
| | | RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, world, canvas.GetComponent<Camera>(), out position); |
| | | |
| | | return position; |
| | | } |
| | | } |