二、坐标:2、本地坐标和世界坐标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二、坐标:2、本地坐标和世界坐标相关的知识,希望对你有一定的参考价值。
参考技术A transform.TransformPoint()这个方法的返回值就是Vector3类型的世界坐标,transform就是相对的物体,括号里的就是相对这个transform的本地坐标。
场景中A的父物体和B的父物体并不是同一个物体,但是他们有可能需要进行坐标上的交互,那么此时需要用到
RectTransformUtility.ScreenPointToLocalPointInRectangle() 这个方法。
用法:
Vector2 ui2ScreenPos = Camera.main.WorldToScreenPoint(ui2.position);
Vector2 localPos;
bool isSucess = RectTransformUtility.ScreenPointToLocalPointInRectangle(uiParent1, ui2ScreenPos, Camera.main, out localPos);
得到的localPos就是ui2.position相对于uiParent1的屏幕坐标,这样uiParent下的物体就可以用这个坐标进行交互。
这个方法体一共有四个参数,下面分别讲一下:
参数一:需要进行位置改变的ui物体的父物体的RectTransform组件
参数二:参照物体的屏幕坐标
参数三:相机,一般为主相机,或者特殊需求换相机也可
参数四:接收返回值得Vector2类型,这个值就是需要进行位置改变的ui物体的相对坐标
返回值:bool类型,为true时证明转换成功
需要注意的是:这个相机只是针对worldspace和camera模式,如果用的是overlay模式,第三个参数直接给null即可。
这个方法典型应用,是用在摇杆制作上。但是这里需要注意到的是,这里得到的是UI体系的坐标,也就是屏幕坐标。屏幕坐标以像素来定义的,屏幕的左下角为(0,0),右 上角为(Screen.width, Screen.height),z轴的坐标是相机的世界坐标中z轴坐标的负值。相机如果没给对,则有可能达不到预期的效果。
unity3d世界坐标系和本地坐标系
transform.Translate(Vector3.forware);//向着自己坐标前方 transform.Translate(Vector3.forware,Space.World);//向着世界坐标前方
举例子加深印象:有两个Cube
Cube1处于原点,Cube2在Cube1右边且角度有所不同。
此时分别调用如下代码:
Debug.Log(name+"--"+Vector3.forward+":"+transform.forward);
输出结果是:
Cube2--(0.0, 0.0, 1.0):(0.5, -0.7, 0.5)
UnityEngine.Debug:Log(Object)
Zuobiaoxi:Update() (at Assets/scripts/Zuobiaoxi.cs:16)
Cube1--(0.0, 0.0, 1.0):(0.0, 0.0, 1.0)
UnityEngine.Debug:Log(Object)
Zuobiaoxi:Update() (at Assets/scripts/Zuobiaoxi.cs:16)
可以看出,Vector3.forward是本地坐标系的变化,而transform.forward获取的是世界坐标系的变化。
所以教程内是这样说的:
if (Input.GetKeyDown (KeyCode.W)) { //按照本地坐标系进行移动 transform.Translate(Vector3.forward); //按照世界坐标系进行移动 transform.position+=transform.forward; }
常用的是:
transform.Translate(Vector3.forward);
以上是关于二、坐标:2、本地坐标和世界坐标的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D3D 物体概念 ② ( 空物体概念 | 创建空物体 | 利用空物体管理多个子节点 | 世界坐标系和本地坐标系操作模式 | 切换坐标系操作模式 | 轴心和几何中心模式 )
ocos2d-x 3.0坐标系详解--透彻篇 ---- convertToWorldSpace:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。