unity坐标转换问题

unity最经常使用的几种坐标。屏幕坐标。世界坐标。ngui坐标,相对于父物体的坐标(localPoisition)。

可是有时候这几种坐标相互转换何其困难,让自己狠抓头。

不得不操作的方式是创建虚拟体,然后来回改变他的父节点(parent),

只是unity提供了两个方法挺好用的。攻克了全部坐标转换问题,

InverseTransformPoint: 绝对坐标转相对坐标,也就是世界坐标转你想要放到的父节点下的相对坐标。

TransformPoint: 相对坐标转绝对坐标,也就是你想要放到的父节点下的相对坐标转成世界坐标,

调用方法就是,比方你想把鼠标点击的位置转换成你某一个父节点下的ngui坐标。

操作例如以下

                Vector3 vec = new Vector3();
		Ray ray=UICamera.mainCamera.ScreenPointToRay(Input.mousePosition);// 向屏幕发射线
		RaycastHit hit;
		if(Physics.Raycast(ray,out hit))
		{
			vec = 你想转到的父节点物体.transform.InverseTransformPoint(hit.point);
		}

这样就得到了一个屏幕点击转向ngui的父节点的相对坐标。其它的物体也是用此类方法使用,

这样保证了操作坐标的流畅性,不用创建那么多的虚拟体,

当然相对坐标转绝对坐标也一样的使用方法。不用创建虚拟体。你想把某一个父节点下的相对于这个父节点的某一个位置转成世界坐标跟上边一样的使用方法。

你当前的父物体.transform.TransformPoint(相对于该父物体的位置);

这样就能够转成世界坐标,世界坐标通用场景全部物体,想做什么就能够做什么了

时间: 2024-12-28 20:17:17

unity坐标转换问题的相关文章

Unity3D图形基础笔记(1)

1.坐标系 (1).Unity 世界空间坐标系为左手系,Y正向向上的左手系.这一点在需要从3ds max里导入模型到Unity时需要注意,3ds max使用的是以Z正向朝上的右手系.根据坐标系手系和坐标基朝向的不同,可以很容易推导出所需要做的坐标变换. 3DS Max -> Unity 的坐标变换为:绕着x轴旋转90度,直接使用四元数变换如下: 1 public Vector3 MaxToUnity(Vector3 v) 2 { 3 return Quaternion.Euler(90.0f,0

将Unity中的世界坐标转换成NGUI中的坐标

将Unity中的世界坐标转换成NGUI中的坐标,比如可用于自制血条等.代码如下: 1 using UnityEngine; 2 using System.Collections; 3 public class Healthbar : MonoBehaviour { 4 public GameObject TargetObject; //目标物体.这里是指Cube 5 public Camera worldcamera; //世界相机. 6 public Camera guiCamera; //U

Unity Ugui射线坐标转换总结

世界空间中的点坐标转换到屏幕坐标: screenPos = RectTransformUtility.WorldToScreenPoint(cam, worldPos.transform.position); UGUI物体的坐标转换到屏幕坐标: screenPos = RectTransformUtility.WorldToScreenPoint(canvas.worldCamera, uguiObj.transform.position); 屏幕坐标转换到UGUI坐标: Vector3 wor

将NGUI的坐标转换Unity中的世界坐标

今天遇到个问题,要把NGUI的transform坐标转成世界坐标,难住我了可,查了好多资料,总算有点眉目,弄出来和大家分享,其实发现NGUI的坐标也是三维Vector3的,但是他和世界坐标的Vector3的值代表的不一样.不信大家可以打印出来,看一看.  public GameObject target;  public GameoObject objUi;    public void ScreenToWord()     {          //此原理就是先将UI坐标转成屏幕坐标,在把转成

Unity之坐标转换

1.世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标.其中camera为场景中的camera对象. 2.屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标.其中camera为场景中的camera对象. 3.视口坐标→屏幕坐标:camera.ViewportToScreenPoint();

【Unity Shaders】初探Surface Shader背后的机制

转载请注明出处:http://blog.csdn.net/candycat1992/article/details/39994049 写在前面 一直以来,Unity Surface Shader背后的机制一直是刚開始学习的人为之困惑的地方. Unity Surface Shader在Unity 3.0的时候被开放给公众使用.其宣传手段也是号称让所有人都能够轻松地写shader.但因为资料缺乏,非常多人知其然不知其所以然,无法理解Unity Surface Shader在背后为我们做了哪些事情.

unity坐标转变问题

unity最常用的几种坐标,屏幕坐标,世界坐标,ngui坐标,相对于父物体的坐标(localPoisition). 但是有时候这几种坐标相互转换何其困难,让自己狠抓头.不得不操作的方式是创建虚拟体,然后来回改变他的父节点(parent), 不过unity提供了两个方法挺好用的.解决了所有坐标转换问题, InverseTransformPoint: 绝对坐标转相对坐标,也就是世界坐标转你想要放到的父节点下的相对坐标, TransformPoint: 相对坐标转绝对坐标,也就是你想要放到的父节点下的

Unity 4.3 2D 教程:推开大门

这篇文章译自 Christopher LaPollo 先生的 Unity 4.3 2D 教程的第一部分 Unity 4.3 2D Tutorial: Getting Started 感谢这套优秀教程的作者@Chris!译者水平有限,翻译不准确的地方请参考原文,文中所有Unity的关键字都没有翻译. 译者@wangzexi,转载请保留出处和原文链接.   如果你尝试用更早版本的Unity来制作2D游戏,那当然没问题,但你也知道必须先解决一些问题. 可能你通过给quad应用纹理,使用脚本调整纹理参数

FingerGestures研究院之初探Unity手势操作

最近研究了一下Unity中的一个手势操作的插件FingerGestures.它能很方便监听到Unity中的各种手势事件:上下左右四方向的滑动事件.按下事件.抬起事件.移动事件.连击事件.长按事件等等.它同时支持触摸屏操作与鼠标操作,总起来说使用起来还是比较方便的,今天写下教程记录这个插件的详细使用步骤.首先下载这个插件,大家可以在圣典上找这个插件的下载地址,当然也可以在本文最后下载该插件.  我看了一下这个插件底层的实现步骤,他是通过C#代理的形式来实现手势操作的.如下图红圈内所示,这五个重要的