実現したいこと
- 前後左右の壁に応じて、接触しても動けるようにしたい。
発生している問題・分からないこと
壁と接触しても貫通はしなくはなりましたが、今度は操作が全く効かなくなりました。
具体的には、
- 前方に接触した際、動ける範囲は左右と後ろになるが、その場で固まってしまう。
後方はその逆。 - 同様に右側に接触した際、動ける範囲は前後と左になるが、同じく固まってしまう。
左側はその逆。
といったようになります。
該当のソースコード
JavaScript
1if(collisions){ 2 if(playdirect.z < 0){ //前側 3 if(max.z < max2.z && velocity.z < 0){direction.z = 0} 4 flags[0] = true; 5 flags[1] = false; 6 7 8 } else if(playdirect.z > 0){ //後ろ側 9 if(min.z > min2.z && velocity.z > 0) {direction.z = 0} 10 flags[1] = true; 11 flags[0] = false; 12 13 } 14 if(playdirect.x < 0){ //右側 15 flags[2] = true; 16 flags[3] = false; 17 18 19 } 20 if(playdirect.x > 0){ //左側 21 flags[3] = true; 22 flags[2] = false; 23 24 } 25 if(max.x < max2.x && velocity.x < 0) {direction.x = 0} // 左右壁 26 if(min.x > min2.x && velocity.x > 0) {direction.x = 0} 27 } else { 28 flags[0] = flags[1] = flags[2]= flags[3] = false; 29 }
JavaScript
1 if(!flags[0] && !flags[1] && !flags[2] && !flags[3]){ 2 controls.moveForward(-velocity.z * delta); 3 controls.moveRight(-velocity.x * delta); 4 } 5 if(flags[0] && (moveR || moveL)){ //前側なら 6 controls.moveRight(-velocity.x * delta); 7 if(moveB){ 8 controls.moveForward(-velocity.z * delta); 9 } 10 if(moveF && (moveR || moveL)){ 11 controls.moveRight(-velocity.z * delta) 12 } 13 14 } else if(flags[1] && (moveR || moveL)){ //後ろ側なら 15 controls.moveRight(-velocity.x * delta); 16 if(moveF){ 17 controls.moveForward(-velocity.x * delta); 18 } 19 if(moveB && (moveR || moveL)){ 20 controls.moveRight((-velocity.x / 10) * delta) 21 } 22 }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
挙動が怪しいが、前方のみ壁に接触した際、後ろに動けるようにはなるがスムーズに動かない。
補足
特になし
回答2件
あなたの回答
tips
プレビュー