Unity 坐标 转换 详解 World世界坐标 Screen屏幕坐标 View视口坐标 GUI坐标 NGUI坐标 localPosition相对父级坐标
在制作游戏中我们经常会遇到这样一个需求:
在人物模型的上面显示 名字、称号 一类的文字或者图片 如下图
人物模型属于是Camera1
UI Title信息属于NGUI Camera2
如下图
这时候我们就要用到坐标转换了 确定UI Title 的世界坐标
代码如下:
Transform charater = null;//角色Transform
Transform TitleLabel = null;//Title Label Transform Camera camera1 = Camera.main;//照射模型Camera
Camera camera2 = UICamera.currentCamera;//NGUI Camera Vector3 pos = camera1.WorldToScreenPoint(charater.position);//Camera1的世界坐标转为屏幕坐标
pos.z = ;//不需要 制为0 Vector3 pos2 = camera2.ScreenToWorldPoint(pos);//屏幕坐标转为camera2的世界坐标 TitleLabel.position = pos2;//设置TitleLabel的世界坐标
想知道为什么 我们一起来详细的了解一下Unity 坐标的知识
查看Unity圣典 Transfrom 和 Camera 组件
Transfrom 组件有如下图2个变量
Camera 组件有如下图6个函数
看完上面翻译的信息 是不是对于 世界坐标 屏幕坐标 视口坐标 不是很理解 下面我们来详细介绍一下这些坐标
WorldSpace(世界坐标):
游戏场景原点世界坐标为(0,0,0)
获取和设置代码如下:
transform.position = Vector3.zero;//设置transform的世界坐标为原点(0,0,0) Vector3 vector3 = transform.position;//获得transform的世界坐标给vector3
ScreenSpace(屏幕坐标):
Screen Space是以像素来定义的 左下角为(0,0) 右上角为(Screen.width,Screen.height) Z的位置是以相机的世界单位来衡量的。
例如场景分辨率1024x768,如果屏幕被缩小至100x100,那么点击右上角是100x100,而不是分辨率的1024x768。
鼠标的坐标 单个手指触摸屏幕坐标 都为屏幕坐标
Debug.Log(Input.mousePosition);//鼠标的坐标 Debug.Log(Input.GetTouch().position);//单个手指触摸屏幕坐标
ViewPortSpace(视口坐标):
视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。
GUI坐标
这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。
NGUI坐标
其实没有什么NGUI坐标
要设置NGUI坐标 需要获得UICamera.currentCamera来转换坐标
了解了上面的知识 相信你利用 Camera 的那6个函数 可以随便的转换坐标了。
完结!
Unity 坐标 转换 详解 World世界坐标 Screen屏幕坐标 View视口坐标 GUI坐标 NGUI坐标 localPosition相对父级坐标的更多相关文章
- PHP中IP地址与整型数字互相转换详解
这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下 IP转换成 ...
- 详解iOS开发之自定义View
iOS开发之自定义View是本文要将介绍的内容,iOS SDK中的View是UIView,我们可以很方便的自定义一个View.创建一个 Window-based Application程序,在其中添加 ...
- CvMat、Mat、IplImage之间的转换详解及实例
见原博客:http://blog.sina.com.cn/s/blog_74a459380101obhm.html OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数 ...
- Unity - Profiler参数详解
CPU Usage ● GC Alloc - 记录了游戏运行时代码产生的堆内存分配.这会导致ManagedHeap增大,加速GC的到来.我们要尽可能避免不必要的堆内存分配,同时注意:1 ...
- java中Array/List/Map/Object与Json互相转换详解
http://blog.csdn.net/xiaomu709421487/article/details/51456705 JSON(JavaScript Object Notation): 是一种轻 ...
- Php中的强制转换详解
强制转换中分为两种,第一种就只临时转换,和永久转换.在临时转换中呢,首先可以通过第一中方式来显示,就是小括号的形式,临时转换成整型我们可以通过(int)都是这样的形式,或者是(integer)临时转换 ...
- Flex使用Blazeds与Java交互及自定义对象转换详解-DATAGRID读取ORACLE数据
http://www.cnblogs.com/RocD-DuPeng/articles/1751040.html 一.建立Flex与Java交互的工程. 本文中讲到的交互是利用Blazeds的,因为这 ...
- JavaScript 对象、DOM对象、jquery对象的区别、转换详解
一.JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 访问对象的属性: [javascrip ...
- Unity Built-in Shader详解三
上次讲的是Transparent Shader Family,他们是绘制半透明的对象使用的,但他们并不能满足我们全部的要求. Transparent Cutout Shader Family是对半透明 ...
随机推荐
- 【Android Developers Training】 70. 使用ViewPager实现屏幕滑动
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Ext常用开发基础知识
Ext常用开发基础知识 组件定义 //这种方法可以缓存所需要的组件 调用起来比较方便(方法一 ) Ext.define('MySecurity.view.home.HomePanel', { //添加 ...
- c# 测试通过
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data; using S ...
- maven编译常见错误解决方法整理
程序包com.sun.xml.internal.ws.spi不存在 当maven项目里面有用到JDK内部的一些类,接口(如:com.sun.xml.internal.ws.spi.ProviderIm ...
- Echarts展示百分比的问题
22.echarts 想要自定义tooltip 的百分比的时候,可以在formatter中console.log(params); 当鼠标移动到y轴的时候会触发输出;
- JSON.parse()与JSON.stringify()的区别
JSON.parse()[从一个字符串中解析出json对象] 例子: //定义一个字符串 var data='{"name":"goatling"}' //解析 ...
- React--JSX语法
JSX语法,它是js语言的语法拓展. 比如2+2 , 对象.属性 , 函数的调用都可以在jsx中书写. import React from "react"; export defa ...
- 浅谈Ajax 异步的几点细节
1.浏览器执行到Ajax代码的这行语句的时候,发出了一个HTTP请求,欲想请求服务器上的数据.服务器此时开始I/O,所谓的I/O就是磁盘的读写,需要花费一些时间,所以不会立即产生下行的HTTP报文: ...
- ps命令学习笔记
最近在看linux优化大师这本书,第2章祥细讲解了分析系统用的工具,这里把一些内容整理出来,以便加深印像. 当进行系统分析时,ps命令显示有关选择的活跃进程的信息.ps命令提供当前已存在的进程列表,和 ...
- Java基础语法<一> 数据类型&运算符
1 数据类型 1.1 整型 类型 存储需求 取值范围 int 4字节 -21 4748 3648 – 21 4748 3647 232 short 2字节 -32768-32767 216 lon ...