Papervision3Dでウォークスルーの実験中。
背景をつけてみました。
大きい一枚の画像をカメラの角度に合わせて上下左右にスクロールさせてます。
あと、高さ判定処理を組みなおして少しそれっぽく動けるようにしました。
高い所のモデルの下をくぐったり、高い所から落ちたりできます。
背景の追加

背景に使った空画像の全体図はこんな感じ。
手前のくっきりしてる雲だけ
Terragen2でレンダリング・・・というか知らない間に2出てたんだね。
カメラは横に0~360°しか動かないのでその角度と画像のX座標をリンクさせているだけです。
実際は端が切れないように画像を横方向に多めにループさせてます。
横方向は簡単だったんですが、縦方向がカメラから水平線の位置を割り出す必要があって、
今はまだ目分量による簡単な位置合わせしかしていないので正確ではないです。
ちゃんとした水平線の高さの割り出し方を調べるのがベストだと思うんだけど、
物凄い遠くに配置したダミーのDisplayObject3Dが常にカメラの正面(高さは海面)にくるようにして
そのダミーオブジェクトの座標を調べるって方法でもいける気がします。試してないけど・・・
Papervision3DではDisplayObject3D.autoCalcScreenCoords = trueしてから
DisplayObject3D.screenを調べれば基点のスクリーン座標が簡単に調べられるようです。
高さの判定
今までは単純にキャラ上空から真下に飛ばしたレイと地形モデルの最初の交点にキャラを移動させていただけで
モデルの下をくぐったりできなかったんですが、
今回は交差する全ての点の中から次に進める高さを調べているのでそれっぽく動けるようになりました。
(斜面を滑り落ちるような処理は高さ判定の処理とは別物です)
やっている事はだいたいこんな感じです。

基本的にキャラクターの移動前の高さと移動後の高さを比べて
先に進めるか進めないかの判定くらいしかしていません。
先に進めなかったら移動前の位置に戻しています。
高さ判定のコードがそれ以外の処理に混ざってしまっているのでコードは割愛しますが
内容はほとんど上の図そのままです。if文だらけになるのはしょうがないのかな。。
こんなに条件が多くなってしまったのは高いところから落下する処理があった為で、
常に足が地面に接地しているだけなら
- 一番近い高さに移動させる
- 高さが違いすぎたら元に戻す
この処理だけでもなんとかなりそうな気がします。
条件分岐が多いとはいえ交差判定は今まで通り1回だけで済んでいるので
処理はたいして重くならずに済みました。
ただ高さだけで判定していて正面に壁があるかどうかはまったく調べていないので、
ゲームでよくある壁に沿って滑るような動きができないし、
キャラクタ―が壁に半分めり込んだりします。
複雑な地形での壁の判定はどうしようかな・・・
最近のコメント