一, Unity中的常用坐标系

1⃣️,世界坐标系 (左手定则)

        this.transform.Position

2⃣️,本地坐标系(左手定则)

        this.transform.LocalPosition

3⃣️,屏幕坐标系

            1,左下角为原点(0,0)

            2,右上角为 (Screen.Width,Screen.Hight

            3,Z的位置是以相机的世界单位来衡量//及物体离相机远近

         4,和屏幕分辨率有关

         5,鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得鼠标坐标,当用Input.MousePosition获取鼠标位置的时候,他的Z轴值一直为0

                    public Vector3 MyScreenToWorld( Vector3 mousePos, Transform targetTransform ){

                                Vector3 dir = targetTransform.position - Camera.main.transform.position;

                                //计算投影

                                Vector3 normalDir = Vector3.Project( dir, Camera.main.transform.forward );

                                //物体离相机远近 (normalDir.magnitude

                                Vector3 worldPos = Camera.main.ScreenToWorldPoint( new Vector3(  mousePos.x , mousePos.y, normalDir.magnitude) );

                                return worldPos;

                    }

         6,手指触摸屏也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指的手机屏幕坐标

4⃣️,视口坐标系

            1,左下角为原点(0,0)

            2,右上角为(1,1)

二,坐标系转换

        1⃣️,世界坐标和本地坐标转换

                1,本地转世界 : this.transform.TransformPoint(0,0,0);

                2,世界转本地: this.transform.InverseTransformPoint(0,0,0);

        2⃣️,世界坐标和屏幕坐标转换

                1, 世界转屏幕:Camera.main.WorldToScreenPoint( vector3 );

                2,   屏幕转世界:Camera.main.ScreenToWorldPoint(vector3);

        3⃣️,世界坐标和视口坐标转换

                1,世界转视口:Camera.main.WorldToViewportPoint(0,0,0);               

                2,  视口转世界:Camera.main.ViewportToWorldPoint(0,0,0);

        4⃣️,屏幕坐标和视口坐标转换

                1,屏幕转视口:Camera.main.ScreenToViewportPoint(0,0,0);

                2,  视口转屏幕:Camera.main.ViewportToScreenPoint(0,0,0);


  if (Input.GetMouseButtonDown(0))

        {

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);   // 从鼠标位置发送射线

            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, 100, 1 << LayerMask.NameToLayer("Plane")))

            {

                Debug.Log(hit.collider.name);

            }

        }



   if (Input.GetMouseButtonDown(0))

        {

            Ray ray = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));    // 从屏幕中央发送射线

            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, 100, 1 << LayerMask.NameToLayer("Plane")))

            {

                Debug.Log(hit.collider.name);

            }

        }


©著作权归作者所有:来自51CTO博客作者Aonaufly的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 官方示例(十三):3步70行代码开发GIS点坐标技术 ThingJS
  2. PHP实例计算经纬坐标间的距离
  3. 获取图像特定区域的所有多边形坐标?
  4. HTML5绘图之Canvas标签 绘制坐标轴
  5. 检查并删除重复的坐标x,y画布

随机推荐

  1. android orm映射框架 ormlite (类似于hib
  2. 【Android(安卓)Training - UserInfo】记
  3. android手机定位不准的问题
  4. Android休眠机制
  5. 关于启动Android模拟器时,运行时,会再弹出
  6. Android虚拟平台的编译和整合
  7. Android(安卓)以图找图功能
  8. Android 基础总结:(二)Android APP基础及组
  9. Android能赢得开发者吗?
  10. IOS和Android OpenGL游戏引擎的集成AdMob