Unity3D的四种座标系

1, World Space(世界座标):

我们在场景中添加物体(如:Cube),他们都是以世界座标显示在场景中的。transform.position可以获得该位置座标。

2, Screen Space(屏幕座标):

以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。

注:鼠标位置座标属于屏幕座标,Input.mousePosition可以获得该位置座标,手指触摸屏幕也为屏幕座标,Input.GetTouch(0).position可以获得单个手指触摸屏幕座标。

ViewPort Space(视口座标):视口座标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。(用的不多,反正我暂时没有用到~呵呵~)

3, 绘制GUI界面的座标系:

这个座标系与屏幕座标系相似,不同的是该座标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

世界座标→屏幕座标:camera.WorldToScreenPoint(transform.position);这样可以将世界座标转换为屏幕座标。其中camera为场景中的camera对象。

屏幕座标→视口座标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕座标转换为视口座标。其中camera为场景中的camera对象。

视口座标→屏幕座标:camera.ViewportToScreenPoint();

 视口座标→世界座标:camera.ViewportToWorldPoint();

案例1——在鼠标点击的位置上绘制一张图片出来(关于绘制GUI界面座标系与屏幕座标系之间的关系)。

 using UnityEngine;  

 using System.Collections;  

 public class test : MonoBehaviour   {          

      //图片    

    public Texture img;      

     //储存鼠标的位置座标      

    private Vector2 pos;     

     void OnGUI()     

      {             

          //鼠标左击,获取当前鼠标的位置         

       if (Input.GetMouseButton(0))           

          {         

               pos = Input.mousePosition;             

           }          

             //绘制图片        

        GUI.DrawTexture(new Rect(pos.x,Screen.height - pos.y,100,100), img);         

      }     

 }  

案例2——座标显示和座标转换(这个是触摸方面的。如果没有触摸屏,那就将那个if去掉吧!)

 using UnityEngine;     

 using System.Collections;     

 public class test: MonoBehaviour   {         

     //场景的相机,拖放进来        

    public Camera camera;          

     //场景的物体        

    private GameObject obj;      

      void Start()        

       {          

            //初始化        

        obj = GameObject.Find("Plane");         

        }         

         void Update ()       

         {              

               //有触摸           

          if (Input.touchCount > 0)              

               {                   

                   print("世界座标" + obj.transform.position);                    

                    print("屏幕座标" + Input.GetTouch(0).position);                    

                    print("世界座标→屏幕座标" + camera.WorldToScreenPoint(obj.transform.position));                    

                    print("屏幕座标→视口座标" + camera.ScreenToViewportPoint(Input.GetTouch(0).position));                   

                   print("世界座标→视口座标" + camera.WorldToViewportPoint(obj.transform.position));               

            }         

      }   

 }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章