ゲームの開発には何を使用していますか? エンジンまたはグラフィックス ライブラリ? グラフィック ライブラリ、グラフィック エンジン、およびゲーム エンジンの 3 つのレベルが基本的にあります (私はそれらについて考えるのが好きです)。
グラフィックス ライブラリは、OpenGL や DirectX など、可能な限り低レベルのものです。地形を描きたいときは、三角形のメッシュとして描き、それらの三角形の頂点などを定義します。
グラフィックス エンジンはその上の 1 つのレイヤーです。それらの例 (少なくとも C++ の場合) は、Ogre3D、Horde3D、および Irrlicht です。それらは多くの下位レベルのコマンドを処理し、より上位レベルの観点からグラフィックスに集中できるようにします。
ゲームエンジンは、グラフィックス関連のほとんどすべてを処理します。これら (再び C++) の例は、Unity と UDK です。彼らは通常、あなたのために多くのゲームプログラミングを行うことができます. おそらく、モデリング プログラム (3dsmax など) で地形を描画し、それを何らかの形式にエクスポートすると、エンジンがそれを丸呑みして、それを処理する方法を正確に認識します。
私は 3 つすべてを試しましたが、グラフィック ライブラリが最も興味深いと思います。ただし、ゲームを作るのにおそらく最も時間がかかります。また、より多くの数学 (線形代数) も必要です。
地形との衝突検出に関する限り。その地形を構成する三角形について知っておく必要があります。ゲーム エンジンを使用している場合、地形のメッシュとキャラクターのメッシュをある種の「シーン ノード」に格納できるはずであり、衝突検出は自動的に処理されます。ただし、自分ですべてを処理する場合は、これを行うための一般的なアルゴリズムが多数あります。
- バウンディング ボックス: キャラクターが人 (または動物など) の形をしていても、それらをボックスとして扱い、そのボックスが地形を構成するメッシュの三角形と交差するタイミングを確認します。
- Bounding Sphere: キャラクターを球体として扱います。これは、球体が衝突した場合にはるかに見やすくなるためです。「球の中心から他のメッシュまでの距離」で「球の半径」を確認するだけです。次に、その球が衝突している場合は、キャラクターをより正確に表す小さな球に分割します。そこから 3 回または 4 回反復するか、キャラクターを表現したいだけ正確に再帰します。ただし、ゲームのすべてが高速で高速である必要があることを忘れないでください。そのため、再帰を制限します。
境界球の衝突検出に関する優れた記事
基本的に、バウンディング ボックスで表されるキャラクターが、衝突検出を必要とする地形を歩き回ることができるサンプル OpenGL プログラムを作成しました。それがどのように機能するかについてもっと興味がある場合はお知らせください。
落下によるダメージにはいくつかの方法で対処できます。
- キャラクターが飛んでいない場合は、単純なステート マシンを使用できます。彼らが空中に入ったら、状態を「IN AIR」に変更し、ゲームの外観が実行されている間、タイマーを設定して、空中にいる時間を追跡します。彼らが空中にいる時間が長すぎる場合は、そこにいる時間に基づいてさまざまな量のダメージを計算してください。
- より正確な方法は、キャラクターの y 速度を追跡することです。これは実生活に正確です。ゆっくりと落下している場合は、落下ダメージがあっても意味がありません。速く転ぶと、速く進むほど怪我をします。だから、falling_speed をダメージに関連付けるある種の方程式を考え出してください。次に、地面に着地したら、ステート マシンを「ON_GROUND」に戻し、fall_speed (おそらく y_velocity) を確認します。