坐标系
世界坐标系
世界的右方为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轴收缩,大拇指方向就是法线
旋转正方向判定
拇指跟旋转的指向相同,四指收缩的方向为正方向