版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。该文章出自【狗刨学习网】Screen Space(屏幕坐标,鼠标坐标):以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得该位置坐标,手指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指触摸屏幕坐标。ViewPort
2、Space(视口坐标):视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。(用的不多,反正我暂时没有用到呵呵)绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。 LineRender坐标:以屏幕中心为原点,向上向右增加。世界坐标屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。屏幕坐标视
3、口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。视口坐标屏幕坐标:camera.ViewportToScreenPoint(); 视口坐标世界坐标:camera.ViewportToWorldPoint(); 案例1在鼠标点击的位置上绘制一张图片出来(关于绘制GUI界面坐标系与屏幕坐标系之间的关系)。1. using UnityEngine;2. using System.Collections;3.4. public class Screen
4、ToGUI : MonoBehaviour 5.6. / Use this for initialization7. void Start () 8. 9. 10. 11. / Update is called once per frame12. void Update () 13. 14. 15. 16. /图片17. public Texture img; 18. /储存鼠标的位置坐标 19. private Vector2 pos;20. void OnGUI()21. 22. /鼠标左击,获取当前鼠标的位置 23. if (Input.GetMouseButton(0)24. 25.
5、pos = Input.mousePosition; /屏幕坐标26. 27. /绘制图片,屏幕坐标和GUI界面坐标只在Y轴上方向相反,只要被Screen.height减就可以互相转换。 28. GUI.DrawTexture(new Rect(pos.x, Screen.height - pos.y, 100, 100), img);29. 30.31. 复制代码 案例2角色头顶的名字(世界坐标转GUI界面坐标)先世界坐标转屏幕坐标,再屏幕坐标转GUI界面坐标代码如下:1. using UnityEngine;2. using System.Collections;3.4. public c
6、lass Blood : MonoBehaviour 5. public static float ScaleWidht = 0f;6. public static float ScaleHeight = 0f;7. private Rect _drawRect = new Rect();8. public float Width = 0f;9. public float Height = 10f;10. public const float DesignStageWidth = 800;11. public const float DesignStageHeight = 480;12.13.
7、 public Vector2 pos2;14. public float size_z;15. / Use this for initialization16. void Start () 17. ScaleWidht = Screen.width / DesignStageWidth;18. ScaleHeight = Screen.height / DesignStageHeight;19. Height = 2f;20.21. size_z = transform.gameObject.collider.bounds.size.z;22. 23.24.25. / Update is c
8、alled once per frame26. void Update () 27. /世界坐标转换到屏幕坐标28. print(transform.forward);29. pos2 = Camera.main.WorldToScreenPoint(transform.position + transform.forward * (size_z / 2);30. /计算角色头顶坐标31. pos2 = new Vector2(pos2.x, Screen.height- pos2.y - Height);32.33.34.35. /Vector3 worldPosition = new Ve
9、ctor3(transform.position.x, transform.position.y + Height, transform.position.z);36. /worldPosition = Camera.mainCamera.WorldToScreenPoint(worldPosition);37. /_drawRect = new Rect(worldPosition.x - 100 * ScaleWidht) / ScaleWidht, (Screen.height - worldPosition.y - 50 * ScaleHeight) / ScaleHeight, 20
10、0, 50);38. 39.40. void OnGUI()41. 42. /GUILayout.BeginArea(_drawRect);43. / GUILayout.Label(=哈哈=);44. /GUILayout.EndArea();45.46. GUI.Label(new Rect(pos2.x, pos2.y, 100, 50), =BETTER=);47. 48. 复制代码 案例3类似屏幕解锁功能的实现(屏幕坐标转换为世界坐标) 首先是创建LineRenderer。GameObject - Create Empty -更名为“LineRendererObj”,给LineRen
11、dererObj添加“Line Renderer”组件,Component -Effects -Line Renderer;将它的Positions 的size 设置为0 接下来是代码touch.CS:1.2. using UnityEngine;3. using System.Collections;4. using System.Collections.Generic;5.6. public class touch : MonoBehaviour 7. private Event e;8.9. public Texture2D Point;10. public Color c1 = Col
12、or.yellow;11. public Color c2 = Color.red;12. public int lengthOfLineRenderer;13. public GameObject LineRendererPrefab;14.15. private LineRenderer lineRenderer;16. / 17. / 保存创建的Line Renderer18. / 19. private List lineRendArray =new List();20.21. private Vector3 screenPoint;22. private Vector3 scanPo
13、s;23.24. private Color color;25.26. / 27. / 记录宫格所在GUI位置28. / 29. public List AreaRect = new List();30. / 31. / 记录宫格中心点32. / 33. public List CenterPointList = new List();34. / 35. / 宫格标签36. / 37. public int RectFlag;38. / 39. / 记录正确的滑动顺序40. / 41. public List KeyOrder = new List();42. / 43. / 记录玩家滑动顺序
14、44. / 45. public List PlayerKeyOrder = new List();46.47. / 48. / 判断开始鼠标位置是否可画49. / 50. public bool CheckStartRect=false;51.52. / 53. / 判断结束鼠标位置是否可画54. / 55. public bool CheckEndRect = false;56.57. / 58. / 行数59. / 60. public int Row = 4;61. / 62. / 列数63. / 64. public int Column = 4;65.66. void Start(
15、)67. 68. e = Event.current;69.70. scanPos = LineRendererPrefab.transform.position;71. lineRenderer = (LineRenderer)LineRendererPrefab.GetComponent(LineRenderer);72. lineRenderer.material = new Material(Shader.Find(Particles/Additive);73. lengthOfLineRenderer = 0;74. lineRenderer.SetColors(c1, c2);75
16、. lineRenderer.SetWidth(0.7F, 0.7F);76. lineRenderer.SetVertexCount(0);77.78. color = new Color8;79. color0 = Color.yellow;80. color1 = Color.blue;81. color2 = Color.cyan;82. color3 = Color.gray;83. color4 = Color.green;84. color5 = Color.grey;85. color6 = Color.magenta;86. color7 = Color.red;87.88.
17、 for (int RowCount = 0; RowCount Row; RowCount+)89. 90. for (int columnCount = 0; columnCount Column; columnCount+)91. 92. Rect IconRect = new Rect(columnCount * Screen.width / Column + Screen.width / Column / 2 - Point.width / 2, RowCount * Screen.height / Row + Screen.height / Row / 2 - Point.heig
18、ht / 2, Point.width, Point.height);93. AreaRect.Add(IconRect);94.95. Vector2 CenterP = IconRect.center;/得到每个的中心点96. CenterPointList.Add(CenterP);97. 98. 99. 100.101. void OnGUI()102. 103. e = Event.current;104. for (int RowCount = 0; RowCount Row; RowCount+)105. 106. for (int columnCount = 0; column
19、Count Column; columnCount+)107. 108. 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);109. GUI.Label(IconRect, Point);110. 111. 112. 113.
20、114. void Update()115. 116. if (e != null)117. 118. if (e.type = EventType.MouseDown)119. 120. for (int i = 0; i AreaRect.Count; i+)121. 122. if (AreaRecti.Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z)123. 124. CheckStartRect = true;125. pr
21、int(Contains);126. PlayerKeyOrder.Add(i);127. RectFlag = i;128. break;129. 130. else131. 132. CheckStartRect = false;133. 134. 135.136. if (CheckStartRect)137. 138. print(MouseDown_);139.140. /Vector3 curPosition = mousePToLineRendererP();141. Vector3 curPosition = centerPToLineRendererP(RectFlag);1
22、42. GameObject newObj;143. newObj = (GameObject)Instantiate(LineRendererPrefab, LineRendererPrefab.transform.position, LineRendererPrefab.transform.rotation);144. lineRenderer = (LineRenderer)newObj.GetComponent(LineRenderer);145.146. int n = Random.Range(1, 8);147. c1 = colorn - 1;148. n = Random.R
23、ange(1, 8);149. c2 = colorn - 1;150. lineRenderer.SetColors(c1, c2);151.152. lineRenderer.SetVertexCount(1);153. lineRenderer.SetWidth(0.7F, 0.7F);154. lineRenderer.SetPosition(0, curPosition);155. lineRendArray.Add(lineRenderer);156. lengthOfLineRenderer+;157. 158. 159.160. if (e.type = EventType.M
24、ouseDrag&CheckStartRect)161. 162. print(MouseDrag_);163. Vector3 curPosition = mousePToLineRendererP();164. DrawRenderLine(lineRendArraylengthOfLineRenderer - 1, curPosition);165. 166.167. if (e.type = EventType.MouseUp & CheckStartRect)168. 169. for (int i = 0; i AreaRect.Count; i+)170. 171. if (Ar
25、eaRecti.Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z)172. 173. CheckEndRect = true;174. PlayerKeyOrder.Add(i);175. RectFlag = i;176. print(EndContains);177. break;178. 179. else180. 181. CheckEndRect = false;182. 183. 184.185. if (CheckEndR
26、ect)186. 187. Vector3 curPosition = centerPToLineRendererP(RectFlag);188. DrawRenderLine(lineRendArraylengthOfLineRenderer - 1, curPosition);189. 190. else191. 192. PlayerKeyOrder.RemoveAt(PlayerKeyOrder.Count - 1);193. Destroy(lineRendArraylengthOfLineRenderer - 1.gameObject);194. /lengthOfLineRend
27、erer-;195. 196.197. 198. 199. 200.201. void DrawRenderLine(LineRenderer line, Vector3 vect3)202. 203. Vector3 newPos = vect3;204. line.SetVertexCount(2);205.206. line.SetPosition(1, newPos);207. print(new point: + newPos);208. 209.210. /public Vector2 RectCenterPoint(Rect AreaRect) /计算一个Rect的中心点211.
28、 /212. / Vector2 CenterPoint=Vector2.zero;213. / print(Rect:+AreaRect);214. / CenterPoint.x=AreaRect.xMin+AreaRect.width/2;215. 216. / CenterPoint.y=AreaRect.yMin+AreaRect.height/2;217. / print(CenterPoint:+CenterPoint);218. / return CenterPoint;219. /220.221. / 222. / 鼠标所在位置转换为LineRenderer的位置223. / 22
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB11T 1205-2015 工业用能单位能源审计报告编制与审核技术规范
- 离心式冷水机组技术规格书
- 江西省九江市六校2024-2025学年九年级上学期期中联考化学试题(含答案)
- 第六章《世界的发展差异》 2024-2025学年湘教版七年级上册地理单元测试卷(含解析)
- 拨浪鼓玩具产品供应链分析
- 对流式烤箱产品供应链分析
- 压茶砖机市场需求与消费特点分析
- 双向触发极管产业深度调研及未来发展现状趋势
- 人教版英语八年级上册 期末常见题型能力提升练习
- 湖北省武汉市洪山区鲁巷实验小学2024~2025学年二年级上学期期中数学试题
- 2024人工智能AI问答题110道
- 岭南新天地案例分析
- GB/T 43934-2024煤矿土地复垦与生态修复技术规范
- GB/T 13077-2024铝合金无缝气瓶定期检验与评定
- 幼儿园预防近视教师培训
- 医院科室合作共建方案
- 3.1DNA是主要的遗传物质课件-高一下学期生物人教版必修二
- 2023年广东广州南沙区总工会招聘社会化工会工作者考试真题及答案
- 初中部体育运动损伤现状调查研究
- 中华全国总工会办公厅印发《加快工会数字化建设工作方案》
- 广东省揭阳市揭西县2023-2024学年高二上学期期末数学试题
评论
0/150
提交评论