unity为啥坐标转换都要用camera.main?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity为啥坐标转换都要用camera.main?相关的知识,希望对你有一定的参考价值。

unity中有多种坐标系,经常用到的是世界坐标系、屏幕坐标系和视窗(camera)坐标系三种。
其中世界坐标系和屏幕坐标系的相互转换常用于鼠标点击定位,拖拽等操作,也用于射线Ray的使用,常用的方法是:
pos = Camera.main.ScreenPointToRay(position); //屏幕转射线
pos = Camera.main.ScreenToWorldPoint(position);//屏幕转世界坐标
pos = Camera.main.WorldToScreenPoint(position);//世界转屏幕坐标

然后接下来说到游戏中常用的不同摄像机之间的视窗坐标的相互转化(例如UI摄像机和世界3D摄像机),多用于血条、按钮、弹窗等进行跟随和定位出现位置的功能。
参考技术A 不一定是main,也许是次camera,比如camera. allcamera[3]. xxxtoxxxpoint () ;这样,就是次camera的坐标转换了。。我发现度娘了一下确实没有相关信息,就帮你回答一下,忘采纳,如果有相似问题的人可以获得解决,在实际项目中,仅有一个maincamera是不现实的,一般都有多个camera作为视角调整 参考技术B Camera.main.transform.rotation = xxxx

为啥我在unity的层级里不能拖放东西

参考技术A 可以用Unity射线判断,也可以用其他插件仿照例子去做,例如:fingergesture 、easytouch 插件。<pre t="code" l="csharp">// 目前鼠标点击和手指拖拽的点击是通用的,代码在这里,你可以试试。

IEnumerator OnMouseDown()


Vector3 ScreenSpace = Camera.main.WorldToScreenPoint(transform.position);

Vector3 offset = transform.position-Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,ScreenSpace.z));

Debug.Log(;down;);

//当鼠标左键按下时
while(Input.GetMouseButton(0))

//得到现在鼠标的2维坐标系位置
Vector3 curScreenSpace = new Vector3(Input.mousePosition.x,Input.mousePosition.y,ScreenSpace.z);
//将当前鼠标的2维位置转化成三维的位置,再加上鼠标的移动量
Vector3 CurPosition = Camera.main.ScreenToWorldPoint(curScreenSpace)+offset;
//CurPosition就是物体应该的移动向量赋给transform的position属性
transform.position = CurPosition;
//这个很主要
yield return new WaitForFixedUpdate();


本回答被提问者采纳

以上是关于unity为啥坐标转换都要用camera.main?的主要内容,如果未能解决你的问题,请参考以下文章

Unity通过世界坐标系转换到界面坐标位置

为啥我在unity的层级里不能拖放东西

Camera.main.WorldToScreenPoint注意事项

将世界坐标转化到屏幕坐标

unity中UI坐标转3d世界坐标

unity为啥射线检测不到ui