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