NGUI 关于大背景用鼠标点击移动问题

  接触NGUI 的时日还不是很多,最近在一个2d游戏中遇到了一个摄像机的移动问题,纠结了好久,不过最终还是找到了解决方法。
        需求是在一个大背景地图上,需要鼠标点击或触摸(手机版)背景地图拖动摄像机移动。如果是3d的话,可以用射线去检测,而NGUI是不支持2d射线检测了。在背景地图上,如果存在其他UI界面,如何控制鼠标点击的物体是背景这就是主要的问题。楼主找了好久,终于找到一个方法可以实现。下面是代码
   
   float speed = 0.5f;
    Vector2 start, stop;
    Vector2 step;//鼠标点击移动的向量
    private Vector3 Velocity = Vector3.zero;
    Vector2 pstart, pstop, pstep;
    float border_y, border_x;//摄像机的边界值
    int curStep, maxStep;
    Transform common;
    public GameObject backGround;
    public GameObject panelPlant;
    Vector2 startPosition, stopPosition;//鼠标点击开始和结束时的位置
    Vector2 neoPosition;


    // Use this for initialization
    void Start()
    {
   
        startPosition = Input.mousePosition;
        stopPosition = Input.mousePosition;
        neoPosition = new Vector2(-1, -1);
        border_x =60;
        border_y = 120f;
        curStep = 0;
        maxStep = 0;    
    }


  
    // Update is called once per frame
    void Update()
    {


        if (Input.GetMouseButton(0) && UICamera.hoveredObject != null && UICamera.hoveredObject.name == "BackGround")
        {
            stopPosition = Input.mousePosition;
            if (startPosition.x < 0) { startPosition = stopPosition; return; }
            step = startPosition - stopPosition;
            startPosition = stopPosition;
            if (step.x < 2 && step.y < 2 && step.x > -2 && step.y > -2) return;//avoid move when click                   
            step *= 1.3f;
            transform.localPosition = new Vector2(transform.localPosition.x + step.x, transform.localPosition.y + step.y);
            if (transform.localPosition.x < -border_x)
            {
                transform.localPosition = new Vector2(-border_x, transform.localPosition.y);
            }
            if (transform.localPosition.x > border_x)
            {
                transform.localPosition = new Vector2(border_x, transform.localPosition.y);
            }
            if (transform.localPosition.y < -border_y)
            {
                transform.localPosition = new Vector2(transform.localPosition.x, -border_y);
            }
            if (transform.localPosition.y > border_y)
            {
                transform.localPosition = new Vector2(transform.localPosition.x, border_y);
            }
        }
        else if (startPosition.x >= 0) { startPosition = neoPosition; }


        
    }  
                  
        UICamera.hoveredObject 这个方法的意思就是,它会检测到由UICamera发出的射线所碰触的最后一个UI。(当然别忘了加collider。。。。)。这样就大功告成,只有当鼠标点击背景是,才会移动。这个方法的脚本挂在摄像机上就OK了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值