前回Alternativa3D(A3D7.7)でJiglibFlashを使えるところまで行ったので、今回はキャラクタ用コリジョンを作ってみます。
最初に考えていたのは、回転しないようにした縦長のカプセルコリジョンを作って歩く方向に力を加えていくものだったんですが、実際やってみると設定が悪いせいか動くカプセルの衝突判定がなんだかおかしい。他のボックス・球・カプセルとぶつかった時にピクピクしたり簡単にすり抜けたり。設定で何とかならないか色々試してみたもののなかなか改善できなかったので、結局動くカプセルはなるべく使わないようにする事にしました。カプセル以外のコリジョンが動かないカプセルにぶつかったときは問題なかったんだけどね。
色々と試行錯誤しつつ決めたキャラクタの処理
最初に考えていたのは、回転しないようにした縦長のカプセルコリジョンを作って歩く方向に力を加えていくものだったんですが、実際やってみると設定が悪いせいか動くカプセルの衝突判定がなんだかおかしい。他のボックス・球・カプセルとぶつかった時にピクピクしたり簡単にすり抜けたり。設定で何とかならないか色々試してみたもののなかなか改善できなかったので、結局動くカプセルはなるべく使わないようにする事にしました。カプセル以外のコリジョンが動かないカプセルにぶつかったときは問題なかったんだけどね。
色々と試行錯誤しつつ決めたキャラクタの処理
- 回転しない球体コリジョンを用意する。
- 必要ならキャラクタのメッシュと連携させる。一人称視点ならコリジョンだけで。
- キー入力で前後左右に移動。ジャンプもできるようにする。
- 必要ならマウスドラッグで視点を動かす。
- キャラクタの視線ベクトルと垂直ベクトルの外積で水平横方向のベクトルを作り、そこから水平前方向のベクトルも作って前後左右の移動処理に使う。
- 視線が真上か真下を向いていると上記の計算ができなくなるので角度は制限する。
- 自分のコリジョンが周囲のコリジョンとぶつかっているか、どの角度で触れているかをチェックして、ジャンプできるか判定する。(空中や絶壁でのジャンプをさせないため)
- 摩擦があると壁に接触した状態でのジャンプが難しいため0にする。その代わり毎フレーム水平方向のみ移動量を減退させて摩擦っぽくさせる。
- 摩擦を0にした事でちょっとした坂もずるずる滑ってしまう為、足元がゆるい傾斜+接地中のみ無重力にして滑らないようにする。









