您的位置:首页 > 产品设计 > UI/UE

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

2017-03-01 15:51 302 查看
  接触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了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐