Unity3D的几种坐标系
- World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。
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)。
- LineRender坐标:以屏幕中心为原点,向上向右增加。
世界坐标→屏幕坐标: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 ScreenToGUI : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}//图片 public Texture img; //储存鼠标的位置坐标 private Vector2 pos;void OnGUI(){//鼠标左击,获取当前鼠标的位置 if (Input.GetMouseButton(0)){pos = Input.mousePosition; //屏幕坐标 }//绘制图片,屏幕坐标和GUI界面坐标只在Y轴上方向相反,只要被Screen.height减就可以互相转换。 GUI.DrawTexture(new Rect(pos.x, Screen.height - pos.y, 100, 100), img);}}
案例2——角色头顶的名字(世界坐标转GUI界面坐标)
先世界坐标转屏幕坐标,再屏幕坐标转GUI界面坐标
代码如下:
using UnityEngine; using System.Collections;public class Blood : MonoBehaviour {public static float ScaleWidht = 0f;public static float ScaleHeight = 0f;private Rect _drawRect = new Rect();public float Width = 0f;public float Height = 10f;public const float DesignStageWidth = 800;public const float DesignStageHeight = 480;public Vector2 pos2;public float size_z;// Use this for initializationvoid Start () {ScaleWidht = Screen.width / DesignStageWidth;ScaleHeight = Screen.height / DesignStageHeight;Height = 2f;size_z = transform.gameObject.collider.bounds.size.z;}// Update is called once per framevoid Update () {//世界坐标转换到屏幕坐标 print(transform.forward);pos2 = Camera.main.WorldToScreenPoint(transform.position + transform.forward * (size_z / 2)); //计算角色头顶坐标pos2 = new Vector2(pos2.x, Screen.height - pos2.y - Height); //Vector3 worldPosition = new Vector3(transform.position.x, transform.position.y + Height, transform.position.z);//worldPosition = Camera.mainCamera.WorldToScreenPoint(worldPosition);//_drawRect = new Rect((worldPosition.x - 100 * ScaleWidht) / ScaleWidht, (Screen.height - worldPosition.y - 50 * ScaleHeight) / ScaleHeight, 200, 50); }void OnGUI(){//GUILayout.BeginArea(_drawRect);// GUILayout.Label("======哈哈======");//GUILayout.EndArea(); GUI.Label(new Rect(pos2.x, pos2.y, 100, 50), "=BETTER=");} }
案例3——类似屏幕解锁功能的实现(屏幕坐标转换为世界坐标)
首先是创建LineRenderer。GameObject -> Create Empty ->更名为“LineRendererObj”,
给LineRendererObj添加“Line Renderer”组件,Component ->Effects ->Line Renderer;
将它的Positions 的size 设置为0
接下来是代码touch.CS:
using UnityEngine; using System.Collections; using System.Collections.Generic;public class touch : MonoBehaviour {private Event e;public Texture2D Point;public Color c1 = Color.yellow;public Color c2 = Color.red;public int lengthOfLineRenderer;public GameObject LineRendererPrefab;private LineRenderer lineRenderer;/// <summary>/// 保存创建的Line Renderer/// </summary>private List<LineRenderer> lineRendArray =new List<LineRenderer>();private Vector3 screenPoint;private Vector3 scanPos;private Color[] color;/// <summary>/// 记录宫格所在GUI位置/// </summary>public List<Rect> AreaRect = new List<Rect>();/// <summary>/// 记录宫格中心点/// </summary>public List<Vector2> CenterPointList = new List<Vector2>();/// <summary>/// 宫格标签/// </summary>public int RectFlag;/// <summary>/// 记录正确的滑动顺序/// </summary>public List<int> KeyOrder = new List<int>();/// <summary>/// 记录玩家滑动顺序/// </summary>public List<int> PlayerKeyOrder = new List<int>();/// <summary>/// 判断开始鼠标位置是否可画/// </summary>public bool CheckStartRect=false;/// <summary>/// 判断结束鼠标位置是否可画/// </summary>public bool CheckEndRect = false;/// <summary>/// 行数/// </summary>public int Row = 4;/// <summary>/// 列数/// </summary>public int Column = 4;void Start(){e = Event.current;scanPos = LineRendererPrefab.transform.position;lineRenderer = (LineRenderer)LineRendererPrefab.GetComponent("LineRenderer");lineRenderer.material = new Material(Shader.Find("Particles/Additive"));lengthOfLineRenderer = 0;lineRenderer.SetColors(c1, c2);lineRenderer.SetWidth(0.7F, 0.7F);lineRenderer.SetVertexCount(0);color = new Color[8];color[0] = Color.yellow;color[1] = Color.blue;color[2] = Color.cyan;color[3] = Color.gray;color[4] = Color.green;color[5] = Color.grey;color[6] = Color.magenta;color[7] = Color.red;for (int RowCount = 0; RowCount < Row; RowCount++){for (int columnCount = 0; columnCount < Column; columnCount++){Rect IconRect = new Rect(columnCount * Screen.width / Column + Screen.width / Column / 2 - Point.width / 2, RowCount * Screen.height / Row + Screen.height / Row / 2 - Point.height / 2, Point.width, Point.height);AreaRect.Add(IconRect);Vector2 CenterP = IconRect.center;//得到每个的中心点 CenterPointList.Add(CenterP);}}}void OnGUI(){e = Event.current;for (int RowCount = 0; RowCount < Row; RowCount++){for (int columnCount = 0; columnCount < Column; columnCount++){Rect IconRect = new Rect(columnCount * Screen.width / Column + Screen.width / Column / 2 - Point.width / 2, RowCount * Screen.height / Row + Screen.height / Row / 2 - Point.height / 2, Point.width, Point.height);GUI.Label(IconRect, Point);}}}void Update(){if (e != null){if (e.type == EventType.MouseDown){for (int i = 0; i < AreaRect.Count; i++){if (AreaRect[i].Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z))){CheckStartRect = true;print("Contains");PlayerKeyOrder.Add(i);RectFlag = i;break;}else{CheckStartRect = false;}}if (CheckStartRect){print("MouseDown_____");//Vector3 curPosition = mousePToLineRendererP(); Vector3 curPosition = centerPToLineRendererP(RectFlag);GameObject newObj;newObj = (GameObject)Instantiate(LineRendererPrefab, LineRendererPrefab.transform.position, LineRendererPrefab.transform.rotation);lineRenderer = (LineRenderer)newObj.GetComponent("LineRenderer");int n = Random.Range(1, 8);c1 = color[n - 1];n = Random.Range(1, 8);c2 = color[n - 1];lineRenderer.SetColors(c1, c2);lineRenderer.SetVertexCount(1);lineRenderer.SetWidth(0.7F, 0.7F);lineRenderer.SetPosition(0, curPosition);lineRendArray.Add(lineRenderer);lengthOfLineRenderer++;}}if (e.type == EventType.MouseDrag&&CheckStartRect){print("MouseDrag_____");Vector3 curPosition = mousePToLineRendererP(); DrawRenderLine(lineRendArray[lengthOfLineRenderer - 1], curPosition);}if (e.type == EventType.MouseUp && CheckStartRect){for (int i = 0; i < AreaRect.Count; i++){if (AreaRect[i].Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z))){CheckEndRect = true;PlayerKeyOrder.Add(i);RectFlag = i;print("EndContains");break;}else{CheckEndRect = false;}}if (CheckEndRect){Vector3 curPosition = centerPToLineRendererP(RectFlag);DrawRenderLine(lineRendArray[lengthOfLineRenderer - 1], curPosition);}else{PlayerKeyOrder.RemoveAt(PlayerKeyOrder.Count - 1);Destroy(lineRendArray[lengthOfLineRenderer - 1].gameObject);//lengthOfLineRenderer--; }}} }void DrawRenderLine(LineRenderer line, Vector3 vect3){Vector3 newPos = vect3;line.SetVertexCount(2);line.SetPosition(1, newPos);print("new point: " + newPos);}//public Vector2 RectCenterPoint(Rect AreaRect) //计算一个Rect的中心点//{// Vector2 CenterPoint=Vector2.zero;// print("Rect:"+AreaRect);// CenterPoint.x=AreaRect.xMin+AreaRect.width/2;// CenterPoint.y=AreaRect.yMin+AreaRect.height/2;// print("CenterPoint:"+CenterPoint);// return CenterPoint;//}/// <summary>/// 鼠标所在位置转换为LineRenderer的位置/// </summary>/// <returns></returns>public Vector3 mousePToLineRendererP() {screenPoint = Camera.main.WorldToScreenPoint(scanPos);Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);print("curScreenPoint: " + curScreenPoint);print("curPosition: " + curPosition);return curPosition;}/// <summary>/// 鼠标所在区域的中心点转换为LineRenderer的位置/// </summary>/// <returns></returns>public Vector3 centerPToLineRendererP(int Flag){screenPoint = Camera.main.WorldToScreenPoint(scanPos);Vector3 curScreenPoint = new Vector3(CenterPointList[Flag].x,Screen.height-CenterPointList[Flag].y,screenPoint.z);Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);print("curScreenPoint: " + curScreenPoint);print("curPosition: " + curPosition);return curPosition;} }
把touch.CS绑定在Camera上,设置如下:
运行后可以任意点间连线,如图:
- World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。
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)。
- LineRender坐标:以屏幕中心为原点,向上向右增加。
世界坐标→屏幕坐标: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 ScreenToGUI : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}//图片 public Texture img; //储存鼠标的位置坐标 private Vector2 pos;void OnGUI(){//鼠标左击,获取当前鼠标的位置 if (Input.GetMouseButton(0)){pos = Input.mousePosition; //屏幕坐标 }//绘制图片,屏幕坐标和GUI界面坐标只在Y轴上方向相反,只要被Screen.height减就可以互相转换。 GUI.DrawTexture(new Rect(pos.x, Screen.height - pos.y, 100, 100), img);}}
案例2——角色头顶的名字(世界坐标转GUI界面坐标)
先世界坐标转屏幕坐标,再屏幕坐标转GUI界面坐标
代码如下:
using UnityEngine; using System.Collections;public class Blood : MonoBehaviour {public static float ScaleWidht = 0f;public static float ScaleHeight = 0f;private Rect _drawRect = new Rect();public float Width = 0f;public float Height = 10f;public const float DesignStageWidth = 800;public const float DesignStageHeight = 480;public Vector2 pos2;public float size_z;// Use this for initializationvoid Start () {ScaleWidht = Screen.width / DesignStageWidth;ScaleHeight = Screen.height / DesignStageHeight;Height = 2f;size_z = transform.gameObject.collider.bounds.size.z;}// Update is called once per framevoid Update () {//世界坐标转换到屏幕坐标 print(transform.forward);pos2 = Camera.main.WorldToScreenPoint(transform.position + transform.forward * (size_z / 2)); //计算角色头顶坐标pos2 = new Vector2(pos2.x, Screen.height - pos2.y - Height); //Vector3 worldPosition = new Vector3(transform.position.x, transform.position.y + Height, transform.position.z);//worldPosition = Camera.mainCamera.WorldToScreenPoint(worldPosition);//_drawRect = new Rect((worldPosition.x - 100 * ScaleWidht) / ScaleWidht, (Screen.height - worldPosition.y - 50 * ScaleHeight) / ScaleHeight, 200, 50); }void OnGUI(){//GUILayout.BeginArea(_drawRect);// GUILayout.Label("======哈哈======");//GUILayout.EndArea(); GUI.Label(new Rect(pos2.x, pos2.y, 100, 50), "=BETTER=");} }
案例3——类似屏幕解锁功能的实现(屏幕坐标转换为世界坐标)
首先是创建LineRenderer。GameObject -> Create Empty ->更名为“LineRendererObj”,
给LineRendererObj添加“Line Renderer”组件,Component ->Effects ->Line Renderer;
将它的Positions 的size 设置为0
接下来是代码touch.CS:
using UnityEngine; using System.Collections; using System.Collections.Generic;public class touch : MonoBehaviour {private Event e;public Texture2D Point;public Color c1 = Color.yellow;public Color c2 = Color.red;public int lengthOfLineRenderer;public GameObject LineRendererPrefab;private LineRenderer lineRenderer;/// <summary>/// 保存创建的Line Renderer/// </summary>private List<LineRenderer> lineRendArray =new List<LineRenderer>();private Vector3 screenPoint;private Vector3 scanPos;private Color[] color;/// <summary>/// 记录宫格所在GUI位置/// </summary>public List<Rect> AreaRect = new List<Rect>();/// <summary>/// 记录宫格中心点/// </summary>public List<Vector2> CenterPointList = new List<Vector2>();/// <summary>/// 宫格标签/// </summary>public int RectFlag;/// <summary>/// 记录正确的滑动顺序/// </summary>public List<int> KeyOrder = new List<int>();/// <summary>/// 记录玩家滑动顺序/// </summary>public List<int> PlayerKeyOrder = new List<int>();/// <summary>/// 判断开始鼠标位置是否可画/// </summary>public bool CheckStartRect=false;/// <summary>/// 判断结束鼠标位置是否可画/// </summary>public bool CheckEndRect = false;/// <summary>/// 行数/// </summary>public int Row = 4;/// <summary>/// 列数/// </summary>public int Column = 4;void Start(){e = Event.current;scanPos = LineRendererPrefab.transform.position;lineRenderer = (LineRenderer)LineRendererPrefab.GetComponent("LineRenderer");lineRenderer.material = new Material(Shader.Find("Particles/Additive"));lengthOfLineRenderer = 0;lineRenderer.SetColors(c1, c2);lineRenderer.SetWidth(0.7F, 0.7F);lineRenderer.SetVertexCount(0);color = new Color[8];color[0] = Color.yellow;color[1] = Color.blue;color[2] = Color.cyan;color[3] = Color.gray;color[4] = Color.green;color[5] = Color.grey;color[6] = Color.magenta;color[7] = Color.red;for (int RowCount = 0; RowCount < Row; RowCount++){for (int columnCount = 0; columnCount < Column; columnCount++){Rect IconRect = new Rect(columnCount * Screen.width / Column + Screen.width / Column / 2 - Point.width / 2, RowCount * Screen.height / Row + Screen.height / Row / 2 - Point.height / 2, Point.width, Point.height);AreaRect.Add(IconRect);Vector2 CenterP = IconRect.center;//得到每个的中心点 CenterPointList.Add(CenterP);}}}void OnGUI(){e = Event.current;for (int RowCount = 0; RowCount < Row; RowCount++){for (int columnCount = 0; columnCount < Column; columnCount++){Rect IconRect = new Rect(columnCount * Screen.width / Column + Screen.width / Column / 2 - Point.width / 2, RowCount * Screen.height / Row + Screen.height / Row / 2 - Point.height / 2, Point.width, Point.height);GUI.Label(IconRect, Point);}}}void Update(){if (e != null){if (e.type == EventType.MouseDown){for (int i = 0; i < AreaRect.Count; i++){if (AreaRect[i].Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z))){CheckStartRect = true;print("Contains");PlayerKeyOrder.Add(i);RectFlag = i;break;}else{CheckStartRect = false;}}if (CheckStartRect){print("MouseDown_____");//Vector3 curPosition = mousePToLineRendererP(); Vector3 curPosition = centerPToLineRendererP(RectFlag);GameObject newObj;newObj = (GameObject)Instantiate(LineRendererPrefab, LineRendererPrefab.transform.position, LineRendererPrefab.transform.rotation);lineRenderer = (LineRenderer)newObj.GetComponent("LineRenderer");int n = Random.Range(1, 8);c1 = color[n - 1];n = Random.Range(1, 8);c2 = color[n - 1];lineRenderer.SetColors(c1, c2);lineRenderer.SetVertexCount(1);lineRenderer.SetWidth(0.7F, 0.7F);lineRenderer.SetPosition(0, curPosition);lineRendArray.Add(lineRenderer);lengthOfLineRenderer++;}}if (e.type == EventType.MouseDrag&&CheckStartRect){print("MouseDrag_____");Vector3 curPosition = mousePToLineRendererP(); DrawRenderLine(lineRendArray[lengthOfLineRenderer - 1], curPosition);}if (e.type == EventType.MouseUp && CheckStartRect){for (int i = 0; i < AreaRect.Count; i++){if (AreaRect[i].Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z))){CheckEndRect = true;PlayerKeyOrder.Add(i);RectFlag = i;print("EndContains");break;}else{CheckEndRect = false;}}if (CheckEndRect){Vector3 curPosition = centerPToLineRendererP(RectFlag);DrawRenderLine(lineRendArray[lengthOfLineRenderer - 1], curPosition);}else{PlayerKeyOrder.RemoveAt(PlayerKeyOrder.Count - 1);Destroy(lineRendArray[lengthOfLineRenderer - 1].gameObject);//lengthOfLineRenderer--; }}} }void DrawRenderLine(LineRenderer line, Vector3 vect3){Vector3 newPos = vect3;line.SetVertexCount(2);line.SetPosition(1, newPos);print("new point: " + newPos);}//public Vector2 RectCenterPoint(Rect AreaRect) //计算一个Rect的中心点//{// Vector2 CenterPoint=Vector2.zero;// print("Rect:"+AreaRect);// CenterPoint.x=AreaRect.xMin+AreaRect.width/2;// CenterPoint.y=AreaRect.yMin+AreaRect.height/2;// print("CenterPoint:"+CenterPoint);// return CenterPoint;//}/// <summary>/// 鼠标所在位置转换为LineRenderer的位置/// </summary>/// <returns></returns>public Vector3 mousePToLineRendererP() {screenPoint = Camera.main.WorldToScreenPoint(scanPos);Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);print("curScreenPoint: " + curScreenPoint);print("curPosition: " + curPosition);return curPosition;}/// <summary>/// 鼠标所在区域的中心点转换为LineRenderer的位置/// </summary>/// <returns></returns>public Vector3 centerPToLineRendererP(int Flag){screenPoint = Camera.main.WorldToScreenPoint(scanPos);Vector3 curScreenPoint = new Vector3(CenterPointList[Flag].x,Screen.height-CenterPointList[Flag].y,screenPoint.z);Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);print("curScreenPoint: " + curScreenPoint);print("curPosition: " + curPosition);return curPosition;} }
把touch.CS绑定在Camera上,设置如下:
运行后可以任意点间连线,如图:
Unity3D的几种坐标系相关推荐
- Unity3D的四种坐标系
[Unity3D的四种坐标系] 1.World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的.transform.position可以获得该位置坐标. ...
- Untiy3D笔记之番外篇——Unity3D的四种坐标系
原文地址:http://www.cnblogs.com/tekkaman/p/3809409.html [Unity3D的四种坐标系] 1.World Space(世界坐标):我们在场景中添加物体(如 ...
- Unity的四种坐标系
[Unity3D的四种坐标系] 1.World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的.transform.position可以获得该位置坐标. ...
- 【ArcGIS Pro微课1000例】0014:两种坐标系全国1km分辨率DEM下载地址(WGS84+Albers投影)
本文提供两种坐标系全国1km分辨率DEM下载地址(WGS84+Albers投影). 文章目录 全国1km分辨率DEM数据预览 WGS84地理坐标系 Albers投影坐标系 全国1km分辨率DEM数据下 ...
- workbench设置单元坐标系_浅谈Ansys中的几种坐标系
这篇简短的文章是我多年前在仿真论坛任ansys版主时发表的,时隔多年,同事正好咨询关于ansys坐标系的知识,就将此贴翻出来解他困惑,自己也重温下当年的技术贴,发给大家,希望对学习ansys的初学者有 ...
- 库卡机器人坐标手势_库卡机器人为何要几种坐标系?
展开全部 坐标系是为确定机器人的位置和姿态而在机器人或空e68a84e8a2ad3231313335323631343130323136353331333433653937间上进行定义的位置指标系统. ...
- 大地测量常用的四种坐标系
文章目录 前言 一.北京54坐标系 二.西安80坐标系 三.CGCS2000坐标系 四.阜新92坐标系 前言 作为测绘人员,我们在大地测量中经常用到的四种坐标系分别为:北京54坐标系.西安80坐标系. ...
- WINDOWS 几种坐标系
2019独角兽企业重金招聘Python工程师标准>>> 在窗口中绘图 图形设备接口(GDI)与设备描述表(DC) 图形设备接口(GDI) 许多MS-DOS程序都直接往视频存储区或打印 ...
- unity 坐标系转换_Unity的几种坐标系及相互转换
介绍 1.WorldSpace(世界坐标系) 当我们向场景中添加物体时,他们都是以世界坐标系的方式的方式显示在场景中的 通过transform.position可以得到它在世界中的坐标位置,trans ...
最新文章
- xebium周末启动_我如何在周末建立和启动聊天机器人
- 导入导出 SAPSCRIPT 的程序
- golang go get 命令行安装库 报错 go: cannot use path@version syntax in GOPATH mode 解决方法
- 如何用python画圆形的代码-简单实现python画圆功能
- pyrosim有Linux版本吗,烟气流动分析软件Pyrosim版本 2020.4.092
- Eigen库基本操作
- 供应商主数据屏幕增强
- NETSH WINSOCK RESET这条命令的含义和作用?
- java barrier_Java并发类CyclicBarrier方法详解
- 异常检测时间序列_时间序列的无监督异常检测
- Android Studio 安装 PlantUML 插件
- Intel超线程技术 Hyper-Threading Technology (7) - 最早的一篇超线程论文介绍
- bug6-ResourceExhaustedError: OOM when allocating tensor with shape[512,15,15,128]
- mysql中regexp用法_MySQL中REGEXP正则表达式使用大全
- c语言中取反位运算的作用,C语言位运算符及作用与或异或取反左移和右移
- 网页输出pdf并转为word
- 数字后端设计相关文件说明
- 【lizhi125】分区助手:分区魔术师的终结者/无损分区魔术师!(免费中文完美支持Win7/32与64位系统)
- 解决word、typora等打不开超链接问题
- 《痞子衡嵌入式半月刊》 第 56 期
热门文章
- Java流程控制语句的基本概念
- python mysql s_Python-MySQL
- CSDN中使用编辑器空格
- android 安装卸载应用提醒_Android程序使用代码的安装和卸载!!!
- 怎么用计算机弹是你,抖音带你去旅行怎么用计算器弹奏_抖音带你去旅行计算器乐谱_管理资源吧...
- matlab ssb,MatlabSSB信号的仿真分析.doc
- l28n和开发版_Atmel之SAM4S Xplained开发板评测(二)
- cdr 表格自动填充文字_PS那些好用到哭的新手小技巧(1)——如何快速去除文字图片的水印或背景文字?...
- realvnc 6 教程 linux,CentOS 6下VNC的安装与配置
- 高中信息技术考试软件_郑州市高中信息技术学业水平考试23日起网上报名