ゲーム開発

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

1
均一な地形上での2D非グリッドベースの移動によるパスファインディング
私のゲームでパスファインディングの最良の解決策を探しています。マップは最終的にグリッドベースですが、エンティティはフロートを使用して配置され、マップ上の任意のポイントに任意の方向に移動できます。私のゲームの「地面」の移動コストは一定ですが、もちろん、道を妨げる障害物が存在する可能性があります。障害物の大半は静的になり、ゲーム内の他のアニメーションの実体があるでしょうが、私はあり、それらを考慮しないで逃げるん-それはアイソメトリックだテーマ病院のように何の戦闘スタイルの戦略ゲーム、。 私が見たほとんどの経路探索記事は、3Dまたはグリッドベースの2Dの動きをカバーしています。私のユースケースをカバーするかもしれない何かのための提案はありますか?どうもありがとう。
12 2d  path-finding 

2
変換行列からオイラー角を抽出する方法は?
エンティティ/コンポーネントゲームエンジンを簡単に実現できます。 Transformコンポーネントには、ローカル位置、ローカル回転、グローバル位置、グローバル回転を設定するメソッドがあります。 変換が新しいグローバル位置に設定されている場合、ローカル位置も変更され、ローカル位置が更新されます。このような場合は、現在の変換ローカル行列を親の変換ワールド行列に適用するだけです。 それまでは問題ありませんが、更新されたローカル変換行列を取得できます。 しかし、変換でローカル位置と回転値を更新する方法に苦労しています。私が考えている唯一の解決策は、変換のlocalMatrixから並進と回転の値を抽出することです。 翻訳の場合は非常に簡単です。4番目の列の値を取得するだけです。しかし、回転はどうですか? 変換行列からオイラー角を抽出する方法は? そのような解決策は正しいですか?: Z軸を中心とした回転を見つけるには、localTransformのX軸ベクトルとparent.localTransformのX軸ベクトルの差を見つけて、結果をDeltaに格納します。次に、localRotation.z = atan2(Delta.y、Delta 。バツ); XとYを中心とした回転についても同じですが、軸を交換する必要があります。

3
コンポーネントベースの設計における入力処理
この質問が何度も尋ねられたことは知っていますが、コンポーネントベースのエンジンで入力処理を実装する方法はまだわかりません。 私が使用したコンポーネントベースのデザインは、T = Machineのブログシリーズと、エンティティが単なるIDであるArtemisに基づいていました。 入力処理の実装には、主に3つのアイデアがあります。 入力コンポーネントは、関心のあるイベントを保持します。入力システムは、キーイベントとマウスイベントをゲームイベントに変換し、エンティティを入力コンポーネントとともにループします。イベントに関心がある場合は、入力システムによって適切なアクションが実行されます。このアクションは、入力システムにハードコーディングされます。 入力コンポーネントはありません。特定のイベントを持つエンティティを入力システムに登録します。次に、入力システムはメッセージ(エンティティIDとイベントタイプを含む)を他のシステムに送信し、これらが適切なアクションを実行できるようにします。または、最初のケースと同様に、アクションは入力システムにハードコーディングされます。 最初のメソッドと同様ですが、アクションを入力システムにハードコーディングする代わりに、コンポーネントにはstd::map<std::function>、入力システムによって呼び出される関数(つまり)へのイベントのマップが含まれます。これには、同じイベントを異なるアクションに結合できるという追加の効果があります。 上記の方法のいずれかをお勧めしますか、それとも柔軟な入力処理システムを実装するのに役立つ提案がありますか?また、私はまだマルチスレッドに精通していませんが、実装をスレッドフレンドリーにする提案があれば歓迎します。 注:実装が満たしてほしい追加の要件の1つは、たとえばカメラエンティティとプレーヤーを同時に移動するなど、同じ入力を多くのエンティティに渡すことができることです。

4
時差等角図:画面上の点の地図座標を計算します
これについてはすでに多くのリソースがあることはわかっていますが、自分の座標系に一致するリソースが見つからないため、これらのソリューションを自分のニーズに合わせるのに非常に苦労しています。私が学んだことは、これを行う最良の方法は変換行列を使用することです。それを実装することは問題ありませんが、座標空間をどのように変換する必要があるのか​​わかりません。 これが私の座標系を示す画像です: 画面上の点をこの座標系に変換するにはどうすればよいですか?

2
遅延レンダリングのシャドウ
遅延レンダリングに関する資料を読んだので、その要点は理解できたと思います。しかし、私が理解していないのは、それがどのように影を達成するかです。私が知る限り、Gバッファは各ライトのシャドウマップの作成を含まないため、ライティングパスが各ピクセルがオクルードされているかどうかをどのように認識するかについて混乱しています。結局のところ、カメラの視点から見える特定のピクセルは実際には特定の光の視点からは見えない可能性があり、そのオクルージョンジオメトリはカメラの視点からは見えない可能性があるため、Gバッファーに何も書き込まれません。 。 シャドウマップのレンダリングを開始すると、フォワードレンダリングとほぼ同じように見えます。シャドウマップをレンダリングするために、すべてのライトに対してシーン内のすべてのジオメトリをレンダリングします。 では、遅延レンダリングは、フォワードレンダリングと同等のシャドウをどのように実現するのでしょうか。

1
弾丸の物理演算をゲームに統合するにはどうすればよいですか?
ここにあるリリースファイルをダウンロードしましたが、どこから始めればよいかわかりません。私のゲームでは、長方形と球体がいくつかあるので、これらすべてを互いに衝突させたい。(それらにはすべてメッシュと関連する境界ボリュームがあります) 編集-直方体には実際にAABBが関連付けられていることに気づきました。少なくともそれを変える必要があると思います。 どのような手順に従う必要がありますか?

3
オープンソースのCCGプロジェクトはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックゲーム開発スタック交換のます。 5年前に閉鎖されました。 よく開発されたオープンソースのコレクターカードゲームプロジェクトを見つけるのに苦労しています。 モバイルプラットフォームから学び、移植するプロジェクトを見つけたいです。

1
堅牢なアイテムシステムの作成
私の目的は、次のようなものを処理できる、可能な限り一般的なアイテムシステムを作成することです。 アップグレード可能なアイテム(+6カタナ) ステータス修飾子(+15器用さ) アイテムモディファイア(Yダメージを与える確率%X、フリーズする確率) 充電アイテム(30回使用の魔法使い) セットアイテム(4セットのXセットを装備してY機能を有効化) レアリティ(共通、ユニーク、伝説) 劣化(一部のクラフト材料に分割) 製作可能(特定の材料で製作可能) 消耗品(5%%X攻撃力、回復+15 hp) ※以下の設定で太字になっている機能は解決できました。 今、私は私が考えていることを反映するために多くのオプションを追加しようとしました。必要な機能をすべて追加するつもりはありませんが、必要に応じて実装できるようにしたいと考えています。これらは、在庫システムおよびデータのシリアル化とも互換性がある必要があります。 私は継承をまったく使用せず、エンティティコンポーネント/データ主導のアプローチを使用することを計画しています。最初は、次のようなシステムについて考えました。 BaseStat:外出先で統計を保持する汎用クラス(アイテムとキャラクターの統計にも使用できます) 項目:リスト、名前、項目タイプ、およびui、actionName、説明などに関連するものなどのデータを保持するクラス。 IWeapon:武器のインターフェース。すべての武器には、IWeaponが実装された独自のクラスがあります。これには、Attackとキャラクター統計への参照があります。武器が装備されている場合、そのデータ(アイテムクラスのstat)がキャラクターstatに挿入されます(BaseStatが何であれ、それはStatボーナスとしてキャラクタークラスに追加されます)したがって、たとえば、剣( jsonを使用してアイテムクラスを作成する)ため、剣はキャラクターのステータスに5攻撃を追加します したがって、BaseStatは( "Attack"、5)になります(enumも使用できます)。このステータスは、装備するとBonusStat(別のクラスになる)としてキャラクターの "攻撃"ステータスに追加されます。したがって、SwordはIWeaponを実装するという名前のクラスが作成されます。アイテムクラスが作成されます。そのため、この剣にキャラクターのステータスを挿入し、攻撃するときに、キャラクターのステータスから合計の攻撃ステータスを取得し、攻撃方法でダメージを与えることができます。 BonusStat:BaseStatに触れずに統計をボーナスとして追加する方法です。 IConsumable:IWeaponと同じロジック。直接統計の追加はかなり簡単(+15 hp)ですが、この設定で一時的な武器を追加するかどうかはわかりません(%xで5分間攻撃する)。 IUpgradeable:これは、このセットアップで実装できます。私は武器をアップグレードするときに増加する基本ステータスとしてUpgradeLevelを考えています。アップグレードすると、武器のBaseStatを再計算して、アップグレードレベルに一致させることができます。 この時点まで、システムはかなり良いと思います。しかし、他の機能については、他に何かが必要だと思います。たとえば、BaseStatはこの機能を処理できず、これが行き詰まったため、Craftable機能をこれに実装できないからです。すべての材料をスタットとして追加できますが、それは意味がありません。 これを簡単に投稿できるようにするために、次の質問を参考にしてください。 このセットアップを続行して他の機能を実装する必要がありますか?継承なしでそれは可能でしょうか? 継承なしでこれらの機能をすべて実装するために、あなたが考えることができる方法はありますか? アイテムモディファイアについて、どうすればそれを達成できますか?それはその性質上非常に一般的だからです。 この種のアーキテクチャを構築するプロセスを容易にするために何ができるか、推奨事項はありますか? この問題に関連する掘り出し物はありますか? 私は本当に継承を避けようとしていますが、継承をかなり維持できるように維持しながら、継承によって簡単に解決/達成できると思いますか? さまざまな側面や人から知識を得ることができるように質問を非常に広くしているので、1つの質問に自由に答えてください。 編集 @ jjimenezg93の答えに従って、C#でテストするための非常に基本的なシステムを作成しました。あなたがそれに何かを追加できるかどうかを確認してください: public interface IItem { List<IAttribute> Components { get; set; } void ReceiveMessage<T>(T message); …

1
フォントサイズを画面解像度と一致させる方法は?
だから、LibGDXを使用してゲームに取り組んでいて、問題があります。 ゲームをほとんどの解像度に合わせるために、たとえばメインメニューの背景画像など、アスペクト比ごとにベースアセットを作成しました。4:3の場合は800X600、16:9の場合は1280X720などにしました。 今、私はTextButtonオプションのために、sをゲームに組み込もうとしています。私の問題は、どのフォントサイズがどの画面解像度と一致するかを理解できないことです。これを理解する方法はありますか、または私が持っている各解像度を1つずつ調べて、テキストを解像度に手動で一致させる必要がありますか?

1
テクスチャサイズのベストプラクティス
適切なテクスチャサイズをどのように決定すればよいか知りたいのですが?現在、私は常に1024x1024pxのUVテクスチャを作成していますが、たとえば1024pxテクスチャサイズの大きな家を作成すると、かなり見た目が悪くなります。 したがって、このようにメッシュサイズごとに異なるテクスチャサイズ(512、1024など)を作成する必要がありますか?: または、常に高解像度のテクスチャを実行してから、ソフトウェアでそれを削減する方が良いですか(つまり、UDKのLODBias設定を増やして、テクスチャのサイズを減らします)? ご回答有難うございます。 PS:私の英語すみません!
12 3d  textures  udk 

1
glDrawArraysとglDrawElementsの違い
OpenGL ESの上で私の心をリフレッシュしている間、私は出くわしたglDrawArraysとglDrawElements。 私はそれらがどのように使用されるかを理解し、なぜそれらが異なるのかを理解しています。 私が理解していないように見えるのは、glDrawElements描画呼び出しを保存する方法がわからないということです(描画呼び出しの保存は、私が読んだほとんどの本で言及されている説明なので、ここで言及します)。 2つの三角形を使用して正方形を描こうとした単純なシナリオを想像してみてください。 を使用するglDrawArraysときに使用する6つの頂点のセットglDrawElementsが必要です。6つの要素を持つインデックス配列に加えて、4つだけ必要です。 上記を踏まえて、ここに私が理解していないものがあります: glDrawElementsインデックス配列(正方形の場合は6つのインデックス)を使用して、4つの要素(6回)を持つ頂点配列にインデックスを付ける必要がある場合、どのように描画呼び出しを保存できますか?言い換えれば、glDrawElementsそれでも合計6回の描画呼び出しが必要になるということglDrawArraysですか? glDrawElementsそれでも2つの配列、つまり頂点とインデックスの2つの配列が必要な場合、どのように保存スペースを使用しますか? 2つの三角形から正方形を描画する場合、簡単にするために、glDrawElements(頂点配列に4項目、インデックス配列にglDrawArrays6項目)および(頂点配列にのみ6項目)の描画呼び出しを個別に何回行う必要がありますか? ありがとう。

1
GLSL-メイン関数のスコープ外でのグローバル変数の宣言
GLSLのメイン関数スコープの外で変数を宣言することは役立ちますか?これらの変数は実際に再利用されますか?それはより効率的ですか? 問題のコードは次のとおりです。 varying vec2 vposition; uniform float seed; uniform float top; uniform float bottom; uniform float phi; uniform float theta; uniform float scaledPI; uniform float yn; uniform float ym; uniform float rx; uniform float ry; uniform float radius; const float PI = 3.141592653589793238462643383; float left; float right; float mscaled; float …
12 glsl 

2
複数のキャンバスオブジェクトを使用することは良い習慣ですか?
私たちはHTML5とJavaScriptを使ってジャンプアンドランゲームを開発しており、そのための独自のゲームフレームワークを構築する必要があります。ここにいくつかの困難があり、いくつかのアドバイスをお願いしたいと思います: ゲームのルートを表す「ステージ」オブジェクトがあり、これはグローバルなdivラッパーです。ステージには、div要素でもある複数の「シーン」を含めることができます。再生タスク、一時停止などのシーンを実装し、それらを切り替えます。したがって、各シーンには、キャンバスを表す複数の「レイヤー」を含めることができます。これらのレイヤーには、「ObjectEntities」が含まれます。これは、画像または長方形などのその他の形状を表します。各Objectentityには、あるエンティティの画像を描画できるようにするための独自のtemporaryCanvasがあり、別のエンティティには長方形が含まれています。 ステージにactiveSceneを設定したので、ゲームをプレイすると、アクティブなシーンだけが描画されます。を呼び出しactiveScene.draw()、すべてのサブレイヤーを呼び出して描画し、エンティティを描画します(呼び出しdrawImage(entity.canvas))。しかし、これはある種の良い習慣ですか?描画する複数のキャンバスがありますか?各ゲームループでは、すべてのレイヤーコンテキストがクリアされ、再度描画されます。たとえば、バックグラウンドレイヤーがまだ残っている場合、…これを一度描画して、毎回クリアして再描画するほうが便利ではないでしょうか。または、ステージなどでグローバルキャンバスを使用し、このキャンバスを使用して描画する必要がありますか?しかし、これは高額になると思っていました...

5
コンポーネントベースのゲームで衝突を適切に処理する方法は?
コンポーネントを中心に設計されたゲームで衝突を適切に処理する方法に頭を悩ませようとしています。 多くの例ではPhysicsComponent、エンティティのコンポーネントのリストに何らかの種類の追加が加えられていますが、実際の実装では混乱します。 これPhysicsComponentが機能するためには、周囲の世界にアクセスする必要があります。これは私には直感的な意味がありません。コンポーネントは、そのコンテナ(エンティティ)だけでなく、そのコンテナのコンテナ(世界)を認識すべきではありませんか? 私には、レベルまたはシーンがこれらのエンティティのリストを維持し、ゲームが更新されるたびに、エンティティをループしてどのコリジョンを決定するように聞こえます。 私の質問は、第一に、これが良い設計であるかどうか、そして第二に、どのエンティティが衝突できるかを決定する方法です。ソリッドエンティティは空のIRigidBodyインターフェイスを実装できるので、レベルはリスト内のどのエンティティが衝突をサポートするかを決定できます。しかし、これはコンポーネントの設計を壊していますか? 代わりに、空のRigidBodyコンポーネントを含める必要がありますか?常に空であるとは限らず、このアプローチはより将来性があるため、これは実際により良い場合があります。これに関する唯一の問題は複雑さです。シーンは、すべてのエンティティだけでなく、すべてのエンティティのコンポーネントもループして、このRigidBodyコンポーネントがあるかどうかを判断する必要があります。 第三に、それらが衝突した場合、両方のエンティティに何らかの方法で通知する必要があり、これを達成する方法については確信がありません。 両方のエンティティにHealthComponentが含まれていて、衝突すると両方のヘルスが任意の値5減少するとします。2つのエンティティ間の衝突を検出した場合、これを処理するのはシーンの責任です。 しかし、その後、シーンはあまりにも責任がありますか?エンティティがアクセスしてはならない(?)ものの多くをシーンが担当している場合、これが手に負えなくなり、扱いにくくなるのを見ることができました。 編集:詳細が更新された質問。

2
合理的なAIを作成する方法は?
Fox and Houndsゲームに基づいたロジックゲームを作成しています。プレイヤーはキツネを再生し、AIは猟犬を再生します。(私が見る限り)私はAIを完璧にすることができたので、それは決して失われません。それをそのままにしておくことは、人間のプレイヤーにとってあまり面白くないでしょう。 今、私は人間が勝つことができるようにAIをダムダウンしなければなりませんが、どうすればいいのか分かりません。現在のAIロジックはパターンマッチングに基づいています-ボードをパターンスペースから外すランダムな動きを導入した場合、AIはおそらくゲームの終わりまで間抜けになります。 AIを一気に「天才」から「完全に馬鹿に」しない方法で馬鹿にする方法はありますか?
11 ai 

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