我是靠谱客的博主 单薄玫瑰,最近开发中收集的这篇文章主要介绍Unity3d常见坐标系和坐标变换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Unity3d中常见的坐标系有:

1.世界坐标系。引擎提供的空间坐标系,可通过transform.position获取坐标

2.视口坐标系。是相对于相机的坐标系,屏幕左下角为(0,0),右上角为(1,1),z轴的方向是从屏幕指向外面的,z的数值是在世界空间中z的相反数,如果Camera在世界空间中是(0,0,0),那么在屏幕上的所有点的视口坐标的z都是0,如果Camera在世界空间中是(0,0,-10),那么在屏幕上的所有点的视口坐标的z都是10

3.屏幕坐标系。是以显示设备的分辨率来定义的,左下角为(0,0),右上角为(Screen.widthScreen.height),z轴与视口坐标相同

4.NGUI坐标系。通常NGUI的根节点在世界空间中的位置都是(0,0,0),但是根节点会有缩放Scale.

 

坐标变换:

API提供的坐标变换方法

ScreenToViewportPoint  屏幕转视口

ScreenToWorldPoint      屏幕转世界

ViewportToScreenPoint  视口转屏幕

ViewportToWorldPoint    视口转世界

WorldToScreenPoint       世界转屏幕

WorldToViewportPoint     世界转视口

常用的坐标变换方式:


    Vector3 NGUI2World(Vector3 pos,float z)
    {
        pos.z = 0;
        pos = SceneObjMgr.Instance.UICamera.WorldToScreenPoint(pos);
        pos.z = z;
        return Camera.main.ScreenToWorldPoint(pos);
    }

    Vector3 World2World(Vector3 pos, float z)
    {
        pos = Camera.main.WorldToScreenPoint(worldPos);
        pos.z = z;
        return Camera.main.ScreenToWorldPoint(pos);
    }

    Vector3 Screen2NGUI(Vector3 pos)
    {
        return SceneObjMgr.Instance.UICamera.ScreenToWorldPoint(pos);
    }

  Vector3 NGUI2Screen(Vector3 pos)
    {
        pos.z = 100;
        pos = Camera.main.WorldToScreenPoint(pos);
        pos.z = 0;
        return pos;
    }

注意一个事,凡是与世界空间相关的坐标,z轴需要在视锥体之内,因为在视锥之外是看不见的,转换无意义

最后

以上就是单薄玫瑰为你收集整理的Unity3d常见坐标系和坐标变换的全部内容,希望文章能够帮你解决Unity3d常见坐标系和坐标变换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部