【Unity3D自学记录】Unity中的物体缩放-Android和PC平台

在本文中缩放的是NGUI的Texture对象:

在一个有Collider的可以控制Texture的对象上添加如下脚本即可:

Texture是此对象的子物体,即ScaleDragTexture组件中的Image对象。


using UnityEngine;

public class ScaleDragTexture : MonoBehaviour
{
    public Transform uitexture;
    //当触屏点超过1个时,对图片进行放大和缩小,最小缩放比例为图片加载时大小    
    private float newdis;   //两个手指之间的距离
    private float olddis;
    private float minScale = 1.0f;     //放大比例
    private float maxScale = 2.0f;
    private float curScale = 1.0f;
    private Vector3 uitextureDefaultScale;
    private Vector3 uitextureCurScale;

    void Update()
    {
        if (Application.platform == RuntimePlatform.Android)
        {
            //物体的缩放 
            if (Input.touchCount > 1)
            {
                this.GetComponent<UIDragObject>().enabled = false;  //将DragObject脚本设置为不可用,来控制缩放的时候不进行拖拽
                if (uitextureDefaultScale != this.GetComponent<UpdateImage>().uitextureDefaultScale)
                {//获取图片未被拖拽时(默认状态)的缩放值
                    uitextureDefaultScale = uitextureCurScale = this.GetComponent<UpdateImage>().uitextureDefaultScale;
                }
                if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
                {
                    var pos1 = Input.GetTouch(0).position;
                    var pos2 = Input.GetTouch(1).position;
                    newdis = Vector2.Distance(pos1, pos2);//获取两个触击点的距离
                    curScale = uitextureCurScale.x / uitextureDefaultScale.x;   //获取当前的缩放比例值
                    if (newdis < olddis)
                    {//比例缩小
                        if (curScale > maxScale || curScale > minScale)
                            uitexture.localScale -= uitextureDefaultScale * Time.deltaTime;
                    }
                    if (newdis > olddis)
                    {//比例放大
                        if (curScale <= maxScale)
                            uitexture.localScale += uitextureDefaultScale * Time.deltaTime;
                    }
                    if (curScale < minScale)
                    {//当前比例小于最小值时恢复到默认缩放值
                        uitexture.localScale = uitextureDefaultScale;
                    }
                    uitextureCurScale = uitexture.localScale;
                    olddis = newdis;
                }
                if (curScale == minScale)
                {//图片未进行缩放时,只有Y轴上可以被拖动
                    this.GetComponent<UIDragObject>().scale = new Vector3(0, 1, 0);
                }
                else
                {//当图片缩放后,在X、Y轴上可以被拖动
                    this.GetComponent<UIDragObject>().scale = new Vector3(1, 1, 0);
                }
            }
            else if (Input.touchCount == 1)
            {
                this.GetComponent<UIDragObject>().enabled = true;  //将DragObject脚本设置为可用
            }
        }

        else
        {
            if (Input.GetMouseButton(2))    //鼠标中键
            {
                this.GetComponent<UIDragObject>().enabled = false;  //将DragObject脚本设置为不可用,来控制缩放的时候不进行拖拽

                if (uitextureDefaultScale != this.GetComponent<UpdateImage>().uitextureDefaultScale)
                {//获取图片未进行缩放时的Scale值
                    uitextureDefaultScale = uitextureCurScale = this.GetComponent<UpdateImage>().uitextureDefaultScale;
                }
                curScale = uitextureCurScale.x / uitextureDefaultScale.x;   //获取当前的缩放比例值
                if (Input.GetAxis("Mouse ScrollWheel") < 0)
                {//比例放大
                    if (curScale <= maxScale)
                        uitexture.localScale += uitextureDefaultScale * Time.deltaTime;
                }
                else if (Input.GetAxis("Mouse ScrollWheel") > 0)
                {//比例缩小
                    if (curScale > minScale || curScale > maxScale)
                        uitexture.localScale -= uitextureDefaultScale * Time.deltaTime;
                }
                if (uitexture.localScale.x < uitextureDefaultScale.x)
                {//当缩放的值小于默认值时,恢复到默认值
                    uitexture.localScale = uitextureDefaultScale;
                }
                uitextureCurScale = uitexture.localScale;
                if (curScale == minScale)
                {//默认未进行缩放时只有Y轴上可以被拖动
                    this.GetComponent<UIDragObject>().scale = new Vector3(0, 1, 0);
                }
                else
                {//缩放之后X、Y轴上可以被拖动
                    this.GetComponent<UIDragObject>().scale = new Vector3(1, 1, 0);
                }
            }
            else if (Input.GetMouseButtonDown(0))
            {
                this.GetComponent<UIDragObject>().enabled = true;  //将DragObject脚本设置为可用
            }
        }
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值