ゲーム開発

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

7
ゲームワールド内の大量のエンティティをシミュレートするエレガントな方法
いくつかの機能を提供する多くの(多くの)エンティティが存在するゲームがあると仮定します。それらのすべてが常に必要なわけではなく、すべてのフレームで考慮する必要もありません。この問題が存在する私が取り組んでいる具体的な問題は、臓器を含む身体の詳細なシミュレーションです。 ゲームでは、各クリーチャーはより小さな部分(胴体、脚など)に分離された自身の体を持ち、これらの部分には体の中で特定の機能を果たす器官が含まれることがあります。臓器が現在目的を果たしているかアクティブであるかは、実際には明確ではありません。結局のところ、動物には空腹がある可能性があるため、何も消化する必要はありません。各フレーム内のすべてのオブジェクトをチェックまたはシミュレートするのは非常にばかげており、世界に多くのクリーチャーがいるとすぐに非常にコストがかかります。そのため、更新が必要なオブジェクトとそうでないオブジェクトを賢く区別する方法を考えていました。 私が思いついたことは、少なくとも大丈夫なソリューションのようです。シミュレートする必要のあるオブジェクトが存在する「アテンションスタック」と呼ばれる単純なキュー/スタックを作成します(基本的に、読み取られるとすぐに各要素が削除されます。順序は無関係です)。その必要性の注目は、単にスタックに自らを置くオブジェクトまたは他のオブジェクトによってそこに置かれています。これらのオブジェクトは、おそらくsimulate()関数を備えたシンプルなインターフェースを実装するでしょう。 私の以前の消化の例に適用すると、これは次のことを意味します。 プレイヤーはインベントリから食べるもの(パンだと仮定)を選択し、キャラクターの口に入れて、口を注意スタックに置きます。次のフレームでは、スタックから口が取り出され、そのsimulate()関数が呼び出されます。口なので、ここで噛むことをシミュレートするのが妥当でしょう。これは、食べ物を飲み込む準備ができると判断するまで、口がスタックの上に置かれ続ける数フレームの間続く可能性があります。この場合、口は噛んだパンを胃に入れます(直接そこに行かないことは知っていますが、単純化のために食道は省かれています)。これも注意スタックに置かれます。次のフレームでは、消化プロセスのシミュレーションが開始されます。残りの必要な器官についても同様です。 これに関する予測可能な問題は、アイドリングオブジェクトです。眠っている動物はこの良い例です。眠っている動物をスタックに置き、毎回目を覚ます必要があるかどうかを確認することで、前述のように行うことができますが、それが唯一行われているので無駄に思えます。オブジェクトをより効率的にアイドリングするために、特定の時間に実行されるジョブを保存する一種のスケジュールを追加することを計画していました。動物が眠りにつくと、動物が眠りについた後、一定の時間だけスケジュールされる仕事をそのスケジュールに入れます。このジョブは、眠っている動物を再びアテンションスタックに配置します。ここで、注意スタックにない睡眠動物は、AIがシミュレートされていないため、何かに攻撃されるのを逃す可能性があります。 今、私は正直、これが経験不足のためにこの問題のエレガントな解決策に近いかどうかわかりません。使用可能なものに近いですか?これは通常どのように行われますか、誰かが提案やより良い解決策を持っていますか?

6
モバイルデバイスのゲームロジックにLuaを使用する必要がありますか?
上記のように、 暇なときにAndroidベースのゲームを書いています(Androidは無料で、商業的なことをしたいという本当の願望がないため)。 ゲームロジックは、エンティティが存在し、コンポーネントがアタッチされ、メッセージをやり取りして物事を実現する非常に典型的なコンポーネントベースのモデルに基づいています。 明らかにそれを実際に実行するためのレイヤーは薄く、このアプリのiPhoneバージョンを作成する場合、Objective Cで(このコンポーネントベースのシステムの)レンダラーとコアドライバーを書き直す必要があります。 エンティティは、追加するコンポーネントの名前を決定する単なるフラットファイルであり、コンポーネント自体は、エンティティのロジックを含む単純な単一目的のオブジェクトです。 今、これらのコンポーネントのすべてのロジックをJavaで記述した場合、iPhoneに移植することにした場合は、Objective Cでそれらを書き直す必要があります。アプリケーションロジックの大部分はこれらのコンポーネントに含まれているため、理想的な世界では、プラットフォームに依存しない言語/スクリプト/ DSLで記述され、どのプラットフォームのアプリにもロードできます。 しかし、これは理想的な世界ではなく、モバイルデバイスでのLuaのパフォーマンスなどはまだゼロではないこと、オーバーヘッドが大きすぎること、後で問題が発生することを信じるようになりました。そのルートを下った? これは実際にそうですか?明らかにこれは単なる架空の質問であり、Javaで簡単に作成できるので、すべてをJavaで書いてうれしいですが、実際にこのゲームを作るのは楽しいと言っていますさまざまなモバイルデバイスで)商業的に実行可能なゲームを作りたかった-Luaを使用するのか、それとも移植の際にヒットしてすべてのコードを書き直すのか
33 android  lua  mobile  porting 

4
無料ゲームから収益を生み出す一般的な方法は何ですか?
無料ゲームを作成するとき、どのような収益オプションがあり、どの程度成功していますか?広告サポート、フリーミアム、パートナーシップ、マーチャンダイジング、バーチャルグッズなど、さまざまな収益モデルの長所と短所は何ですか? 可能であれば、さまざまな収益モデルを使用してゲームの具体例を示し、データを証拠として提供します(そうでなければ、非常に主観的になる可能性があります)。

30
資産を作成するためのツールですか?[閉まっている]
使用可能な無料の既存のリソース(無料のスプライト/イメージ、音楽、サウンド)を見つけることに関して同様の質問がありますが、私は自分でリソースを作成することに興味があります。資産の作成/修正に使用するツールは何ですか? 回答ごとに1つのツールのみを配置してください。また、次の情報を含めるようにしてください。 商品名 ウェブサイトへのリンク 作成できるアセットの種類(2D画像、3D画像、音声など) サポートされるOS コスト ライセンス(無料/オープンソースの場合) 総括
33 assets  tools 

5
「システムプログラミング」とはどういう意味ですか?
世界的に有名なゲーム開発会社でゲームプログラマーとしてインターンシップを準備しています。彼らのウェブサイトで必要な前提条件を検索したところ、次のことがわかりました。 追加された利点 DirectX / OpenGLの知識。 3D数学と物理学に関する強力なコマンド。 C ++開発用のVisual Studio IDE。 システムプログラミングとOSの概念。 システムプログラミングとOSの概念とはどういう意味ですか? Windowsプログラミングを勉強すべきですか?または、Linuxプログラミングを使用する必要があります(重要な概念を知ってほしいという意味です)。それともまったく違うものですか?

4
Unityでメインスレッドをフリーズしない方法
計算量の多いレベル生成アルゴリズムがあります。そのため、呼び出すと常にゲーム画面がフリーズします。ゲームがまだロード画面をレンダリングし続けている間に、ゲームがフリーズしていないことを示すために、関数を2番目のスレッドに配置するにはどうすればよいですか?

4
なぜオブジェクトが90度よりも45度で速く動くのですか?
ゲームには、90度ではなく45度でより速く動くオブジェクトがあります。 各オブジェクトには ポイント(x、y)位置 Vector2D(x、y)方向 Int速度 そして、更新中に私がすることは、新しい位置が次のように計算されるということです。 position.x += direction.x * speed position.y += direction.y * speed これを修正するにはどうすればよいですか?どんな角度でも同じ速度で動くようにしたい。
32 c#  2d  geometry 

14
10代のゲームプログラマーに適した開始プラットフォームは何ですか?[閉まっている]
私の息子(15)は、ゲームプログラマーとしてのキャリアを追求したいと考えています。私は彼が簡単なゲームで今始めなければならないと言った。彼にはまだプログラミングの経験はありませんが、私はプログラマーです(ゲームではなくビジネスアプリ)ので、プログラミングを教えることができます。最初は、彼の熱意を維持するために、迅速な結果を提供できるものを探しています。 何を提案しますか?
32 platform 

4
多くのゲームが完全に表明されないのはなぜですか?
なぜこれほど多くのMMOが部分的にしか発声されないのか疑問に思っていますか?ゲームのメーカー(Q&AのThimbleweed Park)にボイスオーバーの費用を尋ねたところ、Aリストのスターを雇わない限り、それほど高価ではないと言われました。では、なぜゲームの対話が画面上で読むためのテキストとしてしか存在しないのでしょうか? 私が考えることができる唯一の理由は、すべてのソフトウェアのローカリゼーションに存在するものと同じです:すべてのダイアログが終了して凍結されるまでVOを記録することはできませんので、ゲームの残りの終了と出荷の間の別の固定遅延です。そのため、管理できないようには見えません。 明確にするために:私は意見や理論を探しているのではなく(MODがこの問題を解決するだけです)、実際の理由と部分的なボイスオーバーでゲームを出荷した人々からの経験です。


1
エンティティシステムのキャッシュ効率はどのようになっていますか?
最近、私はC ++ / OpenGLゲームエンジンに実装するために、エンティティシステムで多くの読書を行ってきました。エンティティシステムについて絶賛されている2つの主な利点は次のとおりです。 複雑な継承階層に絡む必要がないため、新しい種類のエンティティを簡単に構築できます。 キャッシュの効率性、私は理解するのに苦労しています。 理論はもちろん単純です。各コンポーネントはメモリブロックに連続して格納されるため、そのコンポーネントを処理するシステムは、メモリ内をジャンプしてキャッシュを削除することなく、リスト全体を繰り返し処理できます。問題は、これが実際に実用的である状況を本当に考えることができないということです。 最初に、コンポーネントがどのように保存され、どのように相互に参照するかを見てみましょう。システムは複数のコンポーネントで動作する必要があります。つまり、レンダリングシステムと物理システムの両方が変換コンポーネントにアクセスする必要があります。私はこれに対処する多くの可能な実装を見てきましたが、どれもうまくいきません。 コンポーネントに、他のコンポーネントへのポインター、またはコンポーネントへのポインターを格納するエンティティへのポインターを格納させることができます。ただし、ポインタをミックスに投入するとすぐに、キャッシュの効率がすでに低下しています。すべてのコンポーネント配列が「n」の大きさであることを確認できます。「n」はシステム内に存在するエンティティの数ですが、このアプローチはひどくメモリを浪費します。これにより、新しいコンポーネントタイプをエンジンに追加することは非常に困難になりますが、1つのアレイから次のアレイにジャンプするため、キャッシュ効率が失われます。個別の配列を保持する代わりに、エンティティ配列をインターリーブすることもできますが、それでもメモリを浪費しています。新しいコンポーネントやシステムを追加するのに法外な費用がかかりますが、古いレベルをすべて無効にしてファイルを保存するという利点が追加されました。 これはすべて、エンティティがリスト、すべてのフレームまたはティックで線形に処理されることを前提としています。実際には、これは多くの場合そうではありません。オクルージョンカリングを実行するためにセクター/ポータルレンダラー、またはオクトツリーを使用するとします。エンティティをセクター/ノード内に連続して保存できる場合もありますが、好きかどうかに関係なく、飛び回ることになります。次に、他のシステムがあります。これは、他の何らかの順序で格納されたエンティティを好む場合があります。AIは、AI LODでの作業を開始するまで、エンティティを大きなリストに格納しても問題ありません。次に、プレーヤーまでの距離、またはその他のLODメトリックに従って、そのリストを分割します。物理学はそのオクトツリーを使用したいと思うでしょう。スクリプトは何でも構いません。実行する必要があります。 コンポーネントを「ロジック」(ai、スクリプトなど)と「ワールド」(レンダリング、物理、オーディオなど)に分割し、各リストを個別に管理できますが、これらのリストは相互にやり取りする必要があります。AIは、エンティティのレンダリングに使用される変換またはアニメーションの状態に影響を与えない場合、意味がありません。 エンティティシステムは、実際のゲームエンジンでどのように「キャッシュ効率」が高いのですか?おそらく、アレイにエンティティをグローバルに保存し、octree内でそれを参照するなど、誰もが使用しているが、話しているわけではないハイブリッドアプローチがあるのでしょうか。


7
ウィンドウサイズを自動的に合わせるのではなく、ゲームが画面解像度を要求するのはなぜですか?
3Dまたは2D画面上に柔軟でレスポンシブなUIレイアウトを実装し、任意の画面解像度で実行できるようにすることは、より論理的で再利用可能でユーザーフレンドリーになるように思えます。 最新のゲームの中には、画面の解像度を自動検出し、それに合わせてゲームを調整するものがありますが、解像度を変更するオプションは設定のままです。 なぜこのオプションがあるのですか? 私の推測では、これはより少ないグラフィックスをレンダリングして画面全体に拡大することでパフォーマンスを改善する方法を古いマシンに提供する方法の1つですが、確かにパフォーマンスを改善するより良い方法があります(たとえば、異なるテクスチャとモデル品質を選択する) 。

3
標準のC#/ Windows Formsゲームループとは何ですか?
昔ながらのWindowsフォームとSlimDXやOpenTKなどのグラフィックAPIラッパーを使用するC#でゲームを作成する場合、メインゲームループはどのように構成する必要がありますか? 正規のWindowsフォームアプリケーションには、次のようなエントリポイントがあります public static void Main () { Application.Run(new MainForm()); } そして、クラスのさまざまなイベントをフックすることで必要なものを達成することはできますがForm、それらのイベントは、ゲームロジックオブジェクトへの一定の定期的な更新を実行したり、レンダリングを開始および終了するためのコードのビットを置く明確な場所を提供しませんフレーム。 そのようなゲームは、標準に似た何かを達成するためにどのようなテクニックを使用する必要がありますか while(!done) { update(); render(); } ゲームループ、そしてパフォーマンスとGCへの影響を最小限に抑えますか?

5
スペースを認識可能にし、方向付けを簡単にする方法は?
私は宇宙でゲームセットを作ることを考えています。それは、非常に大きく、手続き的に生成されたゲーム世界(多くの星、惑星、そしてあなたが持っているもの)を特徴とするでしょう。しかし、私は大きな問題を予見しています。宇宙空間はほとんど特徴がありません。それはどこでもほとんど同じです-星と同じ黒い空。これは明らかに悪いことです。大規模なゲームの世界は場所によって異なる必要があるため、プレーヤーは自分がどこにいるのか、どのように必要な場所に行くのかを理解できます。空間内の異なる、認識可能な場所を作成するにはどうすればよいですか? 私が想定しているゲームは2D(Space Rangersに少し似ています)で、スペースの写真はバックグラウンドでのみ使用されます。ただし、2Dまたは3Dの手法に興味があります。 明確化 ここで必要なのは、ゲーム空間に適応するだけでなく、ゲームがより面白くなるようにさまざまな場所を用意することです。例は次のとおりです。スペーストレーディングゲーム(エリート、Xなど)を想像してください。あなたは異なる星系を訪れますが、それらはすべて似ています:修理/給油するドック、取引する店、使命/契約を取るバー...タウ・セティIIIは、KZ'ish VIとほとんど名前が異なります。 すべての場所、または少なくともプレイヤーが訪れるほとんどの場所は互いに異なっていて、すぐに認識できるものである必要があると信じています。もちろん、すべてのスターシステムを独自の視覚スタイルを備えた本格的な3Dレベルにすることは機能しますが、それは大規模なゲームであっても法外に高価です。この驚異と発見を達成する他の方法はありますか?

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