Unity鼠标指定位置放大缩小图片的方法


        在某些特定情况下,有时候我们需要放大缩小一张背景图片。最方便的做法就是:只需要通过鼠标和滚轮就能随意对Unity中导入的背景图片在鼠标位置进行放大缩小操作。 


     思路和代码如下。

    首先加载缓存中的图片给Image:

1、加载图片并抛出

 public static IEnumerator loadPicture(string absPath, Action callback)
    {
        WWW www = new WWW(absPath);
        yield return www;
        if (string.IsNullOrEmpty(www.error))
        {
            Sprite sprite = CreateSprite(www.texture);

            if (callback != null)
            {
                callback(sprite);
            }
        }
        else
        {

            Debug.Log(www.error);
        }
    }

 ///


    /// 创建精灵图片
    ///

    ///
    ///
    public static Sprite CreateSprite(Texture2D texture)
    {
        if (!texture)
        {
            return null;
        }
        return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));

2、设置图片给image 

public void LoadPicture(string bgpath)
        {
            if (string.IsNullOrEmpty(bgpath))
            {
                return;
            }
            string absPath = "file:///" + bgpath;
            StartCoroutine(FileUtils.loadPicture(absPath, sprite =>
            {
                img_Background.GetComponent().sprite = sprite;

            }));
        }

        ///


        ///3、使用滑轮  根据鼠标位置 设置背景板的背景大小
        ///

        public void SetImageSize(Transform transform)
        {
            float value = 0;
            value = controller.inputControl.MouseScrollWheel;
            if (value == 0)
            {
                return;
            }
            SetMouseChangeForImage(transform, value > 0 ? stepValue : -stepValue);
        }

 ///


        /// 4、通过鼠标控制缩放比例
        ///

        ///
        ///
       void SetMouseChangeForImage(Transform transform,int value)
        {
            float delX = Input.mousePosition.x - transform.position.x;
            float delY = Input.mousePosition.y - transform.position.y;

            float scaleX = delX / transform.GetComponent().rect.width / transform.localScale.x;
            float scaleY = delY / transform.GetComponent().rect.height / transform.localScale.y;

            transform.GetComponent().localScale += Vector3.one * 0.1f * value;
            nowVector3 = transform.GetComponent().localScale;
            if (nowVector3.x < 0.1f)
            {
                transform.GetComponent().localScale = Vector3.one * 0.1f;
            }
            if (nowVector3.x>3f)
            {
                transform.GetComponent().localScale = Vector3.one * 3f;
            }
            transform.GetComponent().pivot += new Vector2(scaleX, scaleY);
            transform.GetComponent().anchoredPosition3D += new Vector3(delX, delY, 0);
        }

    }

你可能感兴趣的:(Unity3D)