ゲーム開発

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

5
DirectX 10シェーダーのifステートメントを避けますか?
ステートメントの両方の部分が実行され、間違ったものがドロップされるため、シェーダーでステートメントを回避する必要があると聞いたことがあります(パフォーマンスに悪影響を及ぼします)。 DirectX 10ではまだ問題ですか?誰かが私に言った、その中で正しいブランチだけが実行されるだろう。 説明のために、私はコードを持っています: float y1 = 5; float y2 = 6; float b1 = 2; float b2 = 3; if(x>0.5){ x = 10 * y1 + b1; }else{ x = 10 * y2 + b2; } より高速にする他の方法はありますか? もしそうなら、どうやって? 両方のブランチは似ていますが、唯一の違いは「定数」の値です(y1, y2, b1, b2ピクセルシェーダーのすべてのピクセルで同じです)。

3
六角形グリッド上の最短経路を見つける
私はいくつかのシミュレーション要素を持つターンベースのゲームを書いています。現在私がやっていることの1つは、パス検索です。私がやりたいのは、AI冒険者を1ターンごとに、現在のx、yとターゲットx、yを使用して、ターゲットに1タイルずつ近づけることです。 自分でこれを理解しようとすると、4つの方向を問題なく決定できます dx = currentX - targetY dy = currentY - targetY しかし、6つの方向のどれが実際に「最良」または「最短」ルートであるかを判断する方法がわかりません。 たとえば、現在の設定方法では、東、西、NE、NW、SE、SWを使用していますが、NEタイルに到達するには、NWを移動するだけでなく、Eastを移動してからNWを移動します。 私はこれがすべてとりとめのないことを願っています。リンクを1つまたは2つでも使用して、開始できます。私が見つけた情報のほとんどは、グリッドの描画と必要な奇妙な座標系の探索に関するものです。

2
プロシージャルテクスチャ生成の高速化
最近、手続き的に生成された太陽系で行われるゲームに取り組み始めました。少し習熟した後(Scala、OpenGL 2 ES、Libgdxのいずれとも動作していなかった)、基本的な技術デモを行って、プロシージャルにテクスチャリングされた単一の惑星を回ります。 私が直面している問題は、テクスチャ生成のパフォーマンスです。私がやっていることの簡単な概要:惑星は球体に変形された立方体です。各側にanxn(たとえば256 x 256)テクスチャが適用され、フラグメントシェーダーに送信される1つの8n xnテクスチャにバンドルされます。最後の2つのスペースは使用されず、幅が2の累乗であることを確認するためにのみ存在します。テクスチャは現在、ペーパー「Simplex」にリンクされた2012年版のシンプレックスノイズアルゴリズムの更新を使用してCPU上で生成されていますノイズを分かりやすくする。アルゴリズムのテストに使用しているシーンには、惑星と背景の2つの球体が含まれています。どちらも6オクターブの3Dシンプレックスノイズで構成されるグレースケールテクスチャを使用するため、たとえばテクスチャサイズとして128x128を選択した場合、ノイズ関数の呼び出しは128 x 128 x 6 x 2 x 6 =約120万回になります。 地球に最も近いのは、スクリーンショットに表示されているものです。ゲームの目標解像度は1280x720であるため、512x512のテクスチャを使用することを好みます。もちろん、実際のテクスチャは基本的なノイズよりも複雑になります(日光に基づいたフラグメントシェーダとスペキュラマスクにブレンドされた昼と夜のテクスチャがあります。大陸のノイズ、地形の色の変化が必要です。 、雲、街の明かりなど)そして、我々は512 x 512 x 6 x 3 x 15 = 7000万のノイズが惑星だけを呼び出すようなものを見ている。最後のゲームでは、惑星間を移動するときにアクティビティが発生するため、移動中にバックグラウンドでテクスチャを計算できるため、5秒または10秒、場合によっては20秒の待機が許容されます。 テストシーンに戻ると、PCのパフォーマンスはそれほど悪くはありませんが、最終結果が約60倍悪化することを考えると、依然として遅すぎます。 128x128 : 0.1s 256x256 : 0.4s 512x512 : 1.7s これは、パフォーマンスに重要なすべてのコードをJavaに移動した後です。Scalaでそうするのはずっと悪かったからです。ただし、携帯電話(Samsung Galaxy S3)でこれを実行すると、より問題のある結果が生成されます。 128x128 : 2s 256x256 : 7s 512x512 : 29s …

4
Unity3D Game Engineの「イールドリターンwww」の基本的なメカニズム
Unity3Dゲームエンジンでは、リモートデータを取得するための一般的なコードシーケンスは次のとおりです。 WWW www = new WWW("http://remote.com/data/location/with/texture.png"); yield return www; ここにある基本的なメカニズムは何ですか? ダウンロードの完了中に次のフレームを処理できるようにするために、yieldメカニズムを使用することを知っています。しかし、私たちが行うとき、ボンネットの下で何が起こっていyield return wwwますか? どのメソッドが呼び出されていますか(もしあれば、WWWクラスで)?Unityはスレッドを使用していますか?「上位」Unityレイヤーはwwwインスタンスを取得して何かをしているのですか? 編集: この質問は、特にUnity3D内部に関するものです。yieldC#でステートメントがどのように機能するかについての説明には興味がありません。代わりに、Unityがこれらの構造をどのように扱うかの内部ビューを探しています。たとえば、WWWが複数のフレームに分散した方法でデータをダウンロードできるようにするためです。
14 unity 

1
グリッド上の正投影単位の変換の不一致(たとえば、64ピクセルが正しく変換されない)
グリッド上での単位変換に関する小さな問題についての洞察を探しています。 更新および解決済み 私は自分の問題を解決しました。詳細は以下をご覧ください。投稿のこの部分のすべてが正しいことが判明しました。どちらかといえば、次の人のためのミニチュアチュートリアル/例/ヘルプとして機能することができます。 セットアップ FBO、VAO、VBO 512x448ウィンドウ 64x64グリッド gl_Position = projection * world * position; projection定義されるortho(-w/2.0f, w/2.0f, -h/2.0f, h/2.0f);この教科書正射影関数です。 world (0、0)の固定カメラ位置によって定義されます position スプライトの位置によって定義されます。 問題 以下のスクリーンショット(1:1スケーリング)では、グリッド間隔は64x64であり、ユニットを(64、64)で描画していますが、ユニットは約10pxを間違った位置に描画します。ピクセルサイズのゆがみを防ぐために均一なウィンドウディメンションを試しましたが、1対1ピクセルから世界単位への投影を行う際に、適切な方法で少し迷っています。とにかく、ここに問題を支援するためのいくつかの簡単な画像があります。 私は、エンジンが64xオフセットであると信じているスプライトの束をスーパーインポーズすることにしました。 これがふさわしくないように思えたとき、私はあちこちに行き、1ユニットのベースケースをしました。予想通りに並んでいたようです。黄色は、動きの1pxの違いを示しています。 私が欲しいもの 理想的には、64ユニットが任意の方向に移動すると、以下が出力されます(重ね合わせたユニット)。 頂点 頂点シェーダーに入る頂点が正しいように見えます。たとえば、最初の画像を参照すると、データはVBOで次のようになります。 x y x y ---------------------------- tl | 0.0 24.0 64.0 24.0 bl | 0.0 0.0 -> 64.0 0.0 tr | …


2
IFテキストパーサーを別のゲームに埋め込みますか?
別のゲームまたはアプリケーションに埋め込むことができる既存のインタラクティブフィクションテキスト解析エンジンはありますか? ライブラリとして何かを使用したいと考えています。利用可能なオブジェクトと動詞を自分の側から渡すことができます。ユーザーからの文を解析し、ユーザーが何を要求したかを記述する何らかの構造/ ASTを返します。その後、自分のコードがそのリクエストに基づいて行動できます。 SIRIレベルのものは必要ありません。現在のIFゲームがサポートする簡単な文とアクションは問題ありません。しかし、私はテキスト/文パーサー全体を自分で書くつもりはありません。 これはIfゲームではなく、Inform 7のようなインタラクティブなフィクション言語で完全に書くことはできません。そのエンジンの言語でのゲーム。

3
Unity3Dエンジン設計の背後にある理由(ゲームオブジェクト/変換コンポーネント)
私はUnity3Dエンジンの設計の背後にある理由を理解しようとしていますが、これはまだ頭を悩ませることができないものです:なぜ、名前、レイヤーマスク、タグ?とにかく他のすべてのコンポーネントのように削除することはできません。代替手段がないため、削除する必要はありません。

2
背景に木々が輝いているのはなぜですか?
現在、私は暗闇の中で森のシーンを作成しており、木々は遠く離れて輝いていますが、近くに行くと元気です。「Nature / Tree Soft Occlusion [bark / leaves]」に設定されたシェーダーを持っていますが、それらはまだ遠く離れた場所で奇妙にレンダリングされていますが、近くでは問題ありません。 ここで言ったように、「アンビエントオクルージョン」という名前のフォルダーにツリーを配置しようとしましたが、運はありません。フォグもオフになります。前もって感謝します。 更新 「Render Paths」カメラを使用して木を見ると、他のすべてが緑である間に赤に見えました。 更新2 これらをダウンロードしたパッケージを再インストールしようとしましたが、まだ運がありません。 更新3 いくつかの木を手動で追加しましたが、それらは正常に機能しますが、地形にペイントして追加するときに問題が発生します。 最終更新 ゲームをビルドして、これが.exeに影響するかどうかを確認しましたが、影響しませんでした。ですから、デバッグ時には無視する必要があります。ビルドでうまく機能するからです。すべての助けをありがとう、それはただ団結のエラーのようです。ビルドの画像:
14 unity  shaders  terrain  tree 

2
Unityのグローバルスクリプトをどこに添付しますか?
Unityの知る限り、すべてのスクリプトはオブジェクトに添付する必要があります。しかし、グローバルスクリプトの場合はどうなりますか?たとえば、テトリスのようなゲームで、どのオブジェクトに要素スポーナーおよびムーバースクリプトを添付する必要がありますか?または、要素はそれ自体の動きを処理する必要がありますか?この問題のベストプラクティスはありますか?
14 unity 

3
完全に動きながら互いに追従するオブジェクトのテクニック?
オブジェクトが前にあるオブジェクトの前の位置を移動する場所で、オブジェクトがどのように互いに追従するのか疑問に思います。先行オブジェクトが停止すると、後続のすべてがその位置で停止するはずです。それで、これはどのように達成されますか? そのようです: 編集: 私が達成したいのは、次のすべてのオブジェクトが、前の先頭のオブジェクトがたどるパスを「歩く」ことです。他のすべてのオブジェクトは、先頭のオブジェクトの速度で移動します(これは、速度ベクトルを後続のすべてのオブジェクトに渡すことによるものです)。しかし、お互いの距離も維持しながら、すべてのオブジェクトをパス上で移動/一時停止させるにはどうすればよいですか?
14 movement 

3
Apple IIでのゲーム開発はどのようなものでしたか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 3年前に閉店しました。 DOS開発について同様の質問を少し前に聞いたところ、優れた答えが得 られました。DOSゲーム開発の典型的なツールチェーンは何ですか? 今、私は70年代後半から80年代前半のApple IIでのゲーム開発はどのようなものだったのかと思っています。私は主に初期のIIとII +に興味がありますが、IIeなどについても答えが欲しいです。 だからここに私の質問があります: どの言語が使用されましたか? 6502アセンブラーを想定していますが、BASICはバンドルされており、おそらく多く使用されていました。BASICで書かれた人気のあるゲームを思い浮かべますか?Cはどうですか? 6502アセンブラーの開発はどのようなものでしたか? システムモニターを起動すると、オペコードを直接入力できることに気付きました。ミニアセンブラーでアセンブラーを直接実行することもできます。しかし、ゲームがそのように書かれているとは想像できません。編集者/ IDEがありましたか?プログラムはどのようにディスク/テープに保存されましたか? BASIC開発はどのようなものでしたか? Apple II BASICインタープリターは決して悪くはありません。そこで完全なプログラムを書くことができると思います。また、プログラムを保存/ロードすることもできますが、ディスク/テープに推測します。しかし、視覚的なエディタはありませんでしたか? APIまたはミドルウェアはありましたか? または、何かを描画したり、サウンドを再生したい場合は、常にハードウェアと直接会話する必要がありましたか?ライブラリはありましたか? 今日と違うものはありますか? 使用された画像/音声形式など、他の違いを喜んで聞きます。ファイルの概念を正しく理解していれば、実際にはファイルの概念がなかったことを考えると、それがどのように機能するのか疑問に思っています。アセンブラーでグラフィックとサウンドを入力する必要がありましたか?BASICではどのように機能しましたか?
14 editors  ide 

3
円上の点を指定してラジアン単位の角度を取得します
私は円の周りを回転するダイヤルに取り組んでいます。 このダイヤルを使用すると、円の任意の場所にマウスを移動して、ダイヤルの位置をクリックと同じ角度の円上の点に調整できます。たとえば、上のダイヤルから、下にピンクで表示されているスポットをクリックした場合、そのポイントの上で円上にダイヤルを移動します。 半径と角度(ラジアン単位)を指定して、円上の点の位置を取得する方法を知っています。それがこの式です: x = Cos(angle) * radius + CenterX; y = Sin(angle) * radius + CenterY; しかし、私は反対のことをやろうとしています。クリックポイントがあり、それを円上のポイント(コントロールノブが行く場所)に変えたいと思っています。このポイント(および指定された半径)を使用して、角度をラジアン単位で計算して、同じ角度でコントロールノブを円に配置しようとしています。 これを達成するために使用できる便利な式はありますか?

4
出版社なしでゲームを人気にする方法は?
私は先月開発していたゲームを終えたばかりですが、ゲームを作っている間、私はそれを世間に知れなかったという事実に悩まされました。出版社に縛られることは私にとって絶対的な最後の手段なので、出版社に売り込みたくありませんでした。ですから、広告や補足資料のための資金はほとんどありませんが、私は業界への駆け出しであるため、後援や称賛、評判など一切ありません。私のような人はどのように彼の作品をそこに出し、彼自身の長所とデザインの作品として維持しますか?私は自分の誇りを捨てて退役軍人に加わらなければならないのでしょうか、それとも私の道を歩むための何らかの方法がありますか?答えてくれる人の助けに本当に感謝しています。

3
ワードゲームの限られたAIボキャブラリーをシミュレートするにはどうすればよいですか?
進行中のほんの一握りの競争的な単語ゲームがあり、他の人間の対戦相手との対戦(ほとんど非同期)が優先されますが、AIと対戦するオプションをプレイヤーに提供したいと思います。辞書を持っているので、プレイ中にAIに簡単に完全な辞書知識を与えることができますが、AIが慣れていない単語を定期的に再生することは、プレイヤーにとってイライラするような経験になることです:私が知っている言葉を使っただけなら!」— AIの全体的なスキルレベルが低下しても。 (未)調整されたプレイパラメーターと弱いボキャブラリーの組み合わせにより、弱いAIを作成したいのですが、そのボキャブラリーを「一般的な」単語に限定する方法がわかりません。いくつかの単語頻度リスト(たとえば、Project Gutenbergの書籍に表示されるすべての単語のリストを、出現回数で並べ替えたもの)を見てきましたが、それらはすべて、多くの偽陰性を持っています。 tは実際の頻度で表示されます(たとえば、CHEETAHはVOCATIVEまたはSUTTEEよりもPGテキストで表示される頻度が低くなります)。検索結果を使用して単語の人気の推定値を取得しようとしましたが、誤った推定値を偽りやすい傾向があります。 誰かが単語の大まかな使用頻度を決定する他の良い方法、またはプレイヤーにとって自然に感じる単語ゲームAIを制限する他の方法に関する提案を持っていますか?
14 ai 

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