Unity 3D物体的点击事件响应以及NGUI坐标和世界坐标的互相转换

Unity 版本:4.5 NGUI版本:3.6.5

参考链接:http://game.ceeger.com/Script/Camera/Camera.ScreenPointToRay.html,Uniyt圣典

       http://www.unitymanual.com/blog-4392-1229.html,作者:游戏蛮牛 han1127

       http://www.cnblogs.com/alongu3d/archive/2013/01/05/raycast1.html,博客园 梦想之家

1、3D物体的点击事件响应:

  下述代码添加到3D 物体中,通过对鼠标点击位置的射线进行碰撞检测,然后判断点击的是不是当前的对象即可

void Update()
{
if (Input.GetButtonDown("Fire1"))
{ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit; if (Physics.Raycast(ray, out hit))
{
if (hit.collider.gameObject == gameObject)
{
//插入执行代码
}
}
}
}

2、世界坐标转为NGUI坐标:

// 获取目标物体的屏幕坐标
Vector3 pos = Camera.main.WorldToScreenPoint(gameobject); // 将屏幕坐标转换为UI的世界坐标
pos = UICamera.currentCamera.ScreenToWorldPoint(pos);
// 由于NGUI 2D界面的Z轴都为0
pos.z = ; // 将修改过的坐标赋给UI界面
_button.transform.position = new Vector3(pos.x, pos.y, pos.z);

3、NGUI坐标转为世界坐标:

// 获取按钮的屏幕坐标
Vector3 pos = UICamera.currentCamera.WorldToScreenPoint(_button.transform.position);
pos.z = ; pos = Camera.main.ScreenToWorldPoint(pos);
_cube.transform.position = new Vector3(pos.x,pos.y,pos.z);
上一篇:不要在 _ASSERT() 宏中执行功能代码 AND RELEASE版调试办法


下一篇:JavaScript的for循环中嵌套一个点击事件为何点击一次弹出多个相同的值