laya 克隆精灵(结点)的方法 - 关于Laya.Sprite3D.instantiate的用法
有时候需要克隆精灵,常用的有clone和cloneTo,另外还有一个方法,可以直接加入场景中
先看下该方法的源码
/**
* 创建精灵的克隆实例。
* @param original 原始精灵。
* @param parent 父节点。
* @param worldPositionStays 是否保持自身世界变换。
* @param position 世界位置,worldPositionStays为false时生效。
* @param rotation 世界旋转,worldPositionStays为false时生效。
* @return 克隆实例。
*/
static instantiate(original: Sprite3D, parent: Node = null, worldPositionStays: boolean = true, position: Vector3 = null, rotation: Quaternion = null): Sprite3D {
var destSprite3D: Sprite3D = (<Sprite3D>original.clone());
(parent) && (parent.addChild(destSprite3D));
var transform: Transform3D = destSprite3D.transform;
if (worldPositionStays) {
var worldMatrix: Matrix4x4 = transform.worldMatrix;
original.transform.worldMatrix.cloneTo(worldMatrix);
transform.worldMatrix = worldMatrix;
} else {
(position) && (transform.position = position);
(rotation) && (transform.rotation = rotation);
}
return destSprite3D;
}
看完就很明白了,是封装了一层,还是用了clone()
,只有worldPositionStays为false,后面两个参数才会有用
用法
-
不保持自身世界变换
let scene: Laya.Scene3D = this.scene; let posV3: Laya.Vector3 = new Laya.Vector3(); let tempQua: Laya.Quaternion = new Laya.Quaternion(); let tempQua1: Laya.Quaternion = new Laya.Quaternion(); Laya.Quaternion.createFromYawPitchRoll(0, 0, 0, tempQua); tempQua.cloneTo(tempQua1); let role: Laya.Sprite3D = Laya.Sprite3D.instantiate(Laya.loader.getRes(resName), scene, false, posV3, tempQua1) as Laya.Sprite3D;
-
保持自身世界变换
let scene: Laya.Scene3D = this.scene; let posV3: Laya.Vector3 = new Laya.Vector3(); let role: Laya.Sprite3D = Laya.Sprite3D.instantiate(Laya.loader.getRes(resName), scene) as Laya.Sprite3D; role.transform.position = posV3;