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

 

你可能感兴趣的:(unity)