unity3d开发坐标_unity 3d坐标和ui坐标 - CSDN
  • Unity3D - 3D坐标系(3D Coordinate System)

    千次阅读 2017-08-25 10:38:45
    3D坐标系是3D游戏开发的基础概念。一般3D软件都是采用笛卡尔坐标系来描述物体的坐标信息。笛卡尔坐标系分为左手坐标系和右手坐标系: 左手坐标系是Y轴指向上方,X轴指向右方,Z轴指向前方。 右手坐标系是Y轴指向...

    3D坐标系是3D游戏开发的基础概念。一般3D软件都是采用笛卡尔坐标系来描述物体的坐标信息。笛卡尔坐标系分为左手坐标系和右手坐标系:

    • 左手坐标系是Y轴指向上方,X轴指向右方,Z轴指向前方。
    • 右手坐标系是Y轴指向上方,X轴指向右方,Z轴指向后方。

    这里写图片描述

    在Unity中使用的是左手坐标系,其中X轴代表水平方向,Y轴代表垂直方向,而Z轴代表深度。

    Unity有如下几种坐标系统。

    1,全局坐标系(world coordinate system)

    全局坐标系是用于描述场景内所有物体位置和方向的基准,也称为世界坐标系(也就是上面提到的笛卡尔左手坐标系)。

    在Unity场景中创建的物体都是以全局坐标系中的坐标原点(0,0,0)来确定各自的位置。

    2,局部坐标系(local coordinate system)

    每个物体都有其独立的物体坐标系,并且随物体进行相同的移动或旋转,也称为模型坐标系或物体坐标系。

    通过点击工具栏中的GlobalLocal,可以清楚的看到物体的局部坐标系与全局坐标系的不同。

    如果一个物体有父物体,那么父子之间的坐标系是相互关联的,此时子物体会以父物体作为自身局部坐标系的坐标原点。

    3,相机坐标系

    以摄像机视角出发,观察物体的位置和方向建立的坐标系。使用此坐标系可以方便的判断物体是否在相机前方以及物体之间的先后遮挡顺序。

    4,屏幕坐标系

    建立在屏幕上的二维坐标系,用来描述像素在屏幕上的位置。

    说道3D坐标系就必须提到Transform,Transform表示一个物体的位置、旋转、缩放等信息。

    1,位置(position/localPosition)

    先阐述两个最基本的概念:

    • transform.position:表示该物体在全局坐标中的位置信息。
    • transform.localPosition:表示该物体相对于父物体的位置信息。

    最普通的方法Transform.Translate,可以将自身在某个方向上移动某段距离,方向(direction)和距离(distance)由第一个参数(translation)指定。于是我们可以看到如下的代码:

    public class ExampleClass : MonoBehaviour {
        void Update() {
            // 将自身(局部坐标系)在前方(Z轴)移动(1*一帧的持续时间)的距离
            transform.Translate(Vector3.forward * Time.deltaTime);
        }
    }

    Translate方法还有第二个参数Space可供选择,Space表示使用的坐标空间(全局、局部),于是就会有如下代码:

    public class ExampleClass : MonoBehaviour {
        void Update() {
            // 将自身(全局坐标系)在上方(Y轴)移动(1*一帧的持续时间)的距离
            transform.Translate(Vector3.up * Time.deltaTime, Space.World);
        }
    }

    该段代码与段代码最重要的不同在于,前者应用Translate到局部坐标系,而后者应用Translate到全局坐标系,源码可以清晰的表现出这段关系:

    /// <summary>
    ///   <para>Moves the transform in the direction and distance of translation.</para>
    /// </summary>
    /// <param name="translation"></param>
    /// <param name="relativeTo"></param>
    public void Translate(Vector3 translation, [DefaultValue("Space.Self")] Space relativeTo)
    {
      if (relativeTo == Space.World)
        this.position += translation;
      else
        this.position += this.TransformDirection(translation);
    }
    
    // 如果没有第二个参数或参数为Space.Self,那么先将`translation`由局部坐标系转为全局坐标系,再与自身`position`相加。
    // 如果第二个参数为Space.World,那么直接与自身`position`相加。

    在Unity中,Transform组件的Transform.TransformPoint方法可以将坐标点从局部坐标系转换到全局坐标系,Transform.InverseTransformPoint可以将坐标点从全局坐标系转换到局部坐标系。而Transform.TransformDirectionTransform.InverseTransformDirection则用于对向量在局部坐标系和全局坐标系之间进行转换。

    根据上述,下面两段代码效果是相同的:

    // 先将方向从全局坐标系转换到局部坐标系,再通过Translate内部调用TransformDirection方法将方向从局部坐标系转换为全局坐标系,最后加到自身的position上。
    Vector3 up = transform.InverseTransformDirection(Vector3.up);
    transform.Translate(up * Time.deltaTime, Space.Self);
    
    // 直接将translation加到自身的position上。
    transform.Translate(Vector3.up * Time.deltaTime, Space.World);

    Transform源码在这里

    2,旋转(rotate/localRotate)

    由于和位置很类似就不赘述了。

    展开全文
  • 世界经纬度转化为Unity中的世界/模型上的坐标,需要设置的有左上,右下的基准点配准,和模型中心,或场景中心点。Test为测试脚本,本版本为double 高精度类型经纬度转化。
  • unity3d坐标轴插件

    2020-07-29 14:20:20
    unity3d坐标轴插件,鼠标选择物体后,物体会出现x,y,z坐标轴,可通过鼠标移动坐标轴实现物体位置的改变
  • unity 屏幕坐标&世界坐标相互转换

    万次阅读 2018-02-11 21:04:53
    世界坐标转屏幕坐标:Vector3 screenPos = Camera.main.WorldToScreenPoint(pos); 屏幕坐标转世界坐标:Vector3 worldPos = Camera.main.ScreenToWorldPoint(pos);

    世界坐标转屏幕坐标:

    Vector3 screenPos = Camera.main.WorldToScreenPoint(pos); 

    屏幕坐标转世界坐标:

    Vector3 worldPos = Camera.main.ScreenToWorldPoint(pos); 

    展开全文
  • 比如血条等的位置,实时跟随主角。 using UnityEngine; public class Game3DPosToUIPosMyTest : MonoBehaviour { public Transform targetTran;... public RectTransform hpTran;... public ...

    比如血条等的位置,实时跟随主角。

    using UnityEngine;
    
    public class Game3DPosToUIPosMyTest : MonoBehaviour
    {
        public Transform targetTran;
        public RectTransform hpTran;
        public Camera uiCamera;
        public RectTransform canvasTran;
        private Vector2 offsetY = new Vector2(0, 100);
        private void Update()
        {
            Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(Camera.main, targetTran.position);
            Vector2 localPoint;
            if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasTran, screenPoint, uiCamera, out localPoint))
            {
                hpTran.anchoredPosition = localPoint + offsetY;
            }
        }
    }
    

    需要一直结算会带来一定开销。

    可以使用Text Mesh组件直接挂在角色上。这样可以自动跟随主角。

    还可以根据摄像机的远近调整字号大小。

     

    展开全文
  • 在用transfrom .up等函数是,如果直接挂在物体上用this则会调用自身坐标,而用 public gameObject 声明变量挂物体的方式用的则是世界坐标是为什么
  • Input.mousePosition就是鼠标所在的位置的坐标函数Camera.main.ScreenToWorldPoint就是屏幕坐标转化三维空间的函数Camera.main.ScreenToWorldPoint把脚本挂载在主摄像机上 运行 就得到屏幕坐标映射在三维世界中的...

    这里写图片描述

    Input.mousePosition就是鼠标所在的位置的坐标

    函数Camera.main.ScreenToWorldPoint就是屏幕坐标转化三维空间的函数

    Camera.main.ScreenToWorldPoint
    

    这里写图片描述

    把脚本挂载在主摄像机上
    运行
    这里写图片描述

    就得到屏幕坐标映射在三维世界中的坐标了
    不过有一点是,转化之后z轴是-10
    这个时候只要z轴+10就是屏幕映射到三维世界的正确坐标了

    Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition) + new Vector3(0, 0, 10);
    
    展开全文
  • unity 相对坐标与绝对坐标的转换

    热门讨论 2020-07-29 14:21:47
    计算parent与children的相对坐标与绝对坐标的换算,另有一些旋转的补充
  • https://blog.csdn.net/alwaysyxl/article/details/86624352
  • 3dsMax和Unity3D坐标系同步

    万次阅读 2014-01-03 19:42:05
    3ds Max直接导出的FBX导入到Unity3D里,会发现x轴旋转度为-90, 这是因为3ds Max采用的是右手坐标系统,Unity则是左手坐标系统。接下来将演示告诉你如果修正这一问题。
  • 为什么我unity右上角的坐标没了

    千次阅读 2019-06-22 16:34:27
    1.unity 右上角的坐标不见了 2.发现是进入了2D页面,点击选择进入3D界面。
  • Unity3d 中如何获取任意UI组件Rect的左下角与右上角在屏幕的坐标
  • unity3D鼠标点击获取地面坐标

    千次阅读 2015-11-19 10:51:28
    写在前面:本人初学unity3D,仅仅是菜鸟的一点小心得,想记录下来,欢迎大神来指导,也欢迎其他初学者同学来交流,互相勉励,共同进步 unity中有关于鼠标位置的函数,Input.mousePosition。但不得不说,这个函数不...
  • Unity3D教程:将3D坐标转成2D坐标的方法。3D坐标Unity中称作World Space,2D坐标称作Screen Space, 是以pixel为基准,以iPad 1024 x 768(4:3)的解析度为例子: 左上角是 (0,0) 右下角是(1024,768) Unity...
  • untiy3d修改物体的中心点坐标

    千次阅读 2014-09-04 11:41:05
    场景模型中有很多物体组成,需要
  • unity3d的世界坐标转化成屏幕坐标

    万次阅读 2012-04-16 10:06:31
    使用函数:Camera.WorldToScreenPoint 原型:function ...返回值:Vector3 中 x,y是屏幕中的位置,z是坐标到摄像机的距离 屏幕左下方是(0,0);右上方是(pixelWidth,pixelHeight) 例程: var target : Transfor
  • unity2D坐标系的坑

    千次阅读 2019-07-05 10:18:37
    一,开始就入坑 刚开始搞unity2d坐标系时想着:可能以后会同时兼容unity3d,,这样一想就出大问题了,,一开始根本不知道是什么问题,就是把坐标转成屏幕坐标又转回去,一赋值:go不见了..... 后来一点点地排查终于找到:Z轴...
  • unity的transform是相对于父物体的局部坐标 一句没用的废话,但是我之前竟然真不知道。
  • GameObject.Transform.eulerAngles.y
  • Unity屏幕坐标转UI坐标

    2019-06-21 13:29:46
    var t = Vector2.zero; RectTransformUtility.ScreenPointToLocalPointInRectangle(mCanvas.transform as RectTransform,Input.mousePosition, mCanvas.worldCamera,out t); 转载于:...
1 2 3 4 5 ... 20
收藏数 27,518
精华内容 11,007
关键字:

unity3d开发坐标