Unity3D NGUI从背包中拖出并在场景中生成物体

  http://www.cnblogs.com/zhanghaipeng-Unity3D/p/4732592.html

  由于游戏需要从背包中拖出武器并在场景中相应的位置生成出来,所以研究了一下这个。

  一般来说,在Unity3D开发中如果使用NGUI为游戏做UI,我们的场景和UI并不是使用一个相机进行渲染的,所以从背包中拖出物体并在场景相应的位置生成物体,就会涉及到UICamera和场景摄像机的转换。我在做这个时主要通过打射线来实现坐标转换。

  如何创建一个可拖动的UI组件可以参考NGUI中的Example 11 

      

  我们这里只需要重写DragDropItem这个类的OnDragDropRelease方法就可以了,下面是简化的关键代码

       protected override void OnDragDropRelease(GameObject surface)

   {

    base.OnDragDropRelease(surface);

    //首先将拖动按钮时,按钮的位置通过UICamera转换为屏幕坐标

          Vector3 screenPoint = UICamera.WorldToScreenPoint(this.transform.position);

          /*然后我们需要在场景中建一个EmptyGameObject,并为其命名为InstantiatePos,为其挂上collider,

          *这里我们将InstantiatePos的layer设为Pos(我们自己创建的层,第9层),然后我们就能通过主摄像机在刚刚

    * 得到的屏幕坐标的位置打出一条射线,在这条射线有InstantiatePos发生碰撞的位置就是我们武器生成的位置,

    * 就可以在此处生成从UI生成的物体。

    */   

         int layerMask = 1 << 9;

         RayHit hit;

    float distance = 1000.0f;

    if (!Physics.Raycast(mainCamera.ScreenPointToRay(screenPoint), out hit, distance, layerMask))
    {
      return;
    }

          //生成武器的位置

          weapon.positon = hit.point;

   }

 

     

     

  

posted @ 2015-08-15 15:53  特--呆  阅读(3057)  评论(0编辑  收藏  举报