Jelajahi Sumber

WebXR: optional `onLoad` callback when loading hands or controllers (#27544)

* WebXR: add onLoad callback for XRHandMeshModel

* add onLoad for XRControllerModelFactory
hybridherbst 1 tahun lalu
induk
melakukan
d25f42759d

+ 6 - 1
examples/jsm/webxr/XRControllerModelFactory.js

@@ -206,11 +206,12 @@ function addAssetSceneToControllerModel( controllerModel, scene ) {
 
 class XRControllerModelFactory {
 
-	constructor( gltfLoader = null ) {
+	constructor( gltfLoader = null, onLoad = null ) {
 
 		this.gltfLoader = gltfLoader;
 		this.path = DEFAULT_PROFILES_PATH;
 		this._assetCache = {};
+		this.onLoad = onLoad;
 
 		// If a GLTFLoader wasn't supplied to the constructor create a new one.
 		if ( ! this.gltfLoader ) {
@@ -247,6 +248,8 @@ class XRControllerModelFactory {
 
 					addAssetSceneToControllerModel( controllerModel, scene );
 
+					if ( this.onLoad ) this.onLoad( scene );
+
 				} else {
 
 					if ( ! this.gltfLoader ) {
@@ -264,6 +267,8 @@ class XRControllerModelFactory {
 
 						addAssetSceneToControllerModel( controllerModel, scene );
 
+						if ( this.onLoad ) this.onLoad( scene );
+
 					},
 					null,
 					() => {

+ 3 - 1
examples/jsm/webxr/XRHandMeshModel.js

@@ -4,7 +4,7 @@ const DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-pro
 
 class XRHandMeshModel {
 
-	constructor( handModel, controller, path, handedness, loader = null ) {
+	constructor( handModel, controller, path, handedness, loader = null, onLoad = null ) {
 
 		this.controller = controller;
 		this.handModel = handModel;
@@ -74,6 +74,8 @@ class XRHandMeshModel {
 
 			} );
 
+			if ( onLoad ) onLoad( object );
+
 		} );
 
 	}