ゲーム開発

プロおよび独立系ゲーム開発者向けのQ&A

2
エンティティシステムでの衝突の検出と応答
ESでもっと楽しく... 現在、私はいくつかのシステムを持っています: レンダラー(レンダリング可能属性、変換属性) モーション(移動可能な属性、変換属性、レンダリング可能な属性[境界ボックスなど]) 入力(InputReceiver属性) 等 衝突検出を追加しています。最初に考えたのは、衝突を実行する新しいシステムを追加することでした。これは、から分離され、これを維持するために私には理にかなってMotionカメラ等、霧、 - -移動またはが必ずしもアニメーション化されていることではないすべてのものは、衝突検出に関与するのでシステムが、と思われるCollisionとはMotion相互に依存しています。 Motionエンティティを移動する場合、変換はで検証する必要がCollisionあり、移動はキャンセルまたは調整(バウンス、壁での停止など)する必要があります。 別の方法として、衝突オブジェクトへの参照を保持するCollidable属性を作成する方法があります-kd-tree、octreeなどは、互いに衝突する可能性のあるエンティティ間で共有されます。Motionシステムは、その属性をチェックし、確認したり、動きを調整するためにそれを使用します。 コードの観点から見ると、これは許容できる解決策です。ただし、ECSアーキテクチャの観点からMotionは、Movable属性を持つすべてのエンティティに適用されないロジックをシステムにプッシュしているようです。 私はまた、動きベクトルを格納することができMovable、属性、および持っているColliderシステムは調整しTransform、必要に応じて、それは間の機能の重複を伴うだろうMotionとCollider、またはからのコールバックColliderへのMotionバウンス/反射などのための衝突場所と表面データに関するいくつかのデータを持ちます。 これは「特別なケースハック」という見出しに該当する可能性がありますが、大量のエッジケースコードを作成せずにこれを処理したことがある人から入力を受け取りたいと思います。 質問 モーションシステムと衝突システムがお互いの知識を必要とするように思われる場合、それらのシステム間の密結合を回避する良い方法は何ですか?

4
SDLのトラップマウス
ユーザーのマウスをゲーム内にトラップするにはどうすればよいですか?フルスクリーンのゲームではありませんが、ユーザーがマウスを画面外にドラッグできないようにしたいです。 マウスとSDL_WarpCursorの座標を確認してウィンドウ内で(手動で)確認する必要がありますか、それとも自動的な方法がありますか? ありがとうございました。
12 sdl  input  mouse 

2
Entity System Frameworkのタイルマップ?
私はEntity System Frameworks、特にArtemisについて読んでいます。私に合っているかどうかを判断しようとしています。私はタイルベースの2Dピクセルアートゲームに厳密に取り組んでいますが、これほどリソース集約型になるとは思いません。過去に多くの継承を伴う標準OOPを常に使用していました。 Entity System Frameworkの現在の理解(まだ完全に把握しているかどうかはわかりません): エンティティはIDに他なりません コンポーネントは、エンティティコンポーネントプールに追加されるダムデータにすぎません システムは、システムコンポーネントシグネチャに一致するすべてのエンティティを処理するために、世界に接続される更新機能です 私の理解が正しければ、このフレームワークにタイルマップとAIビヘイビアツリーを追加する概念化にかなり苦労しています。今後AIについてお聞きします。 このフレームワークにタイルマップを組み込む必要がありますか?または、タイルマップエディターで簡単に生成できるように、個別に保持する必要がありますか? タイルマップをこのフレームワークに組み込む必要がある場合、各タイルは異なるエンティティですか?タイルマップはシステムですか?それとも、タイルマップ自体は、それから構築された継承を持つ単一のエンティティですか? タイルマップが独立している場合、外部タイルマップに対してエンティティを衝突検出する最良の方法は何でしょうか? 私がリストした複数のオプションが正しいかもしれないことを理解していますが、誰かが過去にこれをやったことがあるなら、彼らは私の混乱にいくらかの光を当てることができるかもしれません。たぶん私が考えていない別の選択肢がありますか? ありがとうございました。

1
ゲームデザイナーとアーティスト間のコミュニケーションのベストプラクティス
アイデアを共有したり、アーティストにアイデアを伝えたりするのに苦労しています。彼らは私を助けてくれるお金がないので、私が考えていることを理解しようとして時間を無駄にしたくありません。そして、私の安っぽいスケッチだけでは十分ではないようです。 アーティストとどのようにコミュニケーションを取り、アセットを作成しますか?一般的にどのようなテンプレートが使用されますか?キャラクター、アセット、背景を定義するためのベストプラクティスとテンプレートを探しています。
12 art 

5
「チャンス」ビデオゲームの仕組みの実用的なバランス
私は長年小さなゲーム開発者およびデザイナーでしたが、最近、より大きなプロジェクトのために、より真剣な設計ドキュメントの作業を開始しました。 私が直面している共通のテーマは、RPGメカニズムの「チャンス」に関して不均衡です。クリティカルストライクチャンス。ヒット/ダッジ/ミス/パリー/ブロックのチャンスなど。現代のRPGゲームの最大の問題は、ヘイスト(攻撃速度)を考慮することです。これは、他の基本メカニズムと非常に激しく混ざり合うためです。明らかに、プレイヤーが攻撃する回数が増えると、間接的にクリティカルストライクまたはヒットの「レート」が増加します。これは大きなアンバランスを生み出し、ほとんどの解決策は速攻を制限するか、リターンの減少を利用するか、大きなステータスの増加を殺すという形で提供されます。 デザイナーでありプレイヤーである私は、これが問題に対処する健全な方法だとは思いません。これは「楽しい」ソリューションではありません。最近、ゲーマーは、Diablo3のこのHasteの問題に対するBlizzardの回答を見て、ほとんどすべてのアイテムの統計の半分を増やしました。 実用的な例を次に示します。 50%の確率でクリティカルストライク、1秒あたり1回の攻撃= 1秒あたり平均0.5回のクリティカルストライク 50%の確率でクリティカルストライク、1秒あたり2回の攻撃=平均1秒あたり1回のクリティカルストライク 2番目の状況は、クリティカルストライクチャンスだけを増やすよりもはるかに有利です。なぜなら、DPSの単位あたりにより多くの数字(またはミスチャンスメカニックの観点からヒット)が表示されるだけでなく、より多くヒットし、 Proc Chanceメカニズムを使用したゲームにも利点があります。より複雑なゲームでは、内部クールダウンと統計情報の相互比較によってそのようなもののバランスが取られますが、多くの場合、Hasteが非常に強力な統計情報であることに変わりはありません。 代わりに、レートを使用して天気を決定するか、統計値の重み、キャッピング、およびクールダウンに対して何かが起こるかどうかが実用的ですか? 私の簡単な例は次のとおりです。 クリティカルストライクRATE =クリティカルチャンス/攻撃/秒 結果は、基本的に単純な統計量システムです。このようなprocチャンスのメカニックはHasteの恩恵をまだ受けていますが、バランスを反映するために攻撃と能力のダメージ出力を変更する方が簡単かもしれません。これにより、ゲーム内の楽しい速攻メカニクスが維持され、プレイが楽しくなります。また、遅い武器の能力やプロシージャだけではなく、遅い攻撃ビルドの深さを増やします。 これは近視眼的なソリューションですか?「ヘイスト」キャラクターのビルドを制限したり罰したりしない、現在市場に出回っているゲームの実例はありますか?

3
Node.jsのリアルタイムマルチプレイヤーゲームの設計原則
私は、クライアント/サーバーゲーム内プロトコルの設計と最適化におけるレイテンシ補償方法と呼ばれるYahn Bernierの2001年の論文から改編されたマルチプレイヤーネットワーキングに関する Valveの記事を読んでいます。socket.ioを介してクライアントに接続されたnode.jsサーバーを使用してリアルタイムのマルチプレイヤーゲームを作成していますが、以下に詳述する原則に関していくつか質問があります。 エンティティ補間 [補間]は、サーバーの更新をバッファリングし、それらのギャップをスムーズに補間して再生することにより、これが通常もたらす不安定な動きを防ぎます。また、パケット損失によるグリッチから保護することもできます。 クライアント側の予測 予測とは、サーバーが確認するのを待たずにローカルプレーヤーのアクションの効果をクライアントが予測するという概念です。エンティティの予測状態は、一致または不一致が検出されるまで、サーバーコマンドが到着するたびにサーバーコマンドに対してテストされます。 遅れ補償 ラグ補正は、コマンドが送信されたときにプレーヤーが見たものを見るために、[ユーザー入力]を処理するときにプレーヤーの待ち時間を使用してサーバーが巻き戻し時間を使用するという概念です。遅延補償は、予測と組み合わせることで、ネットワークの遅延を攻撃者の観点からほぼ排除する程度まで抑えるのに役立ちます。 原則はUDPに適用されるようにTCPにも適用されますか?また、実装に違いはありますか?エンティティの内挿はパケット損失から保護する必要はないが、それについてはそれが必要であることがわかります。 UDPとNode.jsを使用して、サーバーとWebブラウザー間で通信することもできますか? このペーパーは10年以上前のものであるため、これらの原則は現在も使用されていますか、または他の技術が登場していますか? どんな助けでも大歓迎です。

4
OpenGL ES 2.0でのジオメトリのインスタンス化
OpenGL ES 2.0でジオメトリのインスタンス化を行うことを計画しています。基本的に、同じジオメトリ(椅子)をシーンで1000回レンダリングする予定です。 OpenGL ES 2.0でこれを行う最良の方法は何ですか? モデルビューmat4を属性として渡すことを検討しています。属性は頂点データごとであるため、同じ三角形の各頂点に対してこの同じmat4を3回渡す必要があります(モデルビューは三角形の頂点全体で一定のままなので)。 これは、GPUに送信される多くの追加データに相当します(2つの追加頂点* 16フロート*(三角形の数)追加データの量)。 または、三角形ごとに一度だけmat4を送信する必要がありますか?しかし、属性は「頂点ごと」のデータとして定義されているため、属性を使用してどのように可能ですか? OpenGL ES 2.0でインスタンス化を行うための最良かつ効率的な方法は何ですか?

3
2Dグリッドマップでの道路/河川の生成
これは初心者の質問ですが、ここにそれがあります: 私のマップは2Dグリッドであり、道路と川を生成したいです。開始点から終了点までのルートは、タイル数で最適なルートであってはなりません。代わりに、一定レベルのランダム性(ターン)が必要です。 この種のものに標準的なアルゴリズムはありますか? 乾杯! 更新: これは、グリッド上の重みで遊んで、jgraphtライブラリを使用して最短経路アルゴリズム(Bellman-Ford)を適用した結果です。結局、ドーナツの答えに行きました。 http://pastebin.com/AGQGK5ik

1
kdツリーの交差ロジックとは何ですか?
KDツリーを実装する方法を見つけようとしています。 エリクソンによる「リアルタイム衝突検出」の322ページ リンクをクリックしたときにGoogleブックのプレビューで表示できない場合に備えて、テキストセクションを以下に示します テキストセクション 関連セクション: 光線または有向線分とkdツリーの交差の背後にある基本的な考え方は簡単です。線はノードの分割平面と交差し、交差のt値が計算されます。tが線の間隔(0 <= t <= tmax)内にある場合、線は平面にまたがり、ツリーの両方の子が再帰的に下降します。そうでない場合、セグメントの原点を含む側のみが再帰的にアクセスされます。 だからここに私が持っているものがあります:(レタリングが表示されない場合、新しいタブで画像を開きます) 論理ツリー オレンジ色の光線が3Dシーンを通過しています。xは平面との交差を表します。左から、光線が当たります: シーンを囲むキューブの前面、 (1)分割面 (2.2)分割面 シーンを囲むキューブの右側 しかし、上記のEricsonの基本的な説明に素直に従うと、次のようになります。 分割面に対してテストします(1)。光線は分割面(1)に当たるため、分割面(1)の左右の子は次のテストに含まれます。 分割面(2.1)に対してテストします。レイは実際にその平面にぶつかるので(右に向かって)、両方の子が次のレベルのテストに含まれます。(これは直感に反します-最下位ノードだけを後続のテストに含めるべきではありません) オレンジ色の光線がシーンを正しく通過したときに何が起こるかを説明できますか?

1
SSAO実装で望ましい結果が得られない
遅延レンダリングを実装した後、このチュートリアルを使用してSSAO実装を試してみました。残念ながら、SSAOのように見えるものは何も得られません。私の結果を以下で見ることができます。 奇妙なパターンが形成されており、オクルージョンシェーディングが必要な場所(つまり、オブジェクト間および地面)がないことがわかります。私が実装したシェーダーは次のとおりです。 #VS #version 330 core uniform mat4 invProjMatrix; layout(location = 0) in vec3 in_Position; layout(location = 2) in vec2 in_TexCoord; noperspective out vec2 pass_TexCoord; smooth out vec3 viewRay; void main(void){ pass_TexCoord = in_TexCoord; viewRay = (invProjMatrix * vec4(in_Position, 1.0)).xyz; gl_Position = vec4(in_Position, 1.0); } #FS #version 330 core uniform …

2
ユーザーなしでゲームサーバーをストレステストしますか?
私はカードゲームとそのサーバーに取り組んでいます。ロビーには多くのテーブルと多くのプレイヤーがいます。唯一の問題は、何百人もの同時ユーザーなしで何百人もの同時ユーザーをどのように処理できるかをどのように確認できますか? この種のことは通常どのように行われますか?
12 c++  server  testing 

4
循環クラスの依存関係
互いに必要な2つのクラスがあるのは悪い設計ですか? 私はGameEngineいくつかのGameStateオブジェクトを持っているクラスを持っている小さなゲームを書いています。いくつかのレンダリングメソッドにアクセスするには、これらのGameStateオブジェクトもGameEngineクラスを知る必要があります。つまり、循環依存関係です。 この悪いデザインを呼んでもらえますか?よくわからないが、現時点ではこれらのことをリファクタリングできるので、私はただ尋ねている。
12 c++  architecture 

4
アドベンチャーゲームのさまざまな状態のコーディング
私はアドベンチャーゲームを計画していますが、ストーリーの進行状況に応じてレベルの動作を実装する正しい方法がわかりません。 私のシングルプレイヤーゲームは、プレイヤーがゲーム内のさまざまなポイントで町の人々と対話しなければならない巨大な世界を特徴としています。ただし、ストーリーの進行状況に応じて、プレイヤーにはさまざまなものが提示されます。たとえば、ギルドリーダーは町の広場から市内のさまざまな場所に場所を変更します。ドアは、特定のルーチンを終了した後の1日の特定の時間にのみロック解除されます。特定のマイルストーンに到達した後にのみ、異なるスクリーン/トリガーイベントが発生します。 私は最初にswitch {}ステートメントを使用してNPCの発言内容または検索対象を決定し、グローバルgame_state変数の状態を確認した後にのみクエストの目的を相互作用可能にすることを考えました。しかし、オブジェクトの動作を変更するために、さまざまなゲームの状態やスイッチケースにすぐに出くわすことに気付きました。そのswitchステートメントはデバッグするのも非常に難しく、レベルエディターで使用するのも難しいかもしれません。 したがって、複数の状態を持つ単一のオブジェクトを持つのではなく、単一の状態を持つ同じオブジェクトの複数のインスタンスを持つ必要があると考えました。そうすれば、レベルエディターのようなものを使用する場合、NPCのインスタンスを、彼が登場する可能性のあるすべての異なる場所に配置することができます。また、会話状態ごとのインスタンスも配置できます。しかし、それは、レベルの周りに浮かぶ非アクティブで不可視のゲームオブジェクトがたくさんあることを意味します。これは、メモリの問題か、レベルエディタで見づらいかもしれません。 または、単純に、ゲームの状態ごとに同一だが別々のレベルを作成します。これは最もクリーンでバグのない方法ですが、レベルの各バージョンが実際に同一であることを確認する大規模な手動作業のように感じます。 私のすべての方法は非常に非効率だと感じているので、私の質問を要約すると、ストーリーの進行状況に応じてレベルの動作を実装するためのより良いまたは標準化された方法はありますか? PS:私はまだレベルエディターを持っていません-JME SDKのようなものを使用するか、自分で作成することを考えています。

1
RTSを構築するための基本事項[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 去年閉鎖されました。 私は、誰もが良いへのリンクは、RTSゲームを開発する場合について考えて物事に関して読み込みや書籍いた場合、私はのようなもの読んでいただろうと思いまして、このとこれをそれにもっと読みたいです。 また、私は開発経験があり、すぐに自分でスケルトンの構築を開始したいと考えていますが、プロセスに関する追加の記事(プログラミングではなく、計画に関する詳細)があれば、非常に役立ちます。
12 rts  planning 

1
空きスペースでの効率的な経路探索
宇宙にゲームがあり、移動命令を発行したいのですが、これには経路探索が必要です。現在、A *などはほとんどがツリーに適用され、パス検索ノードのない空のスペースではないことを理解しています。現在、固定されたAABBとして表現されているいくつかの障害があります。つまり、境界のない「地形」障害はありません。さらに、ほとんどの障害物は、立方体または球体として合理的に近似できると予想しています。 だから私はずっと簡単な経路探索アルゴリズムを適用することを考えていました-つまり、現在の位置から目標位置に光線を投げるだけで、空間分割を使用して比較的迅速に障害物のリストを取得できます。私がよくわからないのは、注文したユニットが障害物の周りを移動する部分をどのように決定するかです。 私がこれまで考えてきたのは、単純に潜在的なフィールドを使用するということです。つまり、すべてのユニットは、互いに離れた強い反発力と、目的のポイントに向かって適度な力を感じるでしょう。これには、グループ命令を発行するために、別のエンティティに向けて中レベルの部隊を単純に命令できるという利点もあります。しかし、これは明らかに最適なソリューションを達成しません。 可能性のあるフィールドは、自分のパラメーターを考慮して合理的な近似を達成しますか、それとも別のソリューションが必要ですか?
12 c++  path-finding 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.