# Transform组件

Transform组件用于控制实体的方位(位置、旋转、缩放),同时用于建立实体的父子层级关系。Transform组件不需要手动添加,创建实体时引擎会自动添加一个Transform组件。可以通过实体的transform属性访问Transform组件。

注意

Transform组件和Camera组件无法同时添加到同一个实体。

# 属性

🌏 sceneNode 关联的场景结点,只读。

// 获取关联的场景结点
const sceneNode = entity.transform.sceneNode;
1
2

🌏 bounds 外包范围,只读。

// 获取外包范围
const bounds = entity.transform.bounds;
1
2

🌏 parent 父Transform

// 获取父Transform
const parent = entity.transform.parent;

// 设置父Transform
entity0.transform.parent = entity1.transform;
1
2
3
4
5

🌏 children 子Transform,只读。

// 获取所有子Transform
const children = entity.transform.children;
1
2

🌏 visible 可见性控制

// 获取可见性
const visible = entity.transform.visible;

// 设置可见性
entity.transform.visible = false;
1
2
3
4
5

🌏 position 位置(Local)

// 获取位置
const position = entity.transform.position;

// 设置位置
entity.transform.position = [ 0.0, 10.0, 0.0 ];
1
2
3
4
5

🌏 scale 缩放量(Local)

// 获取缩放量
const scale = entity.transform.scale;

// 设置缩放量
entity.transform.scale = [ 2.0, 2.0, 2.0 ];
1
2
3
4
5

🌏 rotation 旋转量(Local)

// 获取旋转量
const rotation = entity.transform.rotation;

// 设置旋转量
entity.transform.rotation = [ 0.0, Math.PI, 0.0 ];
1
2
3
4
5

🌏 quaternion 旋转四元数(Local)

// 获取旋转四元数
const quaternion = entity.transform.quaternion;

// 设置旋转四元数
entity.transform.quaternion = [ 0.0, 0.0, 0.0, 1.0 ];
1
2
3
4
5

🌏 worldPosition 获取世界位置,只读。

// 获取世界位置
const worldPosition = entity.transform.worldPosition;
1
2

🌏 worldScale 获取世界缩放量,只读。

// 获取世界缩放量
const worldScale = entity.transform.worldScale;
1
2

🌏 worldQuaternion 获取世界旋转四元数,只读。

// 获取世界旋转四元数
const worldQuaternion = entity.transform.worldQuaternion;
1
2

🌏 worldDirection 获取世界朝向,只读。

// 获取世界朝向
const worldDirection = entity.transform.worldDirection;
1
2

# 接口

🌏 addChild 添加一个子Transform

// 添加一个子Transform
entity0.transform.addChild( entity1.transform );
1
2

🌏 removeChild 移除一个子Transform

// 移除一个子Transform
entity0.transform.removeChild( entity1.transform );
1
2

🌏 removeAllChildren 移除所有子Transform

// 移除所有子Transform
entity.transform.removeAllChildren();
1
2

🌏 traverse 遍历Transform自身及后代并执行回调。

// 遍历回调
entity.transform.traverse( ( t ) => {

    // TODO:回调

} );
1
2
3
4
5
6

🌏 translateX 沿本地X轴平移

// 沿本地X轴平移
entity.transform.translateX( 100.0 );
1
2

🌏 translateY 沿本地Y轴平移

// 沿本地Y轴平移
entity.transform.translateY( 100.0 );
1
2

🌏 translateZ 沿本地Z轴平移

// 沿本地Z轴平移
entity.transform.translateZ( 100.0 );
1
2

🌏 translateOnAxis 沿本地坐标轴平移

// 沿本地坐标轴平移
entity.transform.translateOnAxis( [ 0.5773502691896258, 0.5773502691896258, 0.5773502691896258 ], 100.0 );
1
2

主要

平移坐标轴需要单位化!!!

🌏 rotateX 绕本地X轴旋转(单位:弧度)。

// 绕本地X轴旋转
entity.transform.rotateX( Math.PI * 0.3 );
1
2

🌏 rotateY 绕本地Y轴旋转(单位:弧度)。

// 绕本地Y轴旋转
entity.transform.rotateY( Math.PI * 0.3 );
1
2

🌏 rotateZ 绕本地Z轴旋转(单位:弧度)。

// 绕本地Z轴旋转
entity.transform.rotateZ( Math.PI * 0.3 );
1
2

🌏 rotateOnWorldAxis 绕世界坐标轴旋转(单位:弧度)。

// 绕世界坐标轴旋转
entity.transform.rotateOnWorldAxis( [ 0.5773502691896258, 0.5773502691896258, 0.5773502691896258 ], Math.PI * 0.3 );
1
2

主要

旋转坐标轴需要单位化!!!

🌏 localToWorld 本地坐标转世界坐标。

// 本地坐标转世界坐标
const worldPosition = entity.transform.localToWorld( [ 10.0, 0.0, 0.0 ] );
1
2

🌏 worldToLocal 世界坐标转本地坐标。

// 世界坐标转本地坐标
const localPosition = entity.transform.worldToLocal( [ 10.0, 0.0, 0.0 ] );
1
2
Last Updated: 8/19/2022, 9:33:50 AM