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

本文介绍如何在Unity3D中实现从UI层拖拽物品到游戏场景中的具体位置,并详细解释了使用NGUI时涉及的UICamera与场景摄像机之间的坐标转换过程。

  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;

   }

 

     

     

  

转载于:https://www.cnblogs.com/zhanghaipeng-Unity3D/p/4732592.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值