ゲーム開発

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

1
ゲーム/映画のキャラクターの呼吸
呼吸(胸部と顔の特徴の動き):モデル化するのが難しいかどうか、計算コストが高いかどうかを確認したいと思います。最近、マダガスカル3の映画に大きな影響があることに気づきましたが、(間違っている場合は修正してください)ゲームで見たことを覚えていません(ただし、寒い冬の設定でスチームクラウドを除く)。それを顕著な程度に(たとえば、プロットまたは状況によって必要な場合)。 映画のグラフィックスとゲームのグラフィックスの両方の観点からの回答に感謝します。

2
2Dプラットフォーマーでキャラクターを凹凸のある壁の上を歩くにはどうすればよいですか?
私は、横向きや逆さまなど、あらゆる角度で有機的な表面を「歩く」ことができるプレイアブルキャラクターを作りたいです。90度の角度の直線ではなく、傾斜したカーブしたフィーチャを持つ「オーガニック」レベル。 私は現在AS3(中程度のアマチュア経験)で作業しており、基本的な重力ベースの物理学にNape(かなり初心者)を使用しています。この歩行のメカニズムは明らかに例外です。 おそらくネープ拘束を使用して、この種の歩行のメカニズムを実行する手続き的な方法はありますか?または、レベルサーフェスの輪郭に沿って明確な歩行「パス」を作成し、それらを使用して歩行の動きを制限するのが最善でしょうか。

2
キャラクターのスキルと能力をコマンドとして作成することは良い習慣ですか?
私は、ユニークな攻撃スキルと、構築、修復などの他の能力を持つキャラクターで構成されるゲームを設計しています。プレイヤーは、そのようなキャラクターの複数を制御できます。 そのようなスキルや能力をすべて個別のコマンドに組み込むことを考えています。静的コントローラーは、これらすべてのコマンドを静的コマンドリストに登録します。静的リストは、ゲーム内のすべてのキャラクターの利用可能なすべてのスキルと能力で構成されます。そのため、プレイヤーがいずれかのキャラクターを選択し、UIのボタンをクリックして呪文を唱えたり能力を実行したりすると、ビューは静的コントローラーを呼び出して、リストから目的のコマンドをフェッチして実行します。 Unityでゲームを構築しているので、これが良いデザインであるかどうかはわかりません。すべてのスキルと能力を個別のコンポーネントとして作成し、それをゲーム内のキャラクターを表すGameObjectsに関連付けることができると思います。次に、UIはキャラクターのGameObject を保持してからコマンドを実行する必要があります。 私がデザインしているゲームのデザインと練習は何がいいですか?

1
ワームゲームから2Dサイドオンウェーブエフェクトを再作成します
私はワームから波/水の効果を再現しようとしています(ここhttp://youtu.be/S6lrRqst9Z4?t=31sを参照してください)実際にはスプライトではなく、正弦波のようなものによって手続き的に生成されていることがわかります。 誰かがこのようなものを以前に作成したことがありますか?または私はそれについてどうやって行くのですか?

4
エンティティごとに1つのタイプの1つのコンポーネントを壊すことなく、エンティティごとに複数のメッシュを使用するにはどうすればよいですか?
階層ベースのゲームエンジンからコンポーネントベースのゲームエンジンに切り替えるだけです。私の問題は、メッシュの階層を持つモデルをロードすると、コンポーネントベースのシステムのエンティティは同じタイプの複数のコンポーネントを持つことができないが、それぞれに「meshComponent」が必要になるということです。モデルのメッシュ。だから私はこの問題をどのように解決できますか? このサイトでは、コンポーネントベースのゲームエンジンを実装しました:http : //cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

1
UnityのOnCollisionEnterで表面の法線が得られないのはなぜですか?それらを取得する最も信頼できる方法は何ですか?
Unityのonコリジョンイベントは、発生したコリジョンに関するいくつかの情報を提供するCollisionオブジェクトを提供します(ヒット法線を持つContactPointsのリストを含む)。 しかし、得られないのは、衝突したコライダーの表面法線です。これは説明するためのスクリーンショットです。赤い線はからContactPoint.normal、青い線はからRaycastHit.normalです。 これは、簡素化されたAPIを提供する情報を隠すUnityのインスタンスですか?または、標準の3Dリアルタイム衝突検出技術でこの情報が収集されないのですか? そして質問の2番目の部分について、衝突の表面法線を取得するための確実で比較的効率的な方法は何ですか? レイキャスティングによって表面の法線が得られることはわかっていますが、これをすべてのシナリオで実現するには、いくつかのレイキャストを行う必要があるようです(接触点と通常の組み合わせで最初のキャストのコライダーが欠落するか、すべての平均を行う必要があるかもしれません)最良の結果を得るための接触点の法線)。 私の現在の方法: Collision.contacts[0].point通常のヒットに沿ってバックアップします 否定ヒットダウンレイキャスト通常のためfloat.MaxValueに、Collision.collider それが失敗した場合、通常の否定されていない状態でステップ1と2を繰り返します。 それが失敗する場合は、ステップ1〜3を試してください。 Collision.contacts[1] 成功するまで、またはすべての接点がなくなるまで4を繰り返します。 あきらめて、戻りVector3.zeroます。 これはすべてをキャッチしているようですが、これらすべてのレイキャストは私をうるさくします、そしてこれが十分なケースで機能することをテストする方法がわかりません。もっと良い方法はありますか? 編集 これが本当に3Dコリジョンでの方法である場合、一般的な場合の理由の概要は、Unityに固有の何かと同様に歓迎されます。

2
2D配列で形状を検索し、最適化する
画像が許可されました。下のゲームの画像は、「T」字型の一部として認識されている、いくつかの暗いブロックを示しています。ご覧のように、コードは赤い点でブロックを暗くしており、緑色の輪郭を持つ "T"形状は見ていません。 私のコードは、x / yをループし、ブロックを使用済みとしてマークし、形状を回転させ、繰り返し、色を変更し、繰り返します。 私はこのチェックを大きな不安で修正しようと試み始めました。現在のアイデアは: グリッドをループしてすべてのパターンオカレンス(使用済みとしてブロックをマークしない)をメモし、これらを配列に書き込みます もう一度グリッドをループします。今度は、どのブロックがどのパターンで占められているか、したがって、どのブロックが複数のパターンで占められているかに注目します。 もう一度グリッドをループします。今回は、どのパターンがどのパターンを妨げているかに注目します それだけでいいと思います。 私はしなければならないと思う 最初に他のほとんどのパターンを妨害するものから始めて、矛盾する形状のさまざまな組み合わせを試してください。これにどのようにアプローチしますか? 8つのブロックを占有する3つの競合する形状があり、形状はそれぞれ4ブロックであるため、最大2つの形状しか持てないという有理数を使用します。 (私は他の形状も組み込むつもりであり、競合する形状を通過するときに考慮する必要があるスコアの重み付けがおそらくありますが、それは別の日になる可能性があります) 箱詰めの問題ではないと思いますが、何を調べればよいかわかりません。あなたの助けに感謝して、それが理にかなっていると思います 編集質問の明快さにもかかわらず、誰もが理解しているようです、はい、 各色の中で最大の「T」字を見つけたい (もし私があなたに2つのポイントを与えて、あなたが3つを作ったなら、あなたは少しイライラするでしょう)

4
ゲームでタイムストップまたはバレットタイムをコーディングする方法
XNA 4.0でシングルプレイヤーRPGプラットフォーマーを開発しています。時間を「停止」または減速させ、プレイヤーキャラクターのみを元の速度で移動させる能力を追加したいと思います(Baldur's GateシリーズのTime Stopスペルに似ています)。正確な実装ではなく、いくつかの一般的なアイデアとデザインパターンを探しています。 編集: 素晴らしい入力をありがとう。私は次の解決策を考え出しました public void Update(GameTime gameTime) { GameTime newGameTime = new GameTime(gameTime.TotalGameTime, new TimeSpan(gameTime.ElapsedGameTime.Ticks / DESIRED_TIME_MODIFIER)); gameTime = newGameTime; またはこれらの線に沿って何か。このようにして、プレーヤーコンポーネントに別の時間を設定し、残りの時間に別の時間を設定できます。このようなワーピング時間が中心的な要素となるゲームで機能するのに十分なほど普遍的ではありませんが、このケースで機能することを願っています。メインのUpdateループが少し不快であるという事実はちょっと嫌いですが、それは確かにそれを実装する最も簡単な方法です。それは本質的にテッセローデが提案したのと同じだと思いますので、私は彼に緑のダニを与えます:)
11 xna  time-travel 

3
ジオメトリウォーズの重力ウェルエフェクトの実行方法
ここでは背景グリッドについて話しているのではなく、重力ウェルの周りを回る渦巻き模様の粒子について話しているのです!私はいつもこのエフェクトが好きで、それを再現するのは楽しい実験だと思いました。GWは至る所でフックの法則を使用していることを知っていますが、Particle-to-Wellエフェクトはスプリングを使用して行われるとは思いません。距離の2乗関数のように見えます。 これは効果を示すビデオです:http : //www.youtube.com/watch?v=YgJe0YI18Fg 一部のパーティクルにスプリングまたは重力の効果をうまく実装できます。これは簡単です。しかし、効果がGW効果に似ているようには見えません。ゲームで効果を見ると、パーティクルはウェル自体から束状に放出され、ウェルの中心を中心に外向きにらせん状になり、最終的に外向きに飛ばされ、ウェルに向かって戻り、繰り返されるようです。 スポーン時にパーティクルを外側にらせん状にするにはどうすればよいですか?ウェルの近くにいるときにパーティクルの束を一緒に保ち、外側に飛ばすと互いに離れるようにするにはどうすればよいですか?粒子をウェルに強く付着させるにはどうすればよいですか? 編集: http : //www.youtube.com/watch? v =1eEPl8kOXN8 <-ビデオhttps://dl.dropbox.com/u/49283213/gw.gif <-パーティクルパスのGIF パーティクルエフェクトをより見やすくするために、GW内のランダム化を無効にしました。これは、青緑色のドレインがパーティクルの束を送出しているのを見ることができる分のビデオです。赤い粒子は、通常その場所全体に現れる爆発からのものです。私がビデオから行ったいくつかの観察: 粒子は、ドレインの中心(または中心付近)から放出されます すべてのパーティクルが中心を中心に時計回りの動きをするように強制されているため、ある種の接線方向の動きが適用されています。赤い爆発のパーティクルが排水口に近づくと、これを簡単に確認できます。

2
クリックアンドドラッグの動きを特定の領域に制限する方法
やや一般的なタイトルをお詫び申し上げます。私がやろうとしていることを成し遂げる方法については、あまり手がかりがありません。そのため、可能な解決策を研究することさえ難しくなっています。 私はある種のパスマーカーを実装しようとしています(たぶんそれに最適な名前があるかもしれませんが、これは私が思いつくことができる最高のものです)。 プレーヤーの前にはパスマーカーがあり、ターンの計画が完了したらプレーヤーがどのように移動するかを決定します。プレーヤーはマーカーをクリックして選択した位置にドラッグできますが、マーカーは定義された作業領域(灰色のビット)内でのみ移動できます。 そのため、次の2つの問題に悩まされています。 まず、その実行可能な領域をどのように正確に定義する必要がありますか?プレーヤーが実行可能な角度を形成するための開始点となる2つのベクトルを想像できます。これらの2つの弧は、プレーヤーの位置に中心がある円から発生する可能性がありますが、すべてをどのように配置するかは明確にわかりません一緒。 次に、マーカーを配置できる領域を定義した後、その領域内にのみマーカーを配置するように強制するにはどうすればよいですか?たとえば、プレーヤーがマーカーをクリックしてドラッグすると、マーカーは作業領域内を自由に移動できますが、領域の境界を離れてはなりません。たとえば、プレーヤーがマーカーを上向きにドラッグし始めると、マーカーが作業領域の端(下の最初の図)に到達するまで上向きに移動しますが、その後、プレーヤーが横向きにドラッグを開始する場合、マーカーはドラッグ中にドラッグに追従する必要がありますエリア内(下の2番目の図)。 これがあまり混乱しないことを願っています。みんなありがとう。 編集:これが違いを生む場合、私はマーマレードSDKでC ++を使用しています。

1
ゲームアクションを実行するためのパターン
ゲーム内でさまざまなアクションを実行するための一般的に受け入れられているパターンはありますか?プレーヤーがアクションを実行する方法、およびAIが移動、攻撃、自己破壊などのアクションを実行する方法。 現在、.NETジェネリックを使用してさまざまなアクションによって返されるさまざまなオブジェクトを指定する抽象BaseActionがあります。これはすべて、コマンドと同様のパターンで実装され、各アクションはそれ自体に責任を持ち、必要なすべてのことを行います。 私が抽象的である理由は、単一のActionHandlerを使用できるようにするためであり、AIはbaseActionを実装するさまざまなアクションをキューに入れることができます。そしてそれが一般的である理由は、いくつかの一般的なbeforeActionとafterActionの実装とともに、さまざまなアクションがアクションに関連する結果情報を返すことができるようにするためです(さまざまなアクションはゲーム内でまったく異なる結果をもたらす可能性があります)。 それで...これを行うためのより受け入れられた方法はありますか、またはこの音は大丈夫ですか?

5
マルチプレイヤーゲームを作成するために、高価なサーバーと豪華なホスティングが必要ですか?
私はRPGの作業を終了しましたが、マルチプレイヤーにするのはもっと楽しいようです。SFMLにはネットワーキング機能があります。それは可能だと思ったのですが、私の人生の中で、ネットワーキングに関する基本的なことすら試したことはありません。実際、私の知識は非常に限られています。 リソース単位でマルチプレイヤーゲームを作成するには何が必要ですか?私はMMOについて話しているのではなく、協力型のゲームのようなものです。ホスティングとサーバー、そしてそれを作るために多くの多くのことを支払うのにたくさんの現金が必要ですか?
11 c++  multiplayer  sfml 

2
スプライトを向いている方向に移動するにはどうすればよいですか?
Java / Slick 2Dを使用しています。マウスを使用してスプライトを回転させ、矢印キーを使用してスプライトを移動しようとしています。スプライトを回転させることは問題ありませんが、本来の方向に動かすことができません。「進む」を押すと、スプライトが必ずしもマウスの方向に移動するわけではありません。実際には、画面の左側に移動するだけです。多くのゲームがこのスタイルのモーションを使用するので、これにはいくつかの標準コードが必要だと確信しています。誰かがトリガーが何であるかを教えてくれますか?ありがとう 編集:これは回転コードです(これは何か奇妙なことをします:https://stackoverflow.com/questions/12610320/why-is-my-image-rotating-off-center) int mX = Mouse.getX(); int mY = HEIGHT - Mouse.getY(); int pX = sprite.x; int pY = sprite.y; int tempY, tempX; double mAng, pAng = sprite.angle; double angRotate=0; if(mX!=pX){ mAng = Math.toDegrees(Math.atan2(mY - pY, mX - pX)); if(mAng==0 && mX<=pX) mAng=180; } else{ if(mY>pY) mAng=90; …

2
ゲームの「香りの軌跡」をどのようにモデル化できますか?
3Dゲームを作成し、プレーヤーまたはモバイルのいずれかが、香りの道をたどることによって他のエンティティを引き寄せられるようにしたいとします。このユースケースに一致する既知のデータ構造はありますか? 個人の数が少ない場合は、3D coordからエンティティIDへのマップのような処理を行うことができますが、実際の香りは時間とともに徐々に消えていきます。そして、ほとんどの場合、そこに何が入ったか、そしてそのタイプのものがいくつくらい入ったかしか知ることができません。そして、それがなくなるまで、近似は時間とともに最悪になります。 正確な数値から始めて、最下位の桁を徐々に減らしていき、最上位の桁も失うまでのようなものだと思います。しかし、エンティティIDは通常、個別のIDに加えてエンティティタイプを含むようにエンコードされないため、これは本当に役に立ちません。
11 ai 

2
ダイヤモンドスクエア地形生成問題
この記事に従って、ダイヤモンドスクエアアルゴリズムを実装しました:http : //www.lighthouse3d.com/opengl/terrain/index.php?mpd2 問題は、これらの急な断崖がマップ全体に表示されることです。テレインが再帰的に細分割されると、エッジで発生します。 ここにソースがあります: void DiamondSquare(unsigned x1,unsigned y1,unsigned x2,unsigned y2,float range) { int c1 = (int)x2 - (int)x1; int c2 = (int)y2 - (int)y1; unsigned hx = (x2 - x1)/2; unsigned hy = (y2 - y1)/2; if((c1 <= 1) || (c2 <= 1)) return; // Diamond stage float a …

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