実現したいこと
- リストCANNON JSのBox3オブジェクトから、AABBを動的に判定したい。
発生している問題・分からないこと
一応やり方自体は知ってはいるのですが、なぜかcomputeAABBが関数ではないというエラーが出てきてしまい実装ができないでいます。
それさえ使えれば、動的に取得ができるのですが、それ以外の方法が思いつきません。
該当のソースコード
Javascript
1const playshape = new CANNON.Box(new CANNON.Vec3(8,21,3.5)); 2let min,max; 3class ModelLoad{ 4 constructor(scene,helper,scale,position){ 5 this.scene = scene; 6 this.helper = helper; 7 this.scale = scale; 8 this.position = position; 9 } 10 11 loadmodel(path){ 12 const Loader=new MMDLoader(); 13 const box = new THREE.Box3(); 14 Loader.load(path,(object)=>{ 15 mmdmesh = object; 16 mmdmesh.scale.set(this.scale,this.scale,this.scale); 17 mmdmesh.position.set(this.position.x,this.position.y,this.position.z); 18 mmdmesh.traverse((child) =>{ 19 if(child.isMesh && child.geometry){ 20 if(!child.name.includes("剛体")){ 21 child.geometry.computeBoundingBox(); 22 const childbox = child.geometry.boundingBox.clone(); 23 childbox.applyMatrix4(child.matrixWorld); 24 box.union(childbox) 25 } 26 } 27 }); 28 this.scene.add(mmdmesh); 29 playbody = new CANNON.Body({ 30 mass:1, 31 position:new CANNON.Vec3(0,0,0), 32 shape:playshape 33 }); 34 world.addBody(playbody); 35 }); 36 37 38 } 39 updatePositionAndRotation(camera, camdirect, camposition, distance=-1.3,bodys) { 40 if (!mmdmesh){ 41 return; 42 } else { 43 min = playbody.aabb.lowerBound; 44 max = playbody.aabb.upperBound;//これは取得できるが、値が変化しない。プレイヤー側は常に動いているのでこれでは困る。 45 console.log(min,max) 46 } 47} 48 49window.addEventListener("DOMContentLoaded",(e)=>{ 50Mmdload.loadmodel(`../fpsもどき/(準標準ボーン)水内式由乃Ver1.00.pmx`); 51 52function animate(){ 53requestanimationFrame(animate); 54Mmdload.updatePositionAndRotation(camera,camdirect,camposition,1.3,wallGeometry); //wallGeometryは当たり判定対象の壁オブジェクト 55} 56animate(); 57 58});
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
- console.dirでCANNONとplaybodyのプロパティや関数を検索して、computeAABBがあるかどうか調べた。
- こちらのサイトを見てどういう仕組みなのかを学んだ。
https://developer.mozilla.org/ja/docs/Games/Techniques/3D_collision_detection
- CHATGPTでAABBをどう実装すればよいかを聞いた
補足
cannon-esは0.2.0を利用しています。
https://cdn.jsdelivr.net/npm/cannon-es@0.20.0/+esm

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。