Home > 成長期 > 第四十一回 基本をおろそかにするのが、ダメゲームプログラマーの基本

第四十一回 基本をおろそかにするのが、ダメゲームプログラマーの基本

各頂点の座標の情報を持ってきて、
ワールド座標に変換し、
ある平面とある物体の一点とで外積を求め、
表と裏で判断し、
裏ならば当っていると判別する。

これが3Dゲームの当り判定の基本ですね。

判別したい物体の当りが大きいならば、
全ポリゴンの頂点情報を持ってこなくても、
1~2個ほどポリゴン情報を飛ばしてもかまいません。
処理も軽くなりますし。

ちなみにこれは現在、3Dポリゴンのゲームを作っている
ミナミの口から発せされたものであって、当時のミナミは
当り判定のプログラムを組んでも、物体が通り抜けていく
状態でした。

障害物をなくしてやろうかと本気で考えました。

当り判定の基本、方法は理解していましたし、
プログラムをなんど見直しても間違いが見当たらない。
完全に行き詰って、一週間ぐらい停滞を余儀なくされました。

現在もそうですが、行き詰ったら気分転換に違う部分をやり、
頭をいったん初期化します。
朝に日記を書くのと似たような事で、余計な思い込みをリセット
するわけです。これが意外と効果的です。

というわけで、敵の表示でもやろうかなと、ポリゴンのデータを
見ていたのですが、どうもおかしい。
ツールから吐き出された頂点データと、表示されている頂点データ
の位置が違う。

「そんなわけがないだろう」とミナミは考えました。

座標の位置が違うなら、画面にその物体が綺麗に映るわけがない。
何がおかしいんだ?と悩みました。

ミナミ本人の頭がおかしいだけでした。

拡大しているんだから位置が違うのは当然です。
ワールド座標に直していますし、データでの情報と表示の情報が
違うのは当然なわけです。

どうやら、3Dポリゴンの基本を理解していなかったようです。

当りが発生しなかったのは、拡大してない情報を持ってきていたので
あまりにも小さかったという事と、ワールド座標に直していなかった
ので、別の場所に当りが発生していたからなんですね。

それに気付いたミナミは、さっそく頂点情報を修正し、
当りを楽しみにして障害物に自機を当てに行きました。

今度は動かねええええぇぇぇぇぇぇ!

当るようにはなったのですが、当り判定しまくり状態。
いちど当ったら、当りまくりで確変に突入。

誰もが一度は経験したと信じています。

この場合の処理ですが、

1.当ってからしばらくは当り判定が起こらないようにタイマーを持つ
2.当りが発生しない所まで移動させる
3.自機の移動時の方向ベクトルと、
  障害物の外積の面ベクトルの角度を見て判別する

1はゲームが強制スクロールなので、
すぐに抜けてしまう事になり、あまり意味がありません。

2はその場所に障害物があるかどうかが判別する事が、
当時のミナミにはプログラムを想像できなかったので無理です。

3は技術的に当時のミナミには(略)

少しはチャレンジしろよ!当時の俺!

というわけで、技術と上昇志向が足らなかった当時のミナミ
取った策はというと、

当ったら障害物消す!ついでにしばらく自機の動きも止める!

小学生でも思いつく完璧な仕様ですね。

しかし、そこまでが当時のミナミの技術の限界なので仕方が
ありません。敵を知り、己を知る事が大事です。

しかし、ここで問題が発生します。

このゲームにはレースゲームなのに敵がいます。
自機が止まっている間に敵の動きはどうしましょう。

止めたら変なバグが出そうですし、
動かしていたらハマそうですし、なかなか難しいです。

この話は次回に続きます。
それではまた次回で。

                        (その手があったのか!編へ)

Comments:0

Comment Form
Remember personal info

Home > 成長期 > 第四十一回 基本をおろそかにするのが、ダメゲームプログラマーの基本

Search
Feeds
Meta

Return to page top