Unity3d Transform的一些操作

得到修改面板的3个值

1.Position,坐标,
get:
var pos =transform.position;
transform.position.x
transform.position.y
transform.position.z
修改:
transform.position = new Vector3(1f,1f,1f);

2.Rotation
get:
transform.localEulerAngles.x;
transform.localEulerAngles.y;
transform.localEulerAngles.z;
修改:
transform.localEulerAngles = new Vector3(90f,0,0);
rotation = new Rotation(x,y,z,w);
修改2:
如果物体面板Rotation (x=22.5,y=0,z=0)
用代码实现方法:transform.Rotate(22.5f,0,0);

3.Scale 缩放,没有本地和世界分别
get:
transform.localScale.x
transform.localScale.y
transform.localScale.z
修改:
transform.localScale = new Vector3(1f,1f,1f);

子物体管理

//得到所有子物体(包含自身和下面所有子层的物体的Trasform)
var allTrans = new List<Transform>(transform.GetComponentsInChildren<Transform>()) ;

allTrans.Remove(transform); //从所有物体中移除父物体自身

//删除所有子物体
//  Array.IndexOf(transArrs, transform)
foreach (var item in allTrans)
{
    item.parent = null;
    GameObject.DestroyImmediate(item.gameObject);//因为Destroy是由Unity管理,所以不是立即删除。 如果父物体清空子物体后要要创建新物体时,就要用DestroyImmediate
}
transform.DetachChildren();//解除父子关系

//方法2 ,删除所有子物体
while (transform.childCount > 0)
{
      transform.GetChild(0).gameObject.transform.parent = null;
    GameObject.DestroyImmediate(transform.GetChild(0).gameObject);
}
transform.DetachChildren();

 

坐标系

A本地坐标 + A父物体世界坐标 = A在上一级节点的相对坐标 
A本地坐标 + A父物体世界坐标 = 是以父物体为原点的坐标系中的坐标

本地坐标
    是相对于父亲节点的坐标系
    本地都是对于根物体
    通俗的讲,u3d可以把多个物体算成一个物体(父物体),而他的子物体就需要本地坐标系做了,就是参考父物体世界坐标+偏移
    
世界坐标
    场景所有物体的位置以世界坐标(0,0,0)为原地的坐标系

 变量含义

Unity的Transform组件中看到的位置、旋转、缩放,都是相对父节点的,它并不是相对世界的。

Transform.position 物体的世界坐标 ,基于世界原点(0,0,0,)的位置
Transform.localPosition 物体的局部坐标,相对于 “父物体” 的位置。计算方式:Parent.InverseTransformPoint(Transform.position);或者Parent.TransformPoint(Transform.position);
Transform.eulerAngles 欧拉角旋转,方向
Transform.localEulerAngles  局部欧拉角旋转,相对于父级的变换旋转角度。
Transform.lossyScale 是一个只读的属性,物体的的世界缩放系数。通过transform.localScale修改
Transform.localScale { get; set; } 局部缩放系数,相对于父节点的缩放大小系数
Transform.rotation 四元数旋转,和欧拉角一样的作用
Transform.LocalRotation 四元数旋转局部旋转, 相对于父物体旋转
Transform.parent { get; set; }//父节点(transform)
Transform.worldToLocalMatrix { get; }//世界坐标转本地坐标的矩阵信息
Transform.localToWorldMatrix { get; }//本地坐标转世界坐标的矩阵信息
Transform.root { get; }//根节点(transform)
Transform.childCount { get; }//子物体(节点)的数量(只计算第一级层次的子节点),不包括父物体本身;
Transform.lossyScale { get; }//获取gameovject相对于世界坐标的缩放大小
Transform.hasChanged { get; set; }//判断GameObject对象上次将此属性设为false以来,其transform组件的此属性是否被修改过,默认值为true。
Transform.right { get; set;}//世界坐标的红色轴(X轴)的正方向!
Transform.up { get; set; }//世界坐标的绿色轴(Y轴)的正方向!
Transform.forward { get; set; }//世界坐标的蓝色轴(Z轴)的正方向!
transform.SetParent(Transform parent, bool worldPositionStays),然后 第二个bool 设为 false

欧拉角
    欧拉角由三个数字组成,每个数字代表环绕一个坐标轴旋转的角度。
    它把一个转动分解成三个方向的转源动,可以用三个欧拉角表示一个转百动 R( θ度1, θ2, θ3 )。其中的θ1, θ2, θ3就是普通的角度,但是我们管知它们叫欧拉角。
    围绕X轴旋转,即相当于翻滚机身(Roll)。横滚角
    围绕Y轴旋转,即相当于机身俯仰(Pitch)。俯仰角
    围绕Z轴旋转,即决定飞机头指向的方向,又叫偏航(Yaw)。导航角
    欧拉角是一种旋转方式,例如要把物体旋转到某个方向,可以通过多种旋转方式达成:第一种方式我们可以称它为围绕Y轴的旋转:[Y],第二种是旋转:[Z, X’],第三种是旋转:[X, Z’]。
    欧拉角背后的基本概念。你可以使用不同的方式得到同一个旋转——通过不同的转轴或者不同的旋转顺序。
    Unity3d 通过[z,x,y]旋转,先绕z轴一个小角度,然后x轴小角度,然后y轴;按轴顺序重复绕,渐进达到最终姿态.
    欧拉角按照旋转次序的不同被规定为十二种顺序:X‐Z‐X, X‐Y‐X, Y‐X‐Y, Y‐Z‐Y, Z‐Y‐Z, Z‐X‐Z, X‐Z‐Y, X‐Y‐Z, Y‐X‐Z, Y‐Z‐X, Z‐Y‐X, Z‐X‐Y。
    欧拉表示有个致命的弱点,就是万向节死锁

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值