当前位置: 首页 > Web前端 > JavaScript

Threejs碰撞检测-一口气前进后退、上下楼梯!

时间:2023-03-27 10:11:31 JavaScript

鍘熸枃鍙傝€冩垜鐨勫叕浼楀彿鏂囩珷#threejs纰版挒妫€娴?鍓嶈繘鍚庨€€锛屼竴鍙f皵涓婁笅妤兼锛佺墿浣撹繍鍔ㄢ€斺€斿墠鍚庣鎾炴娴嬩富瑕佷緷闈燫aycaster(origin,direction)灏勭嚎妫€娴嬨€傜墿浣撳墠鍚庣Щ鍔ㄦ椂锛屽疄鏃惰幏鍙栫墿浣搊rigin=target.position.clone()鐨勪綅缃綔涓衡€滃皠绾垮彂灏勭偣鈥濓紝鑾峰彇鐗╀綋鐨勬柟鍚戜綔涓哄皠绾跨殑鈥滃彂灏勬柟鍚戔€濋€氳繃player.getWorldDirection(dir)瀹炴椂銆傚綋鐗╀綋绉诲姩鏃禙orward>0琛ㄧず鍚戝墠锛屽惁鍒欒〃绀哄悜鍚庛€傚鏋滄槸鍚戝悗鐨勶紝閭d箞dir.negate();鏂瑰悜鏄浉鍙嶇殑銆傛晥鏋滃浘GIF鍥剧墖鍙湁4fps锛?0鐢昏川锛屾墍浠ュ緢鍗°€傚惁鍒欏浘鐗囧お澶т簡銆備富瑕佷唬鐮侊紝娉ㄩ噴璇︾粏璇存槑娴佺▼/***JoyStickcontroller-charactercollisiondetection[front|back]*@param{Object3D}target闇€瑕佺鎾炴娴嬬殑绉诲姩鐗╀綋*@param{THREE.Raycaster}raycasterCollision杩愬姩鐗╀綋妫€娴嬪皠绾?@param{Number}intersectDistance妫€娴嬭窛绂伙紝灏忎簬杩欎釜璺濈鎰忓懗鐫€纰版挒*@param{Boolean}recursive鏄惁閫掑綊妫€娴嬪満鏅腑鐨勭墿浣?@returnsBoolean*/functioncheckCollide(target,raycaster,intersectDistance=2,recursive=true){//鏄惁[forward]letisForward=this.js.forward>=0;//鑾峰彇鐩爣褰撳墠浣嶇疆锛屽湪Y杞翠笂鍔犱笂鍥哄畾閲忥紝浠h〃鍨傜洿杞村皠绾垮彂灏勶紙妫€娴嬬鎾烇級浣嶇疆letorigin=target.position.clone().add(newTHREE.Vector3(0,1,0));//鑾峰彇鐩爣鐨勫綋鍓嶆柟鍚憀etdirection=newTHREE.Vector3();//瀹氫箟涓€涓柟鍚戝悜閲弔his.player.getWorldDirection(direction);direction.normalize();this.playerLight.position.x=this.player.position.x;this.playerLight.position.y=this.player.position.y+2;this.playerLight.position.z=this.player.position.z;//濡傛灉鍦ㄣ€愬悗閫€銆戯紝鍙嶈浆妫€娴嬫柟鍚慽f(!isForward){direction.negate();//console.log("movefallback:",direction);}else{//鑱斿悎nsole.log("鍓嶈繘:",鏂瑰悜);}//璁剧疆鍏夌嚎鍙戝皠浣嶇疆raycaster.ray.origin.copy(origin);//璁剧疆鍏夌嚎鍙戝皠鏂瑰悜raycaster.ray.direction.copy(direction);//寮€濮媅beforeandafter]妫€娴嬶細瀵逛簬blender鍒朵綔鐨勬ā鍨嬶紝闇€瑕侀€掑綊閬嶅巻鎵€鏈塩hildren锛屽惁鍒欐棤娉曞疄鐜板皠绾跨鎾炴娴媨[childs],true}letins=raycaster.intersectObjects(this.瀵硅薄锛岄€掑綊锛夛紱if(ins.length){let{distance,object}=ins[0];if(object.name=="stair"){杩斿洖false;}if(distance=oneStairHeight*2){return;}//灏勭嚎鍛戒腑鐨勪綅缃珮浜庣洰鏍囧綋鍓嶄綅缃甕杞翠綅缃珮锛屽彲浠ヤ笂妤糹f(diffY>targetY){//target.position.y=diffY;//鍔ㄧ敾杩囨浮gsap.to(target.position,{y:diffY,ease:"linear",duration:0.1,//濡傛灉杩欎釜寤惰繜鏃堕棿杩囬暱锛宼arget.position.y涓嶄細鍙婃椂鏇存柊锛屾棤娉曟洿鏂板垽鏂负涓婃ゼ姊瘆);console.log("涓婃ゼ姊瑔锔?);}elseif(diffY=oneStairHeight*2){return;}//...涓婁笅妤兼}娣诲姞gsap缂撳姩鍔ㄧ敾锛岃闀滃ご鏇存祦鐣?/p>