wangguan
2020-10-27 f79f61b93d8061d89dde18063526e417ffc409d2
Assets/Scripts/Guide/Mask/RectGuidance.cs
@@ -49,22 +49,30 @@
    /// 事件渗透组件
    /// </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;
@@ -100,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>
@@ -107,35 +133,37 @@
    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);
        }
    }
@@ -148,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;
    }
}