wangguan
2020-10-27 f79f61b93d8061d89dde18063526e417ffc409d2
Assets/Scripts/Guide/Mask/RectGuidance.cs
@@ -54,18 +54,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 +108,24 @@
        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>
@@ -126,17 +151,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 +176,9 @@
    private Vector2 WorldToCanvasPos(Canvas canvas, Vector3 world)
    {
        Vector2 position;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, world, canvas.GetComponent<Camera>(), out position);
        return position;
    }
}