u3d中的坐标系
任何子級游戲對象 (Child GameObject) 的檢視器 (Inspector) 中的變換 (Transform) 值都會相對于父級 (Parent) 的變換 (Transform) 值而顯示。這些值又被稱局部坐標 (Local Coordinate)?
就是說。u3d界面上設置的坐標都是其本地坐標
轉換小圖示切換 (Transform Gizmo Toggles) -- 影響場景視圖 (Scene View) 顯示 ? 該圖標只是為了旋轉和移動位置時方便操作。。pivot 中心點在父對象本身的中心點。。 center在父對象整個容器的中心點。。。 ?global是全局的坐標系。。。local是本地的坐標系(旋轉后,會改變坐標方向)
?
Screen Space(屏幕坐標):以像素來定義的,以屏幕的左下角為(0,0)點,右上角為(Screen.width,Screen.height),Z的位置是以相機的世界單位來衡量的。注:鼠標位置坐標屬于屏幕坐標,Input.mousePosition可以獲得該位置坐標,手指觸摸屏幕也為屏幕坐標,Input.GetTouch(0).position可以獲得單個手指觸摸屏幕坐標。
ViewPort Space(視口坐標):視口坐標是標準的和相對于相機的。相機的左下角為(0,0)點,右上角為(1,1)點,Z的位置是以相機的世界單位來衡量的。(用的不多,反正我暫時沒有用到~呵呵~)
繪制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界面坐標系與屏幕坐標系之間的關系)。 [csharp]?view plaincopy
- 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去掉吧!) [csharp]?view plaincopy
- 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));???????????????
- ????????????}?????????
- ??????}???
- } ?
轉載于:https://www.cnblogs.com/zhepama/p/4331419.html
總結
- 上一篇: thymeleaf 使用javascri
- 下一篇: underscore.js源码研究(5)