第23天坐标系和移动

坐标系

世界坐标系

世界的右方为X的正方向,世界的上方为Y的正方向,世界的前方为Z的正方向,绝对坐标系,永远不变(原点不变,轴向不变)

原点在世界的中心点

物体坐标系

可以改变,(原点可变,轴向可变)

原点是模型本身的轴心点,当模型移动时,物体坐标系的原点就发生改变

x轴正方向是模型的右方,y轴正方向是模型的上方,z轴正方向是模型的前方
当模型在世界中发生旋转时,轴向就发生改变

惯性坐标系

可以改变,(原点可变,轴向不可变)

原点是模型本身的轴心点

x,y,z三个轴向与世界坐标系轴向平行

Global和Local

Global:此时物体显示的坐标系是惯性坐标系

Local:此时物体显示的坐标系是物体坐标系

Center和Pivot

Center:当前选中游戏物体及其子物体组成的视觉中心点

Pivot:当前选中游戏物体的轴心点,代码实现的自转是指绕着Pivot

坐标

世界坐标

以世界坐标系为参考的坐标和旋转

相对坐标

以某一个物体坐标系为参考的坐标

子物体界面显示的坐标为相对于父物体的坐标

transform.position  物体的世界坐标

transform.localPosition 物体相对于父物体的物体坐标系的坐标

坐标旋转缩放

 获取子物体

transfor.GetChild(索引):索引就是子物体在父物体中的顺序

transform.childCount :获取到该物体下面的子物体个数,只提供一层

transform.forward与Vector3.forward

Vector3.forward

只表示(0,0,1)这个值

含义如下图,为用在哪就是什么含义

transform.forward

只表示已世界坐标系为参考,物体的正前方的值,一定表示的是方向

只在以世界坐标系为参考才有意义

移动方法

transform.Translate

transform.Translate(方向 * 速度, 方向的参考坐标系)

transform.Translate(Vector3.forward * 速度, Space.World)

transform.Translate(Vector3.forward * 速度, Space.Self)

transform.Translate(transform.forward * 速度, Space.World)

transform.Translate(transform.forward * 速度, Space.Self):移动方向不确定,无意义的

第一个参数:物体移动的量

第二个参数:移动量的参考坐标系

只有一个参数的方法,默认是自身坐标系

旋转方法

transform.Rotate

第一个参数:物体旋转的量

第二个参数:移动量的参考坐标系

绕着某一个点旋转(围绕)

transform.RotateAround

绕着某个点的某个轴进行旋转

第一个参数:点 (坐标)

第二个参数:轴

第三个参数:旋转量

父子关系

设置父物体:transform.SetParent

设置子物体在当前父物体的位置:transform.SetSiblingIndex

当前物体的父物体:transform.parent  

transform.LookAt(Transform target)

使物体的Z轴朝向目标的中心点

坐标转换

InverseTransformPoint

计算一个世界坐标位置在自己的物体坐标系中的坐标表示

TransformPoint

计算一个相对自身物体的坐标位置在世界坐标系中的坐标表示

Vector3 pos= transform.InverseTransformPoint(cube.position);//得到的就是相对于目标点的坐标
Debug.Log(pos);

Vector3 pos= transform.TransformPoint(cube.localPosition);
Debug.Log(pos);

模型的坐标系不符合预期值

解决方法:外面套一个空物体,方向设置正确

法线的寻找

如果是y乘以x 则手指从y向x轴收缩,大拇指方向就是法线

旋转正方向判定

拇指跟旋转的指向相同,四指收缩的方向为正方向

原文地址:https://www.cnblogs.com/yifengs/p/14146131.html