Unity坐标系统

Unity使用了几种不同的坐标系统,分别如下:

1.屏幕坐标(Screen Space):屏幕坐标是以像素来定义的,以屏幕左下角为(0, 0)点,右上角为(Screen.width, Screen.height)点。如下图所示:

Screen Space.png

当你用点击手机屏幕时,你会得到一个屏幕坐标(x, y),注意,屏幕坐标只有x和y两个维度。Vector2 pos = Input.GetTouch(0).position;可以获得单个手指触摸的屏幕坐标。

2.绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

GUI Space.png

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

World世界坐标:从前视图front看:
·X轴正方向指向(屏幕)右侧。
·Z轴正方向指向(屏幕)上方。
·Y轴正方向背离你。

1. position是根据世界原点为中心

2. localPosition是根据父节点为中心,如果没有父节点,localpositon和position是没有区别的

3.选中一个物体左上角Global和Local切换看物体世界坐标轴和本地坐标轴

 
4.视口坐标(View Port Space): 视口坐标是相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。

View视图坐标:在默认坐标系下,在所有的(正交)视图中X,Y,Z三个轴是相同的。当你使用这个坐标系移动一个对象时,你所移动的对象与视口空间有如下关系。
·X轴总是指向(屏幕)右侧。
·Y轴总是指向(屏幕)上方。
·Z轴总是垂直屏幕指向你。

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

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

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

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

http://answers.unity3d.com/questions/256817/about-world-space-and-local-space.html
http://www.cnblogs.com/martianzone/p/3371789.htm

5. unity2d坐标 笛卡尔坐标系,00点是在正中心,X轴向右是正,向左是负。Y轴向上是正,向下是负。

using UnityEngine;
using System.Collections;

public class FishCommon : MonoBehaviour {

private float camHalfHeight;
private float camHalfWidth;

void Awake()
{
this.camHalfHeight = Camera.main.orthographicSize;
this.camHalfWidth = Camera.main.aspect * camHalfHeight;
}

void Update () {
//手指 或者 鼠标的坐标传进去
Move(Input.mousePosition);
}

public void Move(Vector2 postions){
Move(new Vector3(postions.x,postions.y,0));
}
public void Move(Vector3 postions){
//在这里进行坐标的换算
transform.position = ScreenToWorld(postions);
}

private Vector3 ScreenToWorld(Vector3 postion){

return Camera.main.ScreenToWorldPoint(postion);
}
}

原文地址:https://www.cnblogs.com/kanekiken/p/7533529.html