|
const unityInstance = UnityLoader.instantiate("unityContainer", "Build/Build.json");
|
|
let isCameraReady = false;
|
|
let isDetectionManagerReady = false;
|
|
let gl = null;
|
|
|
|
function cameraReady(){
|
|
isCameraReady = true;
|
|
gl = unityInstance.Module.ctx;
|
|
}
|
|
|
|
function detectionManagerReady(){
|
|
isDetectionManagerReady = true;
|
|
}
|
|
|
|
function createUnityMatrix(el){
|
|
const m = el.matrix.clone();
|
|
const zFlipped = new THREE.Matrix4().makeScale(1, 1, -1).multiply(m);
|
|
const rotated = zFlipped.multiply(new THREE.Matrix4().makeRotationX(-Math.PI/2));
|
|
return rotated;
|
|
}
|
|
|
|
AFRAME.registerComponent('markercontroller', {
|
|
schema: {
|
|
name : {type: 'string'}
|
|
},
|
|
tock: function(time, timeDelta){
|
|
|
|
let position = new THREE.Vector3();
|
|
let rotation = new THREE.Quaternion();
|
|
let scale = new THREE.Vector3();
|
|
|
|
createUnityMatrix(this.el.object3D).decompose(position, rotation, scale);
|
|
|
|
const serializedInfos = `${this.data.name},${this.el.object3D.visible},${position.toArray()},${rotation.toArray()},${scale.toArray()}`;
|
|
|
|
if(isDetectionManagerReady){
|
|
unityInstance.SendMessage("DetectionManager", "markerInfos", serializedInfos);
|
|
}
|
|
}
|
|
});
|
|
|
|
AFRAME.registerComponent('cameratransform', {
|
|
tock: function(time, timeDelta){
|
|
|
|
let camtr = new THREE.Vector3();
|
|
let camro = new THREE.Quaternion();
|
|
let camsc = new THREE.Vector3();
|
|
|
|
this.el.object3D.matrix.clone().decompose(camtr, camro, camsc);
|
|
|
|
const projection = this.el.components.camera.camera.projectionMatrix.clone();
|
|
const serializedProj = `${[...projection.elements]}`
|
|
|
|
const posCam = `${[...camtr.toArray()]}`
|
|
const rotCam = `${[...camro.toArray()]}`
|
|
|
|
if(isCameraReady){
|
|
unityInstance.SendMessage("Main Camera", "setProjection", serializedProj);
|
|
unityInstance.SendMessage("Main Camera", "setPosition", posCam);
|
|
unityInstance.SendMessage("Main Camera", "setRotation", rotCam);
|
|
|
|
let w = window.innerWidth;
|
|
let h = window.innerHeight;
|
|
|
|
const unityCanvas = document.getElementsByTagName('canvas')[0];
|
|
|
|
const ratio = unityCanvas.height / h;
|
|
|
|
w *= ratio
|
|
h *= ratio
|
|
|
|
const size = `${w},${h}`
|
|
|
|
unityInstance.SendMessage("Canvas", "setSize", size);
|
|
}
|
|
|
|
if(gl != null){
|
|
gl.dontClearOnFrameStart = true;
|
|
}
|
|
}
|
|
});
|
|
|
|
AFRAME.registerComponent('copycanvas', {
|
|
tick: function(time, timeDelta){
|
|
const unityCanvas = document.getElementsByTagName('canvas')[0];
|
|
unityCanvas.width = this.el.canvas.width
|
|
unityCanvas.height = this.el.canvas.height
|
|
}
|
|
});
|
|
|