zoukankan      html  css  js  c++  java
  • 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;

       }

         

         

      

  • 相关阅读:
    python disable node
    Spring拥有xml配置文件和JavaConfig并存的情况
    Spring拥有多个JavaConfig(@Configuration)的情况
    阿里腾讯极其看重的数据中台,我用大白话给你解释清楚了
    f5 force offline
    JavaScript内存优化
    JavaScript内存优化
    JavaScript内存优化
    TreeMap分析(中)
    TreeMap分析(中)
  • 原文地址:https://www.cnblogs.com/zhanghaipeng-Unity3D/p/4732592.html
Copyright © 2011-2022 走看看