国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Unity中的坐標系轉化

2019-11-08 01:43:59
字體:
來源:轉載
供稿:網友

https://li-kang.gitbooks.io/unity-concise-course/content/Summary/coordinate.html

坐標系

在3D數學坐標系中,提到了以下3種坐標系。

世界坐標系:以大家公認的原點和軸向建立的坐標系。物體坐標系:以物體位置和自身軸向建立的坐標系。慣性坐標系:以物體位置和世界坐標系軸向建立的坐標系。

世界坐標系

Unity的Scene面板中(0,0,0)的位置就是世界坐標系的原點。右上角示意圖指明了世界坐標系的軸向。
transform.position; // 世界坐標系中物體的位置transform.forward;  // 世界坐標系中物體的前方

物體坐標系

選擇一個物體時,檢視面板Transform下的Position、Rotation、Scale指的是它在父物體坐標系中的位置、旋轉、縮放。當一個物體沒有指定父物體時,它的父物體就是世界。也就是說這時檢視面板Transform下的Position正好是它在世界坐標系中的位置。Unity引擎中物體保存的都是相對于父物體坐標系中的數據,所以當父物體變化(移動、旋轉、縮放)時,子物體會同步變化。

[截圖Transfrom面板]

transform.localPosition; // 在父物體坐標系中的位置transform.localRotation; // 在父物體坐標系中的旋轉transform.localScale;    // 在父物體坐標系中的縮放

屏幕坐標系

屏幕坐標系是2維的。屏幕坐標系是以屏幕左下角為(0,0), 右上角 (camera.pixelWidth, camera.pixelHeight)建立的坐標系。
Input.mousePosition; // 獲取鼠標在屏幕坐標系中的位置

視口坐標系

視口坐標系也是用來反應屏幕中位置的。視口坐標系使用的是屏幕寬度和高度的百分比,其左下角(0,0),右上角 (1,1)。視口坐標系適合用來在不同大小的屏幕間做適配。

GUI坐標系

專門用與GUI的坐標系。與屏幕坐標是上下顛倒的。其左上角(0,0), 右下角 (Screen.width, Screen.hight)

坐標系的轉換

GUI/屏幕間的轉化
// 屏幕坐標與GUI坐標間的轉化方面是一樣的Vector2 TransformScreenAndGui(Vector2 point) {  Vector2 result;  // x軸不變  result.x = point.x;  // y軸為屏幕高度減去原y坐標  result.y = Screen.hight - point.y;  return result;}屏幕/視口/世界間的轉化
// 屏幕轉視口Camera.main.ScreenToViewportPoint(Input.mousePosition); // 視口轉屏幕Camera.main.ViewportToScreenPoint(new Vector3(0.25F, 0.1F, 0));// 屏幕轉世界// 轉化后z軸不變// 如果輸入的是Vector2,轉化后z軸大小為camera的z軸值camera.ScreenToWorldPoint(Input.mousePosition);// 世界轉屏幕camera.WorldToScreenPoint(target.transform.position);// 視口轉世界camera.ViewportToWorldPoint(new Vector3(1, 1, camera.nearClipPlane));// 世界轉視口camera.WorldToViewportPoint(target.transform.position);物體/世界間的轉化
// 物體轉世界坐標transform.TransformPoint(3, 4, 5); // 世界轉物體坐標transform.InverseTransformPoint(3, 4, 5);// 物體坐標系中的方向轉到世界坐標方向transform.TransformDirection(Vector3.forward);// 世界坐標系中的方向轉到物體坐標方向transform.InverseTransformDirection(Vector3.forward);

運用舉例

// 確定目標在屏幕的左邊還是右邊using UnityEngine;using System.Collections;public class ExampleClass : MonoBehaviour {    public Transform target;    Camera camera;    void Start() {        camera = GetComponent<Camera>();    }    void Update() {        Vector3 viewPos = camera.WorldToViewportPoint(target.position);        if (viewPos.x > 0.5F)            PRint("target is on the right side!");        else            print("target is on the left side!");    }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五指山市| 石景山区| 辽宁省| 钦州市| 离岛区| 大安市| 郸城县| 富民县| 汝城县| 上饶县| 敖汉旗| 堆龙德庆县| 郧西县| 台安县| 五峰| 凤庆县| 云霄县| 宽城| 岑溪市| 汉阴县| 图们市| 台江县| 霍林郭勒市| 盐城市| 富顺县| 神池县| 肇庆市| 邢台县| 梅河口市| 盐边县| 当阳市| 桐乡市| 怀宁县| 浦江县| 沙河市| 航空| 澄迈县| 金秀| 佛冈县| 双鸭山市| 方山县|