Label()

new Label()

Label - 文字标注用于在 3D 场景中创建和管理文字标注,支持自定义字体、颜色、阴影和对齐方式。
Example
const label = new THING.Label({
   fontText: 'Hello ThingJS',
   fontSize: 16,
   fontColor: '#ffffff',
   position: [0, 2, 0],
 });

Extends

Members

active :boolean

激活状态主要影响可见性,类似与控制节点的可见性,与visible的区别是:
父物体active为false,孩子的active为true,孩子不可见
父物体visible为false,孩子的visible为true,孩子可见
Inherited From:
Example
let box = new THING.Box();
	let box2 = new THING.Box({parent: box});
	box.active = false;
	// @expect(box2.active == true);
	// @expect(box.active == false);

alwaysOnTop :boolean

设置/获取 是否开启渲染置顶
Inherited From:
Example
// Keep object render as the top of render layer
object.alwaysOnTop = true;

angles :Array.<number>

设置/获取 世界坐标系下的旋转角度欧拉角('XYZ'),单位为 degree(度)。
Inherited From:

app :THING.App

获取app对象
Inherited From:
Example
let object = new THING.BaseObject();
let app = object.app;
let ret = app == THING.App.current;
// @expect(ret == true)

body :THING.BodyObject

获取body对象 body对象可以理解这个对象自身,不包含它的孩子.
Inherited From:

boundingBox :THING.Box3

获取世界坐标系下的包围盒数据 等同于getAABB(true,true,false)
Inherited From:
Example
let boundingBox = object.boundingBox;
	if (boundingBox.halfSize[1] > 100) {
		console.log('The object is so tall');
	}

brothers :THING.Selector

获取兄弟节点(同级节点)
Inherited From:
Example
let box1 = new THING.Box();
	let box2 = new THING.Box({parent: box1});
	let box3 = new THING.Box({parent: box1});
	let brothers = box3.brothers;
 // @expect(brothers.length == 1);

children :THING.Selector

获取孩子
Inherited From:
Example
let object = new THING.BaseObject();
let child= new THING.BaseObject({parent: object});
let children = object.children;
let ret = children.length == 1;
// @expect(ret == true)

collider :ColliderComponent

物体的碰撞检测组件
Inherited From:

readonly components :Map.<String, THING.BaseComponent>

获取所有组件
Inherited From:
Example
let obj = new THING.BaseObject();;
obj.addComponent(new THING.BaseComponent(), 'component1');
obj.addComponent(new THING.BaseComponent(), 'component2');
// @expect(obj.components.size == 2)

destroyable :boolean

设置/获取 对象是否可以被销毁
Inherited From:
Example
let object = new THING.BaseObject();
object.destroyable = true;
// @expect(object.destroyable == true)

dtType :string

设置/获取 孪生体类型
Inherited From:
Example
let object = new THING.BaseObject();
object.dtType = 'Equipment';
// @expect(object.dtType == 'Equipment')

events :Array.<ObjectListenerInfo>

获取当前对象注册的所有事件监听器的详细列表。该属性返回一个 ObjectListenerInfo 类型的数组,每一项包含一个事件监听器的全部信息。ObjectListenerInfo 格式参考(常用字段如下):- name: 事件名称(一般为小写,如 "click", "update", "mouseenter" 等)- callback: 回调函数,事件触发时调用- context: 回调函数的上下文对象- once: 是否为一次性监听(只会触发一次,之后移除)- filter: 事件过滤函数(可选)- id: 事件监听唯一标识(可选)- other: 可能包含的其他参数或元数据
Inherited From:
Example
let object = new THING.BaseObject();
object.on('click', function() { console.log('clicked'); });
// 获取所有事件监听器
let allEvents = object.events;
// @expect(Array.isArray(allEvents));
// @expect(allEvents.length >= 0);
// allEvents 结果类似:
// [{
//   name: 'click',
//   callback: ƒ,
//   context: object,
//   once: false,
//   filter: undefined,
//   id: 1
// }, ...]

frustumCulled :boolean

获取/设置视锥剔除状态。
Inherited From:

helper :THING.HelperComponent

辅助组件 可显示坐标轴等
Inherited From:

id :string

设置/获取 物体id
Inherited From:
Example
let object = new THING.BaseObject();
object.id = 'DEVICE_007';
// @expect(object.id == 'DEVICE_007')

ignoreParentTransform :THING.Transform

获取/设置是否忽略父物体的变换
Inherited From:
Example
object.ignoreParentTransform = THING.Transform.Rotation | THING.Transform.Scale;

inherit :InheritData

获取继承信息
Inherited From:
Example
object.inherit.style = THING.InheritType.Jump;
	object.inherit.visible = THING.InheritType.Break;
	object.inherit.pickable = THING.InheritType.Stop;

isDynamicLoad :string

设置/获取 对象为动态加载
Inherited From:
Default Value:
  • false
Example
object.isDynamicLoad = true;

isFlying :boolean

获取飞行状态
Inherited From:

keepSize :boolean

是否自适应大小(缩放时保持像素级别大小不变)
Inherited From:
Example
let keepSize = object.keepSize;
	if (keepSize) {
		console.log('object is keep size to render');
	}

keepSizeUseBodyLocalScale :boolean

获取/设置 keepSize 时是否使用 body.localScale(true)而不是 object.localScale(false,默认)。
Inherited From:
Default Value:
  • false
Example
// 使用 body.localScale 来保持大小
object.keepSizeUseBodyLocalScale = true;
object.keepSize = true;

layerMask :number

取/设置遮罩层(LayerMask)。默认值为 1。通过"按位与"的计算,来判定物体在指定摄像机中的layerMask的值。
Inherited From:
Example
// Hide object by changing layer mask
object.layerMask = 0;

lerp :THING.LerpComponent

物体的插值组件(可控制属性动态的修改)
Inherited From:

level :THING.LevelComponent

物体的层级组件
Inherited From:

localAngles :Array.<number>

设置/获取 相对于父物体坐标系的旋转角度欧拉角('XYZ'),单位为 degree(度)。
Inherited From:

localPosition :Array.<number>

设置/获取 相对于父物体坐标系的位置(偏移)
Inherited From:

localQuaternion :Array.<number>

设置/获取 相对于父物体坐标系的四元数
Inherited From:

localRotation :Array.<number>

等同于localAngles欧拉角('XYZ'),单位为 degree(度)。
Inherited From:

localScale :Array.<number>

设置/获取 父物体坐标系下的缩放
Inherited From:

name :string

设置/获取 对象名称
Inherited From:
Example
object.name = 'MyObject';

orientedBox :OrientedBoxResult

获取旋转后的包围盒数据 包围盒坐标轴一般是物体自身坐标轴 等同于getOBB(true,true,false)
Inherited From:
Example
let orientedBox = object.orientedBox;
	if (orientedBox.angles[1] > 0) {
		console.log('The object has rotated by Y-axis');
	}

parent :THING.BaseObject

设置/获取 父物体
Inherited From:
Example
let parent = new THING.BaseObject();
 let child = new THING.BaseObject({parent: parent});
	let ret = child.parent == parent;
	// @expect(ret == true);

parents :THING.Selector

获取所有的祖先(父物体,父物体的父物体等,直到查询到根节点--app.root)
Inherited From:
Example
let box1 = new THING.Box();
	let box2 = new THING.Box({parent: box1});
	let parents = box2.parents;
 // @expect(parents.length == 2);

pickable :boolean

获取/设置可拾取状态。此属性操作会影响自身以及所有子对象。
Inherited From:
Example
let object = new THING.Box();
	object.pickable = false;

pivot :Array.<number>

获取/设置轴心点信息。轴心点参考原点为自身包围盒的 [left, bottom, back] 的位置。数组每个分类的取值为0-1
Inherited From:
Example
// Make object origin to [right, top, front] position
	object.pivot = [1, 1, 1];

position :Array.<number>

设置/获取 世界坐标系下的位置
Inherited From:

quaternion :Array.<number>

设置/获取 世界坐标系下的四元数
Inherited From:

queryable :boolean

设置/获取 对象是否可以被查询
Inherited From:
Example
let object = new THING.BaseObject();
object.name = 'Hidden';
let ret = app.query('Hidden');
// @expect(ret[0].name = 'Hidden')
object.queryable = false;
ret = app.query('Hidden');
// @expect(ret.length = 0)

relationships :Array.<THING.Relationship>

设置/获取 关系
Inherited From:
Example
let object = new THING.Object3D();
let source = new THING.Object3D();
let target = new THING.Object3D();
let relationship = new THING.Relationship({
     type: 'control',
     source: source,
     target: target
});
object.addRelationship(relationship);
let ret = object.relationships[0].type == 'control';
// @expect(ret == true)

renderOrder :number

获取/设置渲染顺序,绘制顺序从低到高。
Inherited From:

rotation :Array.<number>

等同于angles欧拉角('XYZ'),单位为 degree(度)。
Inherited From:

scale :Array.<number>

设置/获取 世界坐标系下的缩放
Inherited From:

style :THING.Style

获取/设置样式
Inherited From:
Example
let style = object.style;
	style.color = 'red';
	style.opacity = 0.1;

styleTag :string

样式标签
Inherited From:

tags :Set.<string>

设置/获取 物体标签
Inherited From:
Example
// Get tags
	let tags = object.tags;
 console.log(tags);

 // Set tags by array
 object.tags = ['one','two','three'];

 // Set tags by set
 object.tags = new Set(['one','two','three']);

type :string

获取类型
Inherited From:
Example
let object = new THING.BaseObject();
let type = object.type;
// @expect(type == 'BaseObject')

userData :object

设置/获取 物体的自定义属性
Inherited From:
Example
let object = new THING.BaseObject();
object.userData['Notebook'] = {
	name: 'FlyingCar',
	price: 100
};
let name = object.userData['Notebook'].name;
// @expect(name == 'FlyingCar')
let price = object.userData['Notebook'].price
// @expect(price == 100)

uuid :string

设置/获取 物体的唯一标识
Inherited From:
Example
let object = new THING.BaseObject({uuid: 10000});
// @expect(object.uuid == 10000)
object.uuid = THING.Math.generateUUID();
// @expect(object.id != 10000)

visible :boolean

获取/设置显示状态,此属性操作会影响自身以及所有子对象。
Inherited From:
Example
let object = new THING.Box();
	// @expect(object.visible == true)
	object.visible = false;
	// @expect(object.visible == false)

Methods

add(object, options) → {boolean}

添加对象作为自己的孩子
Parameters:
Name Type Description
object THING.Object3D 待添加对象
options object 选项
Properties
Name Type Attributes Default Description
subNodeName string 子节点名称
localPosition Array.<number> 相对父物体的位置
localAngles Array.<number> 相对父物体的旋转角度
attachMode boolean <optional>
true 表示是否保持世界坐标系下的位置不变
ignoreScale boolean <optional>
false 是否忽略缩放
indexOfParent boolean <optional>
对象在子节点中的索引
Returns:
boolean - 添加成功返回true,否则返回false
Inherited From:
Example
// Keep local transform of box to be added to object
	object.add(new THING.Box({ localPosition: [0, 10, 0]}), { attachMode: false });

addComponent(component, name, args?) → {boolean}

添加组件
Parameters:
Name Type Description
component THING.BaseComponent | object 组件对象类名或者组件对象实例
name string 组件名称
args? object 初始化具体组件的参数对象 如果第一个参数是一个类名而不是一个实例,添加时会根据初始化参数和类名创建一个组件实例
Returns:
boolean - 是否成功 如果给obj添加了一个name为myComponent的组件,添加成功后,可通过obj.myComponent获取该组件对象
Inherited From:
Example
let obj = new THING.BaseObject();;
obj.addComponent(new THING.BaseComponent(), 'myComponent');
// @expect(obj.myComponent != null)

bindSubNode(target, subNodeName) → {boolean}

绑定子节点,绑定后将自动根据子节点更新世界坐标。绑定后位置、角度和缩放会锁定。
Parameters:
Name Type Description
target THING.Object3D 目标对象。
subNodeName string 子节点名称。
Returns:
boolean - 是否绑定成功。
Inherited From:
Example
let box = new THING.Box();
	box.bindSubNode(car, 'chair');

clone(recursive, parent, options) → {THING.Object3D}

克隆对象
Parameters:
Name Type Description
recursive boolean 是否克隆所有的孩子
parent THING.BaseObject 指定克隆出的对象父物体 默认用app.root作为父物体
options object 选项
Returns:
THING.Object3D - 克隆出来的物体
Inherited From:
Example
// Clone the object and move up
	let otherObject = object.clone();
	otherObject.translateY(10);

copy(object, options) → {Promise.<any>}

拷贝对象(不拷贝uuid和parent),拷贝对象会重新加载资源
Parameters:
Name Type Description
object THING.BaseObject 源对象
options object 选项
Returns:
Promise.<any> - 返回一个Promise对象
Inherited From:
Example
// 从查询结果拷贝对象
	let sourceObject = app.query('#master')[0];
	if (sourceObject) {
		object.copy(sourceObject);
	}

destroy() → {boolean}

销毁物体
Returns:
boolean - 返回一个布尔值,表示是否销毁成功
Inherited From:
Example
let object = new THING.BaseObject();
// @expect(object.destroyed == false);
object.destroy();
// @expect(object.destroyed == true)

disableInstancing() → {boolean}

禁用实例化节点。
Returns:
boolean - 是否禁用成功
Inherited From:
Example
// 禁用实例化渲染
object.disableInstancing();

distanceTo(target) → {number}

获取距离另一个Object3D对象或者一个三维坐标的距离
Parameters:
Name Type Description
target THING.Object3D | Array.<number> 目标物体或者世界坐标
Returns:
number - 距离
Inherited From:
Example
let distance = object.distanceTo([0, 10, 0]);
	if (distance > 5000) {
		console.log('object is so far from specified position');
	}

enableInstancing(options) → {Promise.<boolean>}

启用实例化节点(启用后将使主体节点不可见)。
Parameters:
Name Type Description
options InstancingNodeOptions 选项。
Returns:
Promise.<boolean> - 是否启用成功
Inherited From:
Example
// 启用实例化渲染,设置最大数量为31104个实例
object.enableInstancing({
  maxNumber: 31104,
  number: 0,
  matrices: [], // 包含所有实例的变换矩阵
  pickedIds: pickedIds, // 可选,包含所有实例的拾取ID
  colors: colors // 可选,包含所有实例的颜色
});

fadeIn(param)

对象渐现
Parameters:
Name Type Description
param LerpArgs The parameters. 插值参数
Inherited From:
Example
object.fadeIn({
  duration: 2000,
  onComplete: () => {
    console.log('Fade in completed');
  }
});

fadeInAsync(param) → {Promise}

异步将对象渐现。
Parameters:
Name Type Description
param LerpArgs The parameters. 插值参数
Returns:
Promise - 一个在渐现完成时解析的承诺。
Inherited From:
Example
await object.fadeInAsync({
  duration: 2000
});

fadeOut(param)

对象渐隐
Parameters:
Name Type Description
param LerpArgs The parameters. 插值参数
Inherited From:
Example
object.fadeOut({
  duration: 2000,
  onComplete: () => {
    console.log('Fade out completed');
  }
});

fadeOutAsync(param) → {Promise}

异步将对象渐隐。
Parameters:
Name Type Description
param LerpArgs The parameters. 插值参数
Returns:
Promise - 一个在渐隐完成时解析的承诺。
Inherited From:
Example
await object.fadeOutAsync({
  duration: 2000
});

fit(param) → {boolean}

根据目标对象计算最佳位置 一般用于调整摄像机最佳视角
注意参数中 times 和 duration 不起作用
Parameters:
Name Type Description
param THING.BaseObject | LerpFlyToArgs 可传入BaseObject或参数
Returns:
boolean - 是否计算成功
Inherited From:
Example
app.camera.fit(otherTarget);

flyTo(param) → {boolean}

物体在特定时间内飞行到特定位置
Parameters:
Name Type Description
param THING.BaseObject | LerpFlyToArgs 可传入BaseObject或飞行参数
Returns:
boolean - 是否飞行成功
Inherited From:
Example
object.flyTo(baseObject);//飞到物体

	object.flyTo({
		target: otherTarget,
		horzAngle: 0,
		vertAngle: 45
	});

	object.flyTo({
		position: [0,10,0],
   target:[0,0,0],
		up:[0,0,1]
	});

getAABB(recursiveopt, updateMatrixopt, localopt) → {THING.Box3}

获取包围盒
Parameters:
Name Type Attributes Default Description
recursive boolean <optional>
true 计算aabb时是否考虑孩子
updateMatrix boolean <optional>
true 计算aabb时是否更新自己和孩子的矩阵
local boolean <optional>
false 计算出的aabb的轴向是基于父物体坐标系,还是相对于世界坐标系(计算出的包围盒是不同的)
Returns:
THING.Box3 - 包围盒对象
Inherited From:
Example
let boundingBox = object.getAABB();
	console.log(boundingBox);

getAllComponents() → {Array.<THING.BaseComponent>}

获取所有组件
Returns:
Array.<THING.BaseComponent>
Inherited From:
Example
let obj = new THING.BaseObject();;
obj.addComponent(new THING.BaseComponent(), 'component1');
obj.addComponent(new THING.BaseComponent(), 'component2');
let components = obj.getAllComponents();
// @expect(components.length == 2)

getAttribute(key, separator) → {*}

根据name获取属性值
Parameters:
Name Type Default Description
key string 属性名称,支持嵌套,例如获取object.a.b.c 可以使用object.getAttribute('a/b/c')
separator string / 分隔符,默认是'/'
Returns:
* - 返回指定属性的值
Inherited From:
Example
let object = new THING.BaseObject();
object.userData['power'] = 100;
let power = object.getAttribute('userData/power');
// @expect(power == 100)

getComponentByName(name) → {THING.BaseComponent}

根据名称获取组件对象
Parameters:
Name Type Description
name string 组件名称
Inherited From:
Example
let obj = new THING.BaseObject();;
obj.addComponent(new THING.BaseComponent(), 'myComponent');
let component = obj.getComponentByName('myComponent');
// @expect(component != null)

getComponentByType(type) → {THING.BaseComponent}

根据类型获取组件对象 返回符合条件的第一个组件
Parameters:
Name Type Description
type * 组件类型
Inherited From:
Example
let obj = new THING.BaseObject();;
obj.addComponent(new THING.BaseComponent(), 'myComponent');
let component = obj.getComponentByType(THING.BaseComponent);
// @expect(component != null)

getComponentsByType(type) → {Array.<THING.BaseComponent>}

根据类型获取组件对象的集合
Parameters:
Name Type Description
type * 组件类型
Returns:
Array.<THING.BaseComponent>
Inherited From:
Example
let obj = new THING.BaseObject();;
obj.addComponent(new THING.BaseComponent(), 'component1');
obj.addComponent(new THING.BaseComponent(), 'component2');
let components = obj.getComponentsByType(THING.BaseComponent);
// @expect(components.length == 2)

getEvents(type) → {Array.<ObjectListenerInfo>}

获取指定类型的事件。
Parameters:
Name Type Description
type string 事件类型,为null表示获取所有事件。
Returns:
Array.<ObjectListenerInfo> - 返回一个数组,包含所有指定类型的事件
Inherited From:
Example
let object = new THING.BaseObject();
let events = object.getEvents();
// @expect(events.length > 0);

getFrustumCulled() → {boolean}

获取视锥剔除状态。
Returns:
boolean - 视锥剔除状态。
Inherited From:
Example
let frustumCulled = object.getFrustumCulled();
	if (frustumCulled) {
		console.log('object is frustum culled');
	}

getInstancedCount() → {number}

获取实例化数量。
Returns:
number - 实例化数量
Inherited From:
Example
// 获取当前实例的数量
const count = object.getInstancedCount();
console.log('Current instance count:', count);

getInstancing() → {InstancingNodeOptions}

获取实例化节点信息。
Returns:
InstancingNodeOptions - 实例化节点信息
Inherited From:
Example
// 获取实例化渲染的当前参数
const info = object.getInstancing();
console.log(info.number); // 当前实例数量
console.log(info.maxNumber); // 最大实例数量

getInstancingAttribute(name) → {any}

获取实例化属性。
Parameters:
Name Type Description
name string 名称。
Returns:
any - 实例化属性
Inherited From:
Example
// 获取颜色属性的状态
const useColors = object.getInstancingAttribute('Colors');
console.log('Using colors:', useColors);

getInstancingClearOutColor(index) → {boolean}

获取实例化清除颜色。
Parameters:
Name Type Description
index number 索引。
Returns:
boolean - 是否获取成功
Inherited From:
Example
// 获取第一个实例的清除颜色
const clearOutColor = object.getInstancingClearOutColor(0);
console.log('Instance 0 clear out color:', clearOutColor);

getInstancingDiffuseUVTransform(index, target) → {Array.<number>}

获取实例化漫反射UV变换。
Parameters:
Name Type Description
index number 索引。
target Array.<number> 目标。
Returns:
Array.<number> - 漫反射UV变换
Inherited From:
Example
// 获取第一个实例的漫反射UV变换
const diffuseUVTransform = object.getInstancingDiffuseUVTransform(0);
console.log('Instance 0 diffuse UV transform:', diffuseUVTransform);

getInstancingMatrix(index, target?) → {Array.<number>}

获取按索引的实例化矩阵。
Parameters:
Name Type Description
index number 索引。
target? Array.<number> 目标。
Returns:
Array.<number> - 实例化矩阵
Inherited From:
Example
// 获取第一个实例的变换矩阵
const matrix = object.getInstancingMatrix(0);
console.log('Instance 0 matrix:', matrix);

getInstancingVisible(index) → {boolean}

获取按索引的实例化可见性。
Parameters:
Name Type Description
index number 索引。
Returns:
boolean - 是否获取成功
Inherited From:
Example
// 检查第一个实例是否可见
const visible = object.getInstancingVisible(0);
console.log('Instance 0 visible:', visible);

getOBB(recursiveopt, updateMatrixopt, localopt) → {OrientedBoxResult}

获取旋转后的包围盒
Parameters:
Name Type Attributes Default Description
recursive boolean <optional>
true 计算obb时是否考虑孩子
updateMatrix boolean <optional>
true 计算obb时是否更新自己和孩子的矩阵
local boolean <optional>
false 描述obb时的参数是基于父物体还是世界坐标系(算出的包围盒是一样的,只是描述不同)
Returns:
OrientedBoxResult - 旋转包围盒对象
Inherited From:
Example
let orientedBox = object.getOBB();
	console.log(orientedBox);

getRenderOrder() → {number}

获取渲染顺序。
Returns:
number - 渲染顺序
Inherited From:
Example
let renderOrder = object.renderOrder;
	console.log(renderOrder);

getVisible() → {boolean}

获取visible的状态
Returns:
boolean - 可见状态。
Inherited From:
Example
let visible = object.getVisible();
	if (visible) {
		console.log('object is showing');
	}

hasAttribute(name, separator) → {boolean}

检查是否含有属性名为name的属性
Parameters:
Name Type Default Description
name string 属性名称,支持嵌套,例如查询object.a.b.c 可以使用object.hasAttribute('a/b/c')
separator string / 分隔符,默认是'/'
Returns:
boolean - 返回一个布尔值,表示是否存在指定的属性
Inherited From:
Example
let object = new THING.BaseObject();
object.userData['power'] = 100;
let ret = object.hasAttribute('userData/power');
// @expect(ret == true)

hasComponent(name) → {boolean}

判断是否含有特定名称的组件
Parameters:
Name Type Description
name string 组件名称
Returns:
boolean
Inherited From:
Example
let obj = new THING.BaseObject();;
obj.addComponent(new THING.BaseComponent(), 'myComponent');
let ret = obj.hasComponent('myComponent')
// @expect(ret == true)

async invoke(type, condition, data, tagName) → {*}

触发并等待事件完成
Parameters:
Name Type Description
type string 事件类型。
condition string | object 事件条件 或 事件数据。
data object | string 事件数据 或 事件标签。
tagName string 事件标签名称。
Returns:
* - 返回一个Promise对象,包含指定类型的事件
Inherited From:

loadResource(recursiveopt, optionsopt) → {Promise.<any>}

加载资源 返回一个Promise对象
Parameters:
Name Type Attributes Default Description
recursive boolean <optional>
true 是否加载所有孩子的资源
options ResourceResult <optional>
{} 加载选项
Returns:
Promise.<any> - 返回一个Promise对象
Inherited From:
Example
// 等待物体加载资源完成
	await object.loadResource();

localToWorld(position, ignoreScaleopt) → {Array.<number>}

相对于父物体的坐标转为世界坐标
Parameters:
Name Type Attributes Default Description
position Array.<number> 相对于父物体的坐标
ignoreScale boolean <optional>
false 转换时是否忽略缩放 默认不忽略
Returns:
Array.<number> - 返回世界坐标
Inherited From:
Example
let parentObj = new THING.Object3D({
	position: [0, 5, 0]
});

let childObj = new THING.Object3D({
	localPosition: [0, 10, 0],
 parent: parentObj
});

let worldPos = childObj.localToWorld([0, -5, 0]);

// print [0, 0, 0]
console.log(worldPos);

lookAt(target, param) → {boolean}

看对象或一个目标位置
Parameters:
Name Type Description
target Array.<number> | THING.Object3D 要看的对象或目标位置
param LookAtArgs 参数列表
Returns:
boolean - 是否看成功
Inherited From:

makeInstancedDrawing(value, options) → {boolean}

开启/关闭批量渲染模式。
Parameters:
Name Type Default Description
value boolean true 是否开启
options object 选项
Properties
Name Type Attributes Default Description
renderMode string <optional>
'InstancedRendering' 渲染模式 InstancedRendering/SharedRenderingSharedRendering代表材质共用但是drawCall还是多个 InstancedRendering代表材质共用,drawCall只有一次
Returns:
boolean - 是否开启成功
Inherited From:
Example
// 开启批量渲染模式
	if (object.makeInstancedDrawing()) {
		console.log('Enable instanced drawing');
	}

movePath(value, param) → {boolean}

对象沿路径移动
Parameters:
Name Type Description
value Array.<Array.<number>> 组成路径的坐标的集合
param MovePathLerpArgs 移动参数
Returns:
boolean - 是否移动成功
Inherited From:
Example
let path = [
	[100, 0, 0],
	[100, 0, 100],
	[0, 0, 100],
[0, 0, 0],
];

object.movePath(path.map(point => object.selfToWorld(point)), {
	duration: 5 * 1000,
	loopType: THING.LoopType.Repeat,
});
object.movePath({
	path: path.map(point => object.selfToWorld(point)),
	duration: 5 * 1000,
	loopType: THING.LoopType.Repeat,
});

movePathAsync(value, param) → {Promise.<any>}

对象沿路径移动 返回一个Promise对象
Parameters:
Name Type Description
value Array.<Array.<number>> 组成路径的坐标的集合
param MovePathLerpArgs 移动参数
Returns:
Promise.<any> - 返回一个Promise对象
Inherited From:
Example
let path = [
	[100, 0, 0],
	[100, 0, 100],
	[0, 0, 100],
[0, 0, 0],
];

await object.movePathAsync(path.map(point => object.selfToWorld(point)), {
	duration: 5 * 1000
});
await object.movePathAsync({
	path: path.map(point => object.selfToWorld(point)),
	duration: 5 * 1000
});

moveTo(value, param) → {boolean}

对象移动到目标位置
Parameters:
Name Type Description
value Array.<number> 目标位置
param MovePathLerpArgs 移动的参数
Returns:
boolean - 是否移动成功
Inherited From:
Example
object.moveTo(object.selfToWorld(THING.Math.randomVector([-200, -5, -200], [200, 5, 200])), {
		loopType: THING.LoopType.PingPong,
		duration: THING.Math.randomInt(1000, 5000)
});
object.moveTo({
	to: object.selfToWorld(THING.Math.randomVector([-200, -5, -200], [200, 5, 200])),
	duration: THING.Math.randomInt(1000, 5000)
})

off(type, condition, tag)

注销事件
Parameters:
Name Type Description
type string 事件类型
condition string 注册事件的条件
tag string 事件的tag
Inherited From:
Example
let object = new THING.BaseObject();
let markOff = 0;
object.on('testOff', function(ev) {
		markOff = 1;
});
object.trigger('testOff');
// @expect(markOff == 1);
markOff = 0;
object.off('testOff');
object.trigger('testOff');
// @expect(markOff == 0);

on(type, condition, callback, tag, priority, options)

注册事件
Parameters:
Name Type Description
type string 事件类型
condition string 注册事件前先进行查询,对符合条件的对象进行注册
callback EventCallback 事件回调函数
tag string 事件的tag
priority number 优先级 默认0
options ObjectEventOptions 事件参数
Inherited From:
Example
let object = new THING.BaseObject();
let mark = 0;
object.on('click', function(ev){
	mark = 1;
}, 'MyClick');
object.trigger('click');
// @expect(mark == 1)
let mark2 = 0;
object.on('click', '.Box', function(ev){
	mark2 = 1;
}, 'MyClick');
// @expect(mark2 == 0)

once(type, condition, callback, tag, priority, options)

注册一次性的事件,此事件响应只会触发一次,触发后会被自动注销
Parameters:
Name Type Description
type string 事件类型
condition string 注册事件前先进行查询,对符合条件的对象进行注册
callback EventCallback 事件回调函数
tag string 事件的tag
priority number 优先级 默认0
options ObjectEventOptions 事件参数
Inherited From:
Example
let object = new THING.BaseObject();
let markOnce = 0;
object.once('testOnce', function(ev) {
		markOnce = 1;
});
object.trigger('testOnce');
// @expect(markOnce == 1);
markOnce = 0;
object.trigger('testOnce');
// @expect(markOnce == 0);

pauseEvent(type, condition, tag)

暂停事件
Parameters:
Name Type Description
type string 事件类型
condition string 注册事件的条件
tag string 事件的tag
Inherited From:
Example
let object = new THING.BaseObject();
let markPause = 0;
object.on('testPause', function(ev) {
		markPause = 1;
});
object.trigger('testPause');
// @expect(markPause == 1);
markPause = 0;
object.pauseEvent('testPause');
object.trigger('testPause');
// @expect(markPause == 0);
app.on('test', ".Box", (e) => {
	console.log(e.object)
}, 'MyTag');
app.pauseEvent('test', '.Box', 'MyTag');

pauseFading()

暂停淡入淡出动作。
Inherited From:
Example
object.pauseFading();

pauseFlying()

暂停飞行
Inherited From:
Example
object.pauseFlying();

pauseMoving()

暂停移动
Inherited From:
Example
object.pauseMoving();

pauseRotating()

暂停旋转
Inherited From:
Example
object.pauseRotating();

pauseScaling() → {boolean}

暂停缩放动画
Returns:
boolean - 是否暂停成功
Inherited From:
Example
object.pauseScaling();

pauseUVTransform(slotType) → {boolean}

暂停UV变化
Parameters:
Name Type Description
slotType ImageSlotType 指定纹理类型
Returns:
boolean - 是否暂停成功
Inherited From:
Example
object.pauseUVTransform(THING.ImageSlotType.Map);

promoteNode(name, parent, cls) → {THING.Object3D}

提升渲染节点(uNode)作为Object3D对象
Parameters:
Name Type Description
name string 节点名称
parent THING.Object3D 父对象,如果为null,则表示使用当前对象作为父对象
cls *
Returns:
THING.Object3D - 提升后的对象
Inherited From:
Example
// Promote all sub nodes
	var nodeNames = entity.body.nodeNames;
	nodeNames.forEach(name => {
		entity.promoteNode(name);
	});

query(condition) → {THING.Selector}

根据条件查询孩子 返回所有满足条件的对象集合
Parameters:
Name Type Description
condition ObjectQueryOptions | string 查询条件
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child= new THING.BaseObject({parent: object});
child.userData = {power: 1000};
let children = object.children.query('[userData/power>100]');
let ret = children.length == 1;
// @expect(ret == true)

queryAll(condition) → {THING.Selector}

根据条件查询孩子 返回所有满足条件的对象集合(忽略 queryable 属性)
Parameters:
Name Type Description
condition ObjectQueryOptions | string 查询条件
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child= new THING.BaseObject({parent: object});
child.userData = {power: 1000};
let children = object.children.queryAll('[userData/power>100]');
let ret = children.length == 1;
// @expect(ret == true)

queryByDTType(condition, options) → {THING.Selector}

根据孪生体类型查询孩子
Parameters:
Name Type Description
condition string 查询条件
options ObjectQueryOptions 查询参数
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child1= new THING.BaseObject({parent: object});
child1.dtType = 'Equipment';
let child2= new THING.BaseObject({parent: object});
let result = object.queryByDTType('Equipment');
let ret = result[0].dtType == 'Equipment';
 //@expect(ret == true)

queryById(condition, options) → {THING.Selector}

根据id查询孩子
Parameters:
Name Type Description
condition string 查询条件
options ObjectQueryOptions 查询参数
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child1= new THING.BaseObject({parent: object});
child1.id = '10000';
let child2= new THING.BaseObject({parent: object});
let result = object.queryById('10000');
let ret = result[0].id == '10000';
 //@expect(ret == true)

queryByName(condition, options) → {THING.Selector}

根据名称查询孩子
Parameters:
Name Type Description
condition string 查询条件
options ObjectQueryOptions 查询参数 主要包括是否递归查询和是否包含自身
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child= new THING.BaseObject({parent: object, name: 'liming'});
let result = object.queryByName('liming');
let ret = result[0].name == 'liming';
// @expect(ret == true)

queryByRegExp(condition, options) → {THING.Selector}

根据正则表达式查询孩子
Parameters:
Name Type Description
condition string 正则表达式
options ObjectQueryOptions 查询参数
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child1= new THING.BaseObject({parent: object, name: 'car1'});
let child2= new THING.BaseObject({parent: object, name: 'car2'});
let result = object.queryByRegExp(/car/);
let ret = result.length == 2;
 //@expect(ret == true)

queryByTags(condition, options) → {THING.Selector}

根据tag查询孩子
Parameters:
Name Type Description
condition string 查询条件
options ObjectQueryOptions 查询参数
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child1= new THING.Object3D({parent: object, name: 'car1'});
child1.tags.add('testCar');
let child2= new THING.BaseObject({parent: object, name: 'car2'});
let result = object.queryByTags('testCar');
let ret = result.length == 1;
 //@expect(ret == true)

queryByType(condition, options) → {THING.Selector}

根据类型查询孩子
Parameters:
Name Type Description
condition string 查询条件
options ObjectQueryOptions 查询参数
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child1= new THING.Box({parent: object, id: '10000'});
let child2= new THING.BaseObject({parent: object});
let result = object.queryByType('Box');
let ret = result[0].id == '10000';
 //@expect(ret == true)

queryByUUID(condition, options) → {THING.Selector}

根据uuid查询孩子
Parameters:
Name Type Description
condition string 查询条件
options ObjectQueryOptions 查询参数
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child1= new THING.BaseObject({parent: object, uuid: '1000'});
let child2= new THING.BaseObject({parent: object});
let result = object.queryByUUID('1000');
let ret = result[0].uuid == '1000';
 //@expect(ret == true)

queryByUserData(condition, options) → {THING.Selector}

根据userData(用户数据)查询孩子
Parameters:
Name Type Description
condition string 查询条件
options ObjectQueryOptions 查询参数
Returns:
THING.Selector - 查询结果
Inherited From:
Example
let object = new THING.BaseObject();
let child1= new THING.Box({parent: object});
child1.userData['power'] = 100;
let child2= new THING.BaseObject({parent: object});
let result = object.queryByUserData('power=100');
let ret = result[0].userData.power == 100;
 //@expect(ret == true)

raycast(ray, recursiveopt) → {Array.<RaycastResult>}

射线检测,检测射线是否与对象相交
Parameters:
Name Type Attributes Default Description
ray RaycastInfo 射线信息
recursive boolean <optional>
true 是否对所有子对象进行检测
Returns:
Array.<RaycastResult> - 检测结果(按距离从近到远排序)
Inherited From:
Example
// 示例1: 创建一个向前的射线
let results = object.raycast({
  origin: [0, 0, 0],    // 起点
  direction: [0, 0, 1]  // 向前
});
if (results.length) {
  let nearest = results[0];  // 获取最近的相交点
  console.log('击中物体:', nearest.object);
  console.log('击中位置:', nearest.position);
  console.log('击中距离:', nearest.distance);
}

// 示例2: 创建一个指向目标的射线
let direction = THING.Math.normalizeVector(
  THING.Math.subVector(targetPos, startPos)  // 目标点减起点
);
console.log('从起点:', startPos, '朝向:', direction, '进行射线检测');
let hits = object.raycast({
  origin: startPos,
  direction: direction
});
console.log('射线检测结果:', hits);

remove(object, options) → {boolean}

从自己的孩子中移除BaseObject
Parameters:
Name Type Description
object THING.BaseObject 待移除物体
options object 选项
Returns:
boolean - 返回一个布尔值,表示是否移除成功
Inherited From:
Example
let parent = new THING.BaseObject();
let child = new THING.BaseObject();
parent.add(child);
let ret = child.isChildOf(parent);
 // @expect(ret == true);
	parent.remove(child);
ret = child.isChildOf(parent);
	// @expect(ret == false);

removeAllComponents()

移除所有组件
Inherited From:
Example
let obj = new THING.BaseObject();;
obj.addComponent(new THING.BaseComponent(), 'component1');
obj.addComponent(new THING.BaseComponent(), 'component2');
obj.removeAllComponents();
// @expect(obj.components.size == 0)

removeComponent(name)

根据名称移除组件
Parameters:
Name Type Description
name string The name. 组件名称
Inherited From:
Example
let obj = new THING.BaseObject();;
obj.addComponent(new THING.BaseComponent(), 'myComponent');
obj.removeComponent('myComponent');
// @expect(obj.components.size == 0)

resumeEvent(type, condition, tag)

恢复事件
Parameters:
Name Type Description
type string 事件类型
condition string 注册事件的条件
tag string 事件的tag
Inherited From:
Example
let object = new THING.BaseObject();
let markResume = 0;
object.on('testResume', function(ev) {
		markResume = 1;
});
object.trigger('testResume');
// @expect(markResume == 1);
markResume = 0;
object.pauseEvent('testResume');
object.trigger('testResume');
// @expect(markResume == 0);
object.resumeEvent('testResume');
object.trigger('testResume');
// @expect(markResume == 1);
app.on('test', ".Box", (e) => {
	console.log(e.object)
}, 'MyTag');
app.pauseEvent('test', '.Box', 'MyTag');
app.resumeEvent('test', '.Box', 'MyTag');

resumeFading()

恢复淡入淡出动作。
Inherited From:
Example
object.resumeFading();

resumeFlying()

恢复飞行
Inherited From:
Example
object.resumeFlying();

resumeMoving()

恢复移动
Inherited From:
Example
object.resumeMoving();

resumeRotating()

恢复旋转
Inherited From:
Example
object.resumeRotating();

resumeScaling() → {boolean}

恢复缩放动画
Returns:
boolean - 是否恢复成功
Inherited From:
Example
object.resumeScaling();

resumeUVTransform(slotType) → {boolean}

恢复UV变化
Parameters:
Name Type Description
slotType ImageSlotType 指定纹理类型
Returns:
boolean - 是否恢复成功
Inherited From:
Example
object.resumeUVTransform(THING.ImageSlotType.Map);

rotate(axis, angle, lerpParam) → {boolean}

等同于rotateOnAxis
Parameters:
Name Type Description
axis Array.<number> 在自身坐标系下的轴向信息
angle number 旋转角度
lerpParam LerpArgs 插值信息
Returns:
boolean - 是否旋转成功
Inherited From:
Example
let box = new THING.Box();
	box.rotate(THING.Utils.xAxis, 45);
	// @expect(THING.Math.equalsVector3([45, 0, 0], box.angles) == true);

rotateOnAxis(axis, angle, lerpParam) → {boolean}

绕固定轴旋转特定角度
Parameters:
Name Type Description
axis Array.<number> 在自身坐标系下的轴向信息
angle number 旋转角度
lerpParam LerpArgs 插值信息
Returns:
boolean - 是否旋转成功
Inherited From:
Example
let box = new THING.Box();
	box.rotateOnAxis(THING.Utils.xAxis, 45);
	//@expect(THING.Math.equalsVector3([45, 0, 0], box.angles) == true);

rotateTo(value, param) → {boolean}

旋转对象
Parameters:
Name Type Description
value Array.<number> 三个轴向的旋转角度
param LerpWithSpaceTypeArgs 插值参数
Returns:
boolean - 是否旋转成功
Inherited From:
Example
object.rotateTo([0, 360, 0], {
	loopType: THING.LoopType.Repeat,
	duration: 10 * 1000
});
object.rotateTo({
	to: [0, 360, 0],
	duration: 10 * 1000
});

rotateX(angle, lerpParam) → {boolean}

绕自身坐标系下的x轴进行旋转
Parameters:
Name Type Description
angle number 旋转角度
lerpParam LerpArgs 插值信息
Returns:
boolean - 是否旋转成功
Inherited From:

rotateY(angle, lerpParam) → {boolean}

绕自身坐标系下的y轴进行旋转
Parameters:
Name Type Description
angle number 旋转角度
lerpParam LerpArgs 插值信息
Returns:
boolean - 是否旋转成功
Inherited From:

rotateZ(angle, lerpParam) → {boolean}

绕自身坐标系下的z轴进行旋转
Parameters:
Name Type Description
angle number 旋转角度
lerpParam LerpArgs 插值信息
Returns:
boolean - 是否旋转成功
Inherited From:

scaleTo(value, param) → {boolean}

缩放动画
Parameters:
Name Type Description
value Array.<number> 要缩放到三个轴向的倍数
param LerpWithSpaceTypeArgs 插值参数
Returns:
boolean - 是否缩放成功
Inherited From:
Example
object.scaleTo(THING.Math.randomVector([1, 1, 1], [3, 3, 3]), {
	loopType: THING.LoopType.PingPong,
	duration: THING.Math.randomInt(1000, 5000)
});
object.scaleTo({
	to: THING.Math.randomVector([1, 1, 1], [3, 3, 3]),
	duration: THING.Math.randomInt(1000, 5000)
});

selfToWorld(position, ignoreScaleopt) → {Array.<number>}

自身坐标转世界坐标
Parameters:
Name Type Attributes Default Description
position Array.<number> 自身坐标系下的坐标
ignoreScale boolean <optional>
false 转换时是否忽略缩放 默认不忽略
Returns:
Array.<number> - 返回世界坐标
Inherited From:
Example
let obj = new THING.Object3D({ position: [0, 15, 0] });
let worldPos = obj.selfToWorld([0, -15, 0]);
// print [0, 0, 0]
console.log(worldPos);

setAttribute(key, value, separator)

设置属性名称为key的属性值
Parameters:
Name Type Default Description
key string 属性名称,支持嵌套,例如设置object.a.b.c=1 可以使用object.setAttribute('a/b/c',1)
value * 属性值
separator string / 分隔符,默认是'/'
Inherited From:
Example
let object = new THING.BaseObject();
object.setAttribute('userData/power', 200);
let power = object.getAttribute('userData/power');
// @expect(power == 200)

setAttributes(attributes, overwriteopt, separator)

设置属性
Parameters:
Name Type Attributes Default Description
attributes object 属性对象
overwrite boolean <optional>
true 是否覆盖
separator string / 分隔符,默认是'/'
Inherited From:
Example
let object = new THING.BaseObject();
object.setAttributes({
  "userData/name": 'Mr.Door',
  "userData/age": 18
})
let name = object.getAttribute('userData/name');
// @expect(name == 'Mr.Door')
let age = object.getAttribute('userData/age');
// @expect(age == 18)

setFrustumCulled(value, recursiveopt)

设置视锥剔除状态。
Parameters:
Name Type Attributes Default Description
value boolean 为真表示启用视锥剔除,否则不启用。
recursive boolean <optional>
false 为真表示处理所有子对象。
Inherited From:
Example
object.setFrustumCulled(true, true);

setInstancing(options) → {boolean}

设置/更新实例化节点选项。
Parameters:
Name Type Description
options InstancingNodeOptions 选项。
Returns:
boolean - 是否设置成功
Inherited From:
Example
// 更新实例化渲染的参数
object.setInstancing({
  maxNumber: 31104,
  number: 31104,
  matrices: matrices, // 包含所有实例的变换矩阵
  pickedIds: pickedIds, // 可选,包含所有实例的拾取ID
  colors: colors // 可选,包含所有实例的颜色
});

setInstancingAttribute(name, value) → {boolean}

设置实例化属性。
Parameters:
Name Type Description
name string 名称。
value any 值。
Returns:
boolean - 是否设置成功
Inherited From:
Example
// 启用颜色属性
object.setInstancingAttribute('Colors', true);

setInstancingClearOutColor(index, value) → {boolean}

按索引设置实例化清除颜色。
Parameters:
Name Type Description
index number 索引。
value boolean 是否清除颜色。
Returns:
boolean - 是否设置成功
Inherited From:
Example
// 清除第一个实例的颜色
object.setInstancingClearOutColor(0, true);

setInstancingColor(index, color) → {boolean}

按索引设置实例化颜色。
Parameters:
Name Type Description
index number 索引。
color Array.<number> 颜色。
Returns:
boolean - 是否设置成功
Inherited From:
Example
// 将第30个实例设置为绿色
object.setInstancingColor(30, [0, 1, 0]);

// 随机将一些实例设置为红色警告色
for(let i = 0; i < warnCount; i++) {
  const index = Math.floor(Math.random() * 31104);
  object.setInstancingColor(index, [1, 0, 0]);
}

setInstancingDiffuseUVTransform(index, diffuseUVTransform) → {boolean}

按索引设置实例化漫反射UV变换。
Parameters:
Name Type Description
index number 索引。
diffuseUVTransform Array.<number> 漫反射UV变换。
Returns:
boolean - 是否设置成功
Inherited From:
Example
// 设置第一个实例的漫反射UV变换
object.setInstancingDiffuseUVTransform(0, [0, 0, 1, 1]);

setInstancingMatrix(index, matrix) → {boolean}

按索引设置实例化矩阵。
Parameters:
Name Type Description
index number 索引。
matrix Array.<number> 矩阵。
Returns:
boolean - 是否设置成功
Inherited From:
Example
// 修改第30个实例的变换矩阵,将其Y轴位置上移1个单位
const matrices = options[0].matrices[30];
object.setInstancingMatrix(30, [
  1, 0, 0, matrices[3],
  0, 1, 0, matrices[7] + 1,
  0, 0, 1, matrices[11],
  0, 0, 0, 1
]);

setInstancingVisible(index, visible) → {boolean}

按索引设置实例化可见性。
Parameters:
Name Type Description
index number 索引。
visible boolean 可见性。
Returns:
boolean - 是否设置成功
Inherited From:
Example
// 隐藏第一个实例
object.setInstancingVisible(0, false);

setPickable(value, recursiveopt)

设置可拾取状态。
Parameters:
Name Type Attributes Default Description
value boolean 可拾取状态。
recursive boolean <optional>
false 为真表示处理所有子对象。
Inherited From:
Example
object.setPickable(true, true);

setRenderOrder(value, recursive) → {boolean}

设置渲染顺序。
Parameters:
Name Type Description
value number 渲染顺序的值,渲染顺序从低到高。
recursive boolean 为真表示处理所有子对象。
Returns:
boolean - 是否设置成功
Inherited From:
Example
object.setRenderOrder(10);

setStyle(value, recursiveopt)

整体设置样式
Parameters:
Name Type Attributes Default Description
value object 样式对象
recursive boolean <optional>
false 是否影响孩子样式
Inherited From:
Example
let box1 = new THING.Box();
	let box2 = new THING.Box({parent: box1});
	box1.setStyle({color: 'red'});
	// @expect(box1.style.color[0] == 1);
	// @expect(box1.style.color[1] == 0);
	// @expect(box1.style.color[2] == 0);
	// @expect(box2.style.color == null);

setVisible(value, recursiveopt)

设置visible的状态
Parameters:
Name Type Attributes Default Description
value boolean 是否显示
recursive boolean | ProcessObjectCallback <optional>
false 是否同时影响它的孩子
Inherited From:
Example
// Hide object self only, exclude all children
	object.setVisible(false, false);

	// Hide object(s) but exclude children what name equals to 'stone'
	object.setVisible(false, (obj) => {
		if (obj.name == 'stone') {
			return false;
		}
	});

stopFading()

停止淡入淡出动作。
Inherited From:
Example
object.stopFading();

stopFlying()

停止飞行
Inherited From:
Example
object.stopFlying();

stopMoving()

停止移动
Inherited From:
Example
object.stopMoving();

stopRotating()

停止旋转
Inherited From:
Example
object.stopRotating();

stopScaling() → {boolean}

停止缩放动画
Returns:
boolean - 是否停止成功
Inherited From:
Example
object.stopScaling();

stopUVTransform(slotType) → {boolean}

停止UV变化 主要用于贴图动画
Parameters:
Name Type Description
slotType ImageSlotType 指定纹理类型
Returns:
boolean - 是否停止成功
Inherited From:
Example
object.stopUVTransform(THING.ImageSlotType.Map);

translate(offset, lerpParamopt) → {boolean}

沿三个轴向对物体做偏移
Parameters:
Name Type Attributes Description
offset Array.<number> 三个轴向的偏移 单位米
lerpParam LerpArgs <optional>
插值信息
Returns:
boolean - 是否平移成功
Inherited From:
Example
object.translate([10, 10, 10], {time: 1000})

translateX(distance, lerpParamopt) → {boolean}

沿着自身X轴对物体做偏移
Parameters:
Name Type Attributes Description
distance number 偏移距离 单位米
lerpParam LerpArgs <optional>
插值信息
Returns:
boolean - 是否平移成功
Inherited From:
Example
object.translateX(10, {time: 1000})

translateY(distance, lerpParamopt) → {boolean}

沿着自身Y轴对物体做偏移
Parameters:
Name Type Attributes Description
distance number 偏移距离 单位米
lerpParam LerpArgs <optional>
插值信息
Returns:
boolean - 是否平移成功
Inherited From:
Example
object.translateY(10, {time: 1000})

translateZ(distance, lerpParamopt) → {boolean}

沿着自身Z轴对物体做偏移
Parameters:
Name Type Attributes Description
distance number 偏移距离 单位米
lerpParam LerpArgs <optional>
插值信息
Returns:
boolean - 是否平移成功
Inherited From:
Example
object.translateZ(10, {time: 1000})

traverse(callback)

递归遍历自己和自己的孩子 这个方法会遍历到所有的后代节点(孩子,孩子的孩子等)
Parameters:
Name Type Description
callback function The callback function. 执行遍历时执行的方法
Inherited From:
Example
let parent = new THING.BaseObject();
let child1 = new THING.BaseObject({parent: parent});
let child2 = new THING.BaseObject({parent: parent});
let mark = 0;
parent.traverse((child) => {
		mark++;
});
// @expect(mark == 3)

traverseComponentByType(type, callback)

根据类型遍历查找组件
Parameters:
Name Type Description
type * 组件类型
callback TraverseComponentByTypeCallback 回调函数
Inherited From:
Example
object.addComponent(new MyComponent(), 'myComponent');
	object.traverseComponentByType(MyComponent, (component, name) => {
		console.log(component, name);
	});

trigger(type, condition, data, tagName) → {*}

抛出事件
Parameters:
Name Type Description
type string 事件类型。
condition string | object 事件条件 或 事件数据。
data object | string 事件数据 或 事件标签。
tagName string 事件标签名称。
Returns:
* - 返回一个对象,包含指定类型的事件
Inherited From:
Example
let object = new THING.BaseObject();
 let markTrigger = {};
	object.on('myEvent', function(ev) {
		markTrigger = ev;
	});
	object.trigger('myEvent', { result: true });
 let ret = markTrigger.result;
 // @expect(ret == true);

new THING.Box();

 app.on('test', (e) => {
     console.log('无条件+tag1', e)
 }, 'MyTag1');
 app.on('test', (e) => {
     console.log('无条件+tag2', e)
 }, 'MyTag2');

app.on('test', ".Box", (e) => {
	    console.log('条件+tag1', e)
}, 'MyTag1');
app.on('test', ".Box", (e) => {
	    console.log('条件+tag2', e)
}, 'MyTag2');

// 事件类型 + 事件条件,触发事件。
app.trigger('test', '.Box');
// 事件类型 + 事件数据,触发事件
app.trigger('test', { result: true });
// 事件类型 + 事件条件 + 事件标签,触发事件
app.trigger('test', '.Box', 'MyTag2');
// 事件类型 + 事件条件 + 事件参数,触发事件
app.trigger('test', '.Box', { result: true });
// 事件类型 + 事件条件 + 事件数据 + 事件标签,触发事件
app.trigger('test', '.Box', { result: true },'MyTag2');

// 注意事项:
// 1. 事件标签不能单独使用,否则事件标签和事件条件无法区分。
app.trigger('test', null, 'MyTag2');
// 2. 事件数据兼容了数组的情况,如果传了数组将无法从参数中获取object。
app.trigger('test', '.Box', [{ result: 'r1' },{ result: 'r2' }], 'MyTag2')

unbindSubNode()

解绑子节点。
Inherited From:
Example
let box = new THING.Box();
	box.bindSubNode(car, 'chair');
	box.unbindSubNode();

unloadResource(recursiveopt) → {Promise.<any>}

卸载资源 返回一个Promise对象
Parameters:
Name Type Attributes Default Description
recursive boolean <optional>
true 是否卸载所有孩子的资源
Returns:
Promise.<any> - 返回一个Promise对象
Inherited From:
Example
// 等待物体卸载资源完成
	await object.unloadResource();

uvTransformTo(slotType, value) → {boolean}

开始UV变化
Parameters:
Name Type Description
slotType ImageSlotType 指定纹理类型 (diffuseMap,alphaMap,emissiveMap等)
value LerpArgs 插值参数 参数中需指定UV对象中要变化哪个属性
包含以下四种 {number[]} offset,{number[]} repeat,{number[]} center(number[]),{number} rotation
Returns:
boolean - 是否开始成功
Inherited From:
Example
// Lerp UV offset from [0, 0] to [-1, 0] in 2 seconds by repeat mode
object.uvTransformTo(THING.ImageSlotType.Map, {
	from: { offset: [0, 0] },
	to: { offset: [-1, 0] },
	duration: 2000,
	loopType: THING.LoopType.Repeat,
	times: 3
});

waitForComplete() → {Promise.<any>}

等待物体资源加载完成 返回一个Promise对象
Returns:
Promise.<any> - 返回一个Promise对象
Inherited From:
Example
// 等待物体资源加载完成
	await object.waitForComplete();
	app.camera.fit(object);

worldToLocal(position, ignoreScaleopt) → {Array.<number>}

世界坐标转为相对于父物体的坐标
Parameters:
Name Type Attributes Default Description
position Array.<number> 世界坐标
ignoreScale boolean <optional>
false 转换时是否忽略缩放 默认不忽略
Returns:
Array.<number> - 返回相对于父物体的坐标
Inherited From:
Example
let parentObj = new THING.Object3D({
	position: [0, 5, 0]
});

let childObj = new THING.Object3D({
	localPosition: [0, 10, 0],
	parent: parentObj
});

let localPosition = childObj.worldToLocal([0, 5, 0]);

// print [0, 0, 0]
console.log(localPosition);

worldToSelf(position, ignoreScaleopt) → {Array.<number>}

世界坐标转自身坐标
Parameters:
Name Type Attributes Default Description
position Array.<number> 世界坐标
ignoreScale boolean <optional>
false 转换时是否忽略缩放 默认不忽略
Returns:
Array.<number>
Inherited From:
Example
let worldPos = [5, 10, 0];
let obj = new THING.Object3D({position: worldPos});
let selfPos = obj.worldToSelf(worldPos);
// print [0, 0, 0]
console.log(selfPos);