Unity3D坐标系

作者: _凉笙 | 来源:发表于2016-12-13 23:19 被阅读0次

    一 、世界坐标系--全局坐标系:

    用来描述游戏场景内所有物体位置和方向的基准,也称为世界坐标系。
    Unity场景中创建的物体都是以全局坐标系中的坐标原点(0,0,0)来确定各自的位置


    世界坐标

    二、局部坐标系(物体坐标系,模型坐标系)

    每个物体都有其独立的物体坐标系,并且随物体进行相同的移动或者旋转。
    局部坐标系:是相对于父物体来说也就是当两个游戏对象互为父子关系,那么子物体会以父物体的坐标点为自身的坐标原点。


    局部坐标系

    下面我们来看看我们的局部坐标和全局坐标的不同吧。首先我们将脚本挂载在子物体上,然后在脚本上写上我们的代码输出坐标。


    Paste_Image.png 我们再来看看打印结果吧
    打印值 我们我们怎么获取到子物体的局部坐标呢?
    获取局部坐标

    我们再看看其打印结果看是否正确


    打印结果

    三、相机坐标系:

    根据观察位置和方向建立坐标系。(UGUI会详细讲述)
    使用次此坐标可以方便判断物体是否在相机前方,以及物体间的先后遮挡顺序,它会优先渲染离他最近的物体。
    它会优先渲染离他最近的物体。


    相机坐标

    四、屏幕坐标系:Screen Space

    建立在屏幕上的二位坐标系,用来描述像素在屏幕上的位置。(像素在补充课件里面)以像素定义,以屏幕左下角为坐标原点(0,0),
    右上角为(Screen.width,Screen.height),Z的位置是以相机的世界坐标位置来衡量的。
    在我们手机、电脑都是有屏幕的,它的左下角就是屏幕坐标的原点。当然我们的屏幕坐标是二维的只有X,Y轴

    屏幕坐标 现在我们来写一个事件测试下,点击屏幕的某一个位置就会显示屏幕的坐标位置。首先我们创建一个脚本让其挂载在摄像机上,然后开始写代码。
    Paste_Image.png 保存后我们再来看看结果。
    打印结果 然而我们怎么世界坐标转换成屏幕坐标呢?
    世界坐标→屏幕坐标
    camera.WorldToScreenPoint(obj.transform.position)
    下面我们来看看如何使用吧,首先我们给摄像机挂载一个脚本,然后开始写我们的代码。
    Paste_Image.png 然后来看看打印结果吧
    打印结果
    其他坐标系之间的转换

    坐标系的转换:
    1、局部坐标系转换到全局坐标系:
    Transform.TransformPoint()
    首先我们创建一个脚本让其挂载在我们的子物体上。

    局部坐标 打印结果:
    打印结果
    全局坐标系转换到局部坐标系:
    Transform.InVerseTransformPoint()
    首先我们创建一个脚本让其挂载在我们的子物体上。
    Paste_Image.png
    打印结果:
    打印结果
    向量如何转为局部坐标系呢?
    Transform.TransformDirection Paste_Image.png

    向量如何转为全部坐标系呢?
    Transform. InVerseTransformDirection

    Paste_Image.png

    五、View port Space 视口坐标

    视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,
    Z的位置是以相机的世界单位来衡量的。
    屏幕坐标→视口坐标
    camera.ScreenToViewportPoint(Input.GetTouch(0).position)
    世界坐标→视口坐标
    camera.WorldToViewportPoint(obj.transform.position));

    六、GUI界面坐标系

    这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。
    print("世界坐标" + obj.transform.position);
    print("屏幕坐标" + Input.GetTouch(0).position);

    相关文章

      网友评论

        本文标题:Unity3D坐标系

        本文链接:https://www.haomeiwen.com/subject/apcbmttx.html