在3D數學坐標系中,提到了以下3種坐標系。
世界坐標系:以大家公認的原點和軸向建立的坐標系。物體坐標系:以物體位置和自身軸向建立的坐標系。慣性坐標系:以物體位置和世界坐標系軸向建立的坐標系。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!"); }}
新聞熱點
疑難解答