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;

   }

 

     

     

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM