http://www.cnblogs.com/zhanghaipeng-Unity3D/p/4732592.html
由於游戲需要從背包中拖出武器並在場景中相應的位置生成出來,所以研究了一下這個。
一般來說,在Unity3D開發中如果使用NGUI為游戲做UI,我們的場景和UI並不是使用一個相機進行渲染的,所以從背包中拖出物體並在場景相應的位置生成物體,就會涉及到UICamera和場景攝像機的轉換。我在做這個時主要通過打射線來實現坐標轉換。
如何創建一個可拖動的UI組件可以參考NGUI中的Example 11

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;
}