警告:以下是凭经验确定的。
如果您正在Aframe中编写应用程序,请注意您不需要在html中包含three.js lib,因为AFrame附带了它自己的three.js版本和非Aframe您的应用程序的某些部分也可以使用此版本的three.js。事实上,你不仅不需要它,你绝对不应该 包含它。
如果您包含自己的three.js版本,那么AFrame将使用它构建的版本。虽然大部分时间不会导致问题,但可能导致不可预测的结果。对于Instance,我正在混合Aframe-master.js v0.5,它假设是three.js v84,而且还是src'在three.js v85中我收到了以下错误消息:
Uncaught Error: `Entity.setObject3D` was called with an object that was not an instance of THREE.Object3D.
at HTMLElement.value (aframe-master.js:72729)
at aframe-master.js:66470
at aframe-master.js:48132
at ObjectLoader.parse (Three.js:32979)
at Three.js:32938
at XMLHttpRequest.<anonymous> (Three.js:29098)
经过大量研究后,我确定这是因为在three.js v85中他们dropped the blendCharacter object但是aframe-master v0.5是针对three.js v84构建的,它仍然拥有它并假设它在那里
我运行的混合版本有一段时间了,所以这是一个微妙的错误。如果你确实得到了一个情况,你肯定会得到一些其他的错误。我只记录这个,因为我花了半天的时间试图解决这个问题,也许我可以帮助别人解决问题。
答案 0 :(得分:1)
如果使用AFrame,请不要在html中包含three.js:
<!doctype html>
<html lang="en">
<head>
<title>A-frame controller test</title>
<meta charset="utf-8">
<link rel="shortcut icon" href="">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<script src="lib/aframe-master.js"></script>
</head>
<body>
<script src="https://code.jquery.com/jquery-3.1.1.js" integrity="sha256-16cdPddA6VdVInumRGo6IbivbERE8p7CQR3HzTBuELA=" crossorigin="anonymous"></script>
<script src="lib/Three.js"></script> <!-- remove this -->
<script src="lib/grab.js"></script>
<script src="js/main.js"></script>
<a-scene>
在控制台上查看并确保Aframe和three.WebGlRenderer使用相同的版本:
坏(混合三个.js 0.84和0.85):
A-Frame Version: 0.5.0 (Date 03-05-2017, Commit #31d05b0)
aframe-master.js:76936 three Version: ^0.84.0
aframe-master.js:76937 WebVR Polyfill Version: dmarcos/webvr-polyfill#a02a8089b
THREE.WebGLRenderer 85dev
好(到处都是三.js v.84):
A-Frame Version: 0.5.0 (Date 03-05-2017, Commit #31d05b0)
aframe-master.js:76936three Version: ^0.84.0
aframe-master.js:76937WebVR Polyfill Version: dmarcos/webvr-polyfill#a02a8089b
aframe-master.js:24581 THREE.WebGLRenderer 84