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 = 0;

// 将修改过的坐标赋给UI界面
_button.transform.position = new Vector3(pos.x, pos.y, pos.z);

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

// 获取按钮的屏幕坐标
Vector3 pos = UICamera.currentCamera.WorldToScreenPoint(_button.transform.position);
pos.z = 1;

pos = Camera.main.ScreenToWorldPoint(pos);
_cube.transform.position = new Vector3(pos.x,pos.y,pos.z);
原文地址:https://www.cnblogs.com/vitah/p/3988031.html