ゲーム開発

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

2
いつC ++を使用し、いつブループリントを使用するのですか?
アンリアルエンジンの使い方を学ぼうとしています。C ++の基本的な知識があります。最近、私はサバイバルホラーゲームを、学習体験のためだけにやっているプロジェクトとして作り始めました。これまでのところ、私はすべての機能をブループリントシステムを通じて実装しました。 それで、私の質問は、Unreal Engineでゲームを改善/作成するためにコードをいつ、どのように使用するかです。
10 c++  unreal-4 

3
2つの方向付けられたバウンディングボックス(OBB)間の最速3D衝突検出
ゲームの中で、衝突システムを追加する必要があるところです。私はjBulletを試しましたが、うまくいきましたが、私が探していたものではありませんでした。2つの方向性のあるバウンディングボックス(OBB)ツリーが衝突しているかどうかをテストする簡単な方法が欲しいだけです。 木を使って衝突をするつもりでした。ブロードフェーズ用のAABBを作成し、それがテストに合格した場合、ツリー内の各OBBが他のツリーと衝突するかどうかを確認します。 インターネットでいくつか見つけましたが、完全には理解できませんでした。私が求めているのは、3D OBBの衝突を適切に説明するWebサイトまたはリソースですか? GJKはSATよりも高速であることを学びました。また、ボックスが互いにどこまで浸透しているかを知ることができるようです。私はいくつかのGJKのものを見つけましたが、それらは箱ではありませんでした。代わりに、より複雑で混乱を招くものです。 3つのベクトル(各軸の中心、サイズ、回転)からOBBを作成できるようにしたいだけです。次に、それらとの衝突をテストすることができます。投稿していただきありがとうございます。

2
2Dゲームと最新のOpenGL
事前概念 わかりました、それで私がこれまでに集めたのはこれです: 固定パイプラインを使用しない(非推奨または非推奨) vbosは「オブジェクトモデル」を格納します(n頂点データ、ほとんど) vaosは、データがどのように配置されるかを記述し、描画呼び出しが各vboのどの部分がどの種類の頂点情報に対応するかを認識します(1つのvaoは複数のvboを参照でき、その逆は少し難しい) 各描画呼び出しは、シェーダーに頂点データも送信します 3Dの見方(オプション) これらの情報があれば、3Dの複雑なオブジェクトの描画が最新のOpenGLで非常に優れていることがわかります。基本的に、(おそらくBlenderまたは他の同様のソフトウェアからの)オブジェクトモデルの束をローカル座標を持つVBOにロードし、次に、オブジェクトの各インスタンスに異なるシェーダーパラメーター(オフセット)を指定して、ワールドスペースに描画します。 問題/質問 ただし、2Dでは問題と優先順位はまったく異なります。それほど複雑なオブジェクトを描画する必要はありません。複雑な投影行列は必要ありません。シェーダーははるかに単純です。 最新のOpenGLで頻繁に(実際には頻繁に、基本的にすべてのフレームで)変化するジオメトリを描画するための最良の方法は何でしょうか? 次の段落では、問題のいくつかの考え(円と四角形の問題)を見ることができます。これにより、興味のある変更の種類をより明確に識別できます。 私の試み(オプション) そこで、基本的な2Dジオメトリを画面に描画する方法を考え始めました。 正方形:[(1, 0), (1, 1), (0, 1), (0, 0)]ローカル空間で正方形のジオメトリのVBOを読み込み、シェーダーに正方形の実際の幅と世界座標および色情報を提供します 涼しく、簡単に見えます。円に移動しましょう: 円:三角ファン...ええ。どのくらいの精度(頂点の数)?小さな円の精度は小さく、バグの円の精度は高くなければなりません。明らかに1 VBOをロードしても、すべてのケースに対応できるわけではありません。円のサイズが大きくなるために精度を上げる必要がある場合はどうなりますか? かっこいい。少し簡単な長方形に移動しましょう。 長方形:ええ。「一般的な長方形のジオメトリ」はありません。幅と高さの比率があればそれだけですが、サイズが変化すると、各長方形はおそらく異なります。 ご覧のとおり、物事はそこから下り坂になります。特に複雑なポリゴンなどではそうです。 コードポリシーなし:P アイデアの概要が必要なだけで、コードは必要ありません。特にCまたはC ++コードは必要ありません。「この頂点データでVBOを作成し、それをバインドする...」のように言ってください。
10 opengl  2d  vbo  vao 

3
グリッド上のタイルのセットが囲まれた形状を形成するかどうかを決定します
グリッド上のタイルのセットを前提として、以下を決定します。 タイルが囲まれた図を作る場合 ボードの側面を図の端として数えたときにタイルが囲まれた図を作る場合 前の2つのステートメントのいずれかがtrueの場合、追加のタイルが囲まれた図の内側に入ると、最初のタイルが形成されます。 プレーヤーは、1つのタイルを押し下げてから、指を他のタイルにドラッグして、同じ色のタイルのチェーンを作成します。次のタイルが有効であるかどうかを確認するために行くときに確認します。例 プレーヤーが赤いタイルから始めた場合、次に有効なのは隣接する赤いタイルへの移動のみです(対角線はカウントされます)。ユーザーが指を離したときに、上記の3つの項目を確認できるようにする必要があります。 ですから、私の最初の考えは、行くたびにチェーンの有効性をチェックしているので、プレーヤーが指を離したときに、最初と最後のタイルが隣接しているかどうかを確認できるということでした。(同じ色だとわかっています。)隣接している場合は、囲まれた図を作成するという予感がありました。ここに来て、大きなものが足りないかどうかを確認しました。私の直感が正しかったことのある種の論理的/数学的な証明(またはそれが正しくないことを証明する例) しかし、そのときは、アイテム番号2について考えました。ボードの端を囲まれた図の側面として使用するチェーンも考慮する必要があります。その場合、チェーンの最初と最後のアイテムは隣接しませんが、囲まれた図がまだあります。さて、私は少し正方形に戻りました。 このグリッド座標のチェーンを使用して、囲まれた図を作成するかどうかを判断するにはどうすればよいですか?私は一度、ん、私は囲まれた数字を持って知って、その境界内に入る全てのタイルの追加のリストを取得するための最良の方法は何ですか? 上記では、このテストの4つの可能な結果が期待できるものの絵を描きました。 チェーンは同封の図を作りません。 チェーンは囲まれた図を作ります。 ボードの側面を図のエッジ(または複数のエッジ)として数えると、チェーンは囲まれた図になります。 チェーンは囲まれた図を作成しますが、作成された図の一部ではない余分なデータポイント(チェーンの一部としてユーザーが有効に選択したもの)があります。 ケース4は、「余分な」チェーンリンクを抽出して、囲まれた図形とその中にある部分を見つける必要があるためです(ただし、「閉じられていない」領域の周りではありません)。 だから...誰もがこれを解決する良い方法のアイデアを持っていますか、それとも私のための出発点ですか?この時点で私は一種の円を描いており、別の目を使用できます。
10 algorithm  grid  graph 

5
シーンに追加せずに新しいGameObjectを作成する方法は?
私は本質的に自分のプレハブシステムを作成しています。ゲームオブジェクトは、人間が読めるデータファイルによって定義されます。空のゲームオブジェクトを作成し、データファイルで定義されたコンポーネントを使用してロードし、準備してInstantiate()呼び出しを待機したいと思います。ただし、使用GameObject go = new GameObject()するたびに新しいゲームオブジェクトがシーンに追加されます。 Unityに組み込まれたプレハブを使用して、プレハブをGameObjectとしてロードできますが、シーンに追加されません。(下の例を参照) この背後にある理論的根拠は、Unityプレハブをロードすることによって生成されたものと、カスタムプレハブシステムによって作成されたものと、GameObjectsを含む1つのリストが欲しいということです。これは実行時に行う必要があり、Unity Editorを使用することはできません(理想的にはエンドユーザーが独自のデータファイルを定義できるためです)。 Unityが自動的にインスタンス化しないで、新しいGameObjectを作成するにはどうすればよいですか? たとえば、次のように電話をかけることができます。 Resources.LoadAll("PrefabsDirectory", typeof(GameObject)) また、呼び出しが行われたときにシーンに追加されていないGameObjectsのリストを取得します。基本的に、私はLoadAll自分のプレハブ用のメソッドを作成しています。同様に、呼び出しが行われたときにGameObjectsをインスタンス化したくありません。

1
四角形ツリーで形状(長方形)はどのように機能しますか?
クワッドツリーはゲームにとって理想的なデータ構造であると言われましたが、クワッドツリー内でシェイプがどのように機能するかを正確に理解できません。 私はこれをJavaScriptで行っていますが、これらの質問はどの言語の四分木にも当てはまると思います。 基本的な(x、y)ポイントとポイント挿入が四分木でどのように機能するか、そして紙の上でそれを実行できることはほぼ理解していると思います。 ここにあるJSfiddle私はポイントを試してのは。 1つのケースを除いて、ポイントを使用した私のテストは期待どおりに機能しています。 しかし、私の混乱は、長方形のような形状が関係しているときに始まります。形状のある四角形ツリーから取得する場合、形状の各ポイントと、それらがどのノードに分類されるかをチェックしますか?また、各図形の(x、y、width、height)パラメーターを受け入れる場合、図形の挿入はどのように機能しますか?開始点からの幅/高さを使用して他のコーナーポイントを計算してから、適切なノードに分配しますか?挿入された形状が4つのノードにまたがる場合、その形状のデータは4つのノードすべてに保存されますか? そして、検索メソッドが形状をパラメーター(x、y、width、height)として受け入れる場合、実際には何が行われているのでしょうか。挿入する場合、シェイプがどのノードにまたがるかを最初に確認してから、それらのノードのすべてのオブジェクトを取得しますか? 私はJSfiddleで形状を処理していますが、テストの結果に完全に混乱しています。重複したオブジェクトが返されます! たとえば、赤い四角は、私の検索メソッドに入力しているパラメーターに相当する描画です。この赤い四角は4つのノードすべてにまたがるので、四角ツリーのすべてのオブジェクトを返すはずだと思います。しかし、そうではなく、私はそれが何を返すかを合理化するのに苦労しています。現在コメントアウトされている他のテストがいくつかありますが、コメントを外して実行すると、さらに混乱する結果を確認できます。 とはいえ、四分木のすべてのポイントを返す場合、どうすればよいですか?境界全体のサイズの形状を使用する取得メソッド?たとえば、retrieve(0、0、canvas.width、canvas.height)? JavaScriptの四分木ライブラリ私が使用していますので、私は実際の実装が正しいと評判であると仮定し、様々な他のソースによって参照されています。 私の混乱の多くは、四分木の用語の誤解から生じていると思います。同様に、「ポイント」にも幅/高さのパラメーターがある場合、なぜ彼らは寸法ではなく境界と言うのですか?それは慣習/速記の問題ですか、それとも完全に異なる概念ですか? 御時間ありがとうございます!

1
隣接するテクスチャのエッジを拾うスプライトシートテクスチャ
シンプルなスプライトシートを使用するカスタムスプライトルーチン(openGL 2.0)があります(テクスチャが横に並んでいます)。 したがって、たとえば、以下は2つの単純なテクスチャを持つテストスプライトシートです。 ここで、openGLスプライトオブジェクトを作成するときに行うことは、アトラス内のフレームの総数を指定し、描画するときに、描画するフレームを指定することです。 次に、テクスチャをどこから取得するかを決定します。 必要なフレーム数をフレームの総数で割る(左座標を取得するため) 次に、フレームの総数で1をダイビングし、その結果を上記で計算した左側の座標に追加します。 これは機能するようですが、時々問題が発生します。たとえば、以下のXを描画したいとします。 各テクスチャの間に1ピクセルの「パディング」を挿入することについて聞いたことがありますが、これがどのように機能するかを誰かが正確に説明できますか?つまり、これを行うと、テクスチャを取得するための計算が確実に破棄されます。 ピックアップしたテクスチャにパディングを単純に含めると(スプライトは空白の境界線で描画されます)、衝突の検出で問題が発生しますか?(つまり、透明部分が衝突するときに境界ボックスを使用すると、スプライトが衝突するように見えることがあります)。 誰かが説明していただければ幸いです。

6
配列ベースの16進マップでピクセルから16進座標を取得するにはどうすればよいですか?
ピクセルを16進マップで調整できるようにしようとしていますが、計算が正しく行われていません。試行したすべてが少しずれているようです。また、見つけた例は、円で囲まれた中央のマップに基づいています。 「配列ベース」とは、ヘクスの順序を意味します。写真を参照してください。 私が得た最も正確な結果は次のコードでしたが、それはまだオフであり、値が増えるほど悪化します。 public HexCell<T> coordsToHexCell(float x, float y){ final float size = this.size; // cell size float q = (float) ((1f/3f* Math.sqrt(3) * x - 1f/3f * y) / size); float r = 2f/3f * y / size; return getHexCell((int) r, (int) q); } 画面は左上の0,0から始まり、各セルはその中心を認識しています。 私が必要なのは、画面座標を16進座標に変換する方法だけです。どうすればできますか?

3
C ++でのエンティティコンポーネントシステム間のリンクに関するアドバイス
エンティティコンポーネントシステムに関するいくつかのドキュメントを読んだ後、私は私のものを実装することにしました。これまでのところ、エンティティとシステムマネージャ(システム)を含むWorldクラス、コンポーネントをstd :: mapとして含むエンティティクラス、およびいくつかのシステムがあります。エンティティをワールドのstd :: vectorとして保持しています。今のところ問題ありません。私を混乱させるのは、エンティティの反復です。それについて明確な心を持つことができないため、その部分を実装することはまだできません。すべてのシステムが、関心のあるエンティティのローカルリストを保持する必要がありますか?または、Worldクラスのエンティティを反復処理し、ネストされたループを作成してシステムを反復処理し、エンティティがシステムに関係するコンポーネントを持っているかどうかを確認する必要がありますか?というのは : for (entity x : listofentities) { for (system y : listofsystems) { if ((x.componentBitmask & y.bitmask) == y.bitmask) y.update(x, deltatime) } } しかし、ビットマスクシステムは、スクリプト言語を組み込む場合の柔軟性をある程度ブロックすると思います。または、各システムのローカルリストがあると、クラスのメモリ使用量が増加します。私はひどく混乱しています。

2
シェーダーのユニフォームを更新する最良の方法は何ですか?
シェーダーのマトリックスを最新の状態に保つための最も一般的な方法は何ですか?なぜですか? たとえば、現時点ではShader、GLSLシェーダープログラムとユニフォームのハンドルを格納するクラスがあります。カメラを動かすたびに、新しいビューマトリックスをシェーダーに渡す必要があります。次に、すべての異なるワールドオブジェクトのモデルマトリックスをシェーダーに渡す必要があります。 そのシェーダーオブジェクトにアクセスしないと何もできないので、これは私を厳しく制限します。 ShaderManagerすべてのアクティブなシェーダーを保持する責任があるシングルトンクラスを作成することを考えました。その後、どこからでもアクセスできます。ワールドオブジェクトはShaderManager、目的のマトリックスを通知する必要があるだけで、どのシェーダーがアクティブであるかを知る必要はありませんが、これが最善の方法であるとは限らず、おそらくいくつかの問題があります。このアプローチを取ることから発生します。
10 opengl  shaders  glsl 

3
ゲームプロジェクトのすべてを保存するためのソース管理?
ソースコードだけでなく、すべてのアセット、テクスチャ、アート、ドキュメントファイルなどをバージョン管理のためにgitリポジトリの下で管理するのが普通ですか?たとえば、テクスチャの古いバージョンを取り戻したいです。非常に悪い習慣である場合、アセットやその他のもののバージョン管理にどのツールを使用しますか?

4
さまざまなキーボードレイアウトをどのように処理できますか?
QWERTYレイアウトでWASDコントロールを使用するゲームがあるとします。たとえば、これらのコントロールをDvorakレイアウトで使用しようとするのは理想的ではありません(<A:HQWERTY と同等)。明らかに、QWERTYが使用するのと同じ物理キーを使用したいと思います(,aoeDVORAKで)。 私はいくつかの可能な解決策を考え出しました: ユーザーにQWERTYの使用を強制する 特に国際的なユーザーにとっては明らかに理想的ではありません キーボードレイアウトに基づいてショートカットを変更する(WASD->、aoe) サポートされているレイアウトごとにレイアウトマップを作成するように強制します(自動化可能) WASD以外のショートカットがある場合、ユーザーにとって最も簡単です ユーザーに自分でショートカットを定義させる より柔軟 ショートカットがたくさんあると困る 2番目のオプションと組み合わせて使用​​できます ハードウェアキーコードを使用する キーボード間で一貫していますか? このタイプのものは通常どのように扱われますか?
10 keyboard 

2
どのようにして変換行列から方向を抽出できますか?
4x4の変換行列Mがあり、Mで変換したときの球の形状を確認したい(球は原点にあり、半径は1です)。 Mに(0,0,0,1)を乗算するだけで中心を見つけることができます。 ただし、Mは球を押しつぶして回転させることができるため、半径が問題になります。結果として得られる楕円体の新しい半径を見つけるにはどうすればよいですか?オリエンテーションを見つける方法はありますか? 具体的には、変換された球を囲む境界球のサイズを知る必要があります。言い換えると、| M * V-M *(0,0,0,1)|の最大値は何ですか。ここで、Vは単位ベクトル(元の球上の点)です。

3
エレガントな自動タイル
タイルベースのゲームでオートタイルを実装する方法についての情報を探しています。これまでのところ、ハードコーディングされた「if ... else ...」ステートメントの束を使ってそれを常に即興で表現してきましたが、今はよりエレガントな解決策を見つける時がきたと判断しました。自動タイル張りの実装の例とトピックに関するディスカッションをインターネットで検索しましたが、3つの記事しか思いつきませんでした。 http://www.codeproject.com/Articles/106884/Implementing-Auto-tiling-Functionality-in-a-Tile-M http://blog.rpgmakerweb.com/tutorials/anatomy-of-an-autotile http://web.archive.org/web/20130927193449/http://www.squidi.net/mapmaker/musings/m091016.php (特に最後のものは包括的で非常に役立ちます。) 私もそれを実装することを、様々な実装とライブラリのドキュメントを見てきた、例えば、flixel:http://www.flixel.org/features.html#tilemaps 悲しいことに、私が見つけたすべての解決策は、私が始めたときとまったく同じように即興で無計画であり、考えられるすべてのケースをカバーすることはほとんどありません。 私は学ぶことができるオートタイリング実装のエレガントな例を探しています。

12
メモリ変更チートを防ぐにはどうすればよいですか?
今日では、多くのメモリ変更プログラムがあります(Cheat Engine&co)。定数変数を実際に一定に保つ効率的な方法はありますか? 私には2つのアイデアがありました。 定数変数を定数値、たとえば200分ごとに更新する別のスレッドを作成します。問題:2番目の値を変更することもできます。 値をサーバーに保存します。問題:ネットワークトラフィックをできるだけ低く抑えたいのですが。 定数と変数の両方が特定の範囲の値のみを含むことができるようにするために、このメカニズムが必要です。 これを行うより良い方法はありますか?
10 anti-cheat 

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