ゲーム開発

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


6
複数の色を色分けする方法は?
Unityドキュメントでこれに対する解決策を見つけるのはかなり難しいと感じました。 Color.Lerp(Color a, Color b, float t) は、ステップtに従って色を徐々に変化させ、Color bの最終値を与える関数です。 どうすれば複数の色の間を次々と検索できますか?
12 c#  unity  color  lerp 

4
Unity 5のガラス素材
Unity 5でガラス素材を作る方法を知っている人はいますか? 金属や画像のテクスチャーは作成できますが、ガラス素材の作成方法がわかりません。 Googleで検索してもUnity 5については何も得られないので、かなり簡単にできるはずです。 このようなシャワードアと飛行機のガラス用です:

3
固定軸を中心にオブジェクトを回転
私はアプリのユーザーに、画面上で指をドラッグして、画面の中央に描かれた3Dオブジェクトを回転させようとしています。画面上の水平方向の動きは、固定されたY軸の周りの回転を意味し、垂直方向の動きは、X軸の周りの回転を意味します。私が抱えている問題は、1つの軸の周りの回転を許可するだけでオブジェクトが正常に回転するのに、2番目の回転を導入するとすぐにオブジェクトが期待どおりに回転しないことです。 これが何が起こっているかの写真です: 青い軸は固定軸を表します。この固定された青い軸を持つ画面を描きます。これは、オブジェクトに関連して回転させたいものです。何が起こっているのかは赤です。 私が知っていることは次のとおりです。 Y(0、1、0)を中心とした最初の回転により、モデルは青いスペース(このスペースAと呼ばれる)から別のスペース(このスペースBと呼ばれる)に移動します。 ベクトル(1、0、0)を使用して再度回転しようとすると、スペースAではなくスペースBでx軸を中心に回転します。 私が知っていることを考えると、私が試したものがあります(簡潔にするためにW座標を除外します): 最初に、クォータニオンを使用してY(0、1、0)を中心に回転します。 回転Yクォータニオンをマトリックスに変換します。 Y回転行列に固定軸x Vector(1、0、0)を掛けて、新しい空間に関連するX軸を取得します。 クォータニオンを使用して、この新しいXベクトルを中心に回転します。 コードは次のとおりです。 private float[] rotationMatrix() { final float[] xAxis = {1f, 0f, 0f, 1f}; final float[] yAxis = {0f, 1f, 0f, 1f}; float[] rotationY = Quaternion.fromAxisAngle(yAxis, -angleX).toMatrix(); // multiply x axis by rotationY to put it in object space …

1
バッファーのバインドを解除する必要がありますか?
OpenGL ES 2でいくつかのテストを行っていますが、いくつか質問があります。私の現在のプログラムは次のようなものです。 Init ------- -> create index buffer -> fill index buffer glBufferData … -> create vertex buffer -> fill vertex buffer glBufferData … Draw ------- 1. Apply vertex buffer -> Bind VAO -> bind vertex buffer - enable attributs (glVertexPointer, …) -> unbind vertex buffer -> Unbind VAO …

2
ネットワーク化されたリアルタイムゲームにゲーム状態のスナップショットシステムをどのように実装しますか?
ネットワーククラスのプロジェクトとして、シンプルなクライアントサーバーリアルタイムマルチプレイヤーゲームを作成したいと思います。 リアルタイムのマルチプレイヤーネットワークモデルについて多くのことを読んでおり、クライアントとサーバーの関係と遅延補償のテクニックを理解しています。 私がしたいことは、Quake 3ネットワークモデルに似たものです。基本的に、サーバーはゲーム全体の状態のスナップショットを保存します。クライアントから入力を受け取ると、サーバーは変更を反映した新しいスナップショットを作成します。次に、新しいスナップショットと最後のスナップショットの差を計算し、それらを同期するためにそれらをクライアントに送信します。 このアプローチは本当に堅実に思えます-クライアントとサーバーが安定した接続を持っている場合、それらを同期させるために必要最小限のデータのみが送信されます。クライアントの同期が外れると、完全なスナップショットも要求できます。 ただし、スナップショットシステムを実装する良い方法を見つけることはできません。シングルプレイヤープログラミングアーキテクチャから離れて、ゲームの状態を次のように保存する方法を考えるのは本当に難しいと思います。 すべてのデータはロジックから分離されています ゲームの状態のスナップショット間の差を計算できます ゲームエンティティはコードを使用して簡単に操作できます スナップショットクラスはどのように実装されますか?エンティティとそのデータはどのように保存されますか?すべてのクライアントエンティティには、サーバー上のIDと一致するIDがありますか? スナップショットの違いはどのように計算されますか? 一般的に:ゲーム状態のスナップショットシステムはどのように実装されますか?

6
2つの移動するAABBが交差するかどうかを確認する最も速い方法は何ですか?
移動している2つのAABBがありますが、フレームの下で交差するかどうかを確認する最も速い方法は何ですか? 移動するということは、通常の矩形交差法で確認するだけではなく、ブール値のみを返し、ヒット時間などを返さない、単純で簡単なスイープテストを意味します。 私が思うのは、単純に次のようにすることです。 しかし、その六角形は非常に複雑であり、AABB-ポリゴンの交差を計算する方法がわかりませんが、もっと簡単な方法はありますか? あなたが最も気に入っているプログラミング言語であれば、簡単に移植できます。 ありがとう。


3
グラフィックスパイプラインを使用して、密度関数に基づいてボリュメトリックデータをレンダリングするにはどうすればよいですか?
両方のグラフィックスAPI(OpenGLおよびDirectX)は、いくつかのステージがプログラム可能な、明確に定義されたパイプラインを考案します。これらのプログラム可能なステージは、固定された最小量のデータを取得する必要があり、データに対して適切に定義された範囲の操作を行い、定義された最小出力を出力するため、データを次のステージに正しく渡すことができます。これらのパイプラインは、限られた量のジオメトリデータのみで動作するように設計されているように見えます。D3DとOGLの両方の場合、頂点データとテクスチャ座標です。 しかし、作成しようとしているアプリケーションが幾何学的データを表すために頂点(またはボクセルさえ)を使用せず、変換や投影、ラスタライズ、補間、またはそのような何かを正確に行わない場合、APIのそのような制限またはパイプラインが物事を困難にします。 では、グラフィックスパイプラインを変更して、各ステージがデータに対して行う機能と各ステージで出力されるデータのタイプの機能を変更する方法はありますか?そうでない場合、「生の」API関数を使用して独自のパイプラインを構築する方法はありますか?そうでない場合は、それが不可能な理由を説明してください。 編集:私のアプリケーションは、密度関数を使用してジオメトリを表現します。この関数は、空間の各ポイントに値を持っています。カメラの錐台を3Dグリッドに分割し、各ブロックをピクセルとして投影できます。各ブロックで、密度関数を統合し、その値が必要な値を超えているかどうかを確認します。はいの場合、そのブロックに何かが存在し、そのブロックに対応するピクセルがレンダリングされると想定されます。だから、今私のレンダラーでは、頂点バッファーの頂点データの代わりに、関数(文字列で表す)をグラフィックスハードウェアに渡したいと思います。これは、頂点シェーダーに同種のクリップスペースに変換する頂点がなく、フラグメントシェーダーがピクセル情報を取得しないことも意味します。代わりに、ほとんどの検索と評価はピクセルごとに行われます。

7
非常に難しいゲームを設計するにはどうすればよいですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 非常に高い難易度でゲームを設計したいと思います。私はこれらの質問を読みました: ゲームの難易度はどのようにテスト/バランスされていますか? 人々が私のゲームに戻ってくるのに最適な失敗率はどれくらいですか? しかし、彼らはゲームの難易度をますます高める特定のトピックではなく、一般的なゲームのデザインとバランスに焦点を当てています。 難易度はゲームごとに異なることを理解しているため、ゲームや難易度ラインのハードサイドのレベルを設計する際に発生する可能性のある一般的な問題に陥ることを避けるために従うことができる一般的なガイドラインがあるかどうかを知りたいゲームのジャンルの。 思い浮かぶいくつかのサブ質問は次のとおりです。 ゲームのめちゃくちゃ難しい部分を設計しながら、「ビートアビリティ」を確保する方法は? 実際に自分のゲームを破ることができることを知る方法は? たとえば、プラットフォーマーを設計するとき、ジャンプと回避の非常に難しいシーケンスを作成できます。今、開発者として、プレイヤーキャラクターがどれだけジャンプできるか、発射体がどれだけ速く動いているかなどを正確に知っていますが、設計されたレベルが実際にビート可能であることをどのように確認できますか? 最も明白な答えは、それを試してみることです。しかし、ゲームは、開発者がどれだけ上手くプレイできるかと同じくらい難しいでしょう。 ハードゲームを実際に作成した経験のある人は、難しいゲームを作成するために使用できるトリックやガイドラインを知っていますか?

2
単語ゲーム-ボード実装?
私はlibgdxを使用して、アンドロイド用のボグル型ゲームに取り組んでいます。ユーザーには4x4の文字のグリッドが表示され、文字の上で指をドラッグして単語を見つける必要があります。 boggleとは異なり、使用済みの文字を非表示にします。残りの文字は落ち(ボードの下部まで、画面の向きは固定されます)、ボードは上部から補充されます。ユーザーは、戦略的な単語選択により、ボードを回転させて、使いやすい文字をより良い場所に配置することができます。 例: d g a o u o r T h v R I d G n a 「GRIT」という単語を選択した場合、これらの文字は消え、残りの文字は落ちます。 d u g a h o r o d v n a そして、新しい文字に置き換えられます d w x y u g a z h o r o d v n a ボードとタイルをどのように表現するかを考えるのが難しいです。 …
12 android  libgdx 

5
Bresenhamのラインアルゴリズムを浮動小数点エンドポイントに一般化するにはどうすればよいですか?
私は2つのことを組み合わせようとしています。私はゲームを書いていますが、浮動小数点の端点を持つ線上にあるグリッドの正方形を決定する必要があります。 さらに、接触するすべてのグリッド正方形(つまり、ブレゼンハムの線だけでなく、青の線)を含める必要があります。 誰かが私にそれを行う方法に関する洞察を提供できますか?明白な解決策は、単純なラインアルゴリズムを使用することですが、より最適化された(高速な)ものはありますか?

4
MMOがレベルキャップを持つ理由は何ですか?
多くのMMOプレーヤーでは、キャラクターの進行は、たとえばレベル60、90、または100などによって人為的に制限されています。そもそもMMOにこれらのレベルキャップがあるのはなぜですか?レベリング体験を興味深く無限に保つ数学的に設計されたレベリングシステムを使用して、キャラクターが任意のレベルを継続できるようにしないのはなぜですか? この質問に対する回答は、機能の背後にある理由を確認し、MMOでこれを実装するかどうか、および実装する方法を決定するのに役立つ場合があります。

4
文字のグリッドで有効な単語を見つけるにはどうすればよいですか?
私はテトリスに似たゲームを作成していますが、主な違いは2つあります。画面は既にタイルで満たされ始め(ニンテンドーDSやPCのパズルクエストのように)、個々のタイルには文字があります。プレーヤーの目的は、タイルを使用して有効な単語を形成することでタイルを排除することです。単語は、対角線以外の任意の方向に文字を隣同士に配置することによって形成されます。 プレーヤーは、タイルの行全体を左または右に移動したり、タイルの列全体を上下に移動したりすることができます(行/列の移動がボードの制限を超える場合、制限を超える文字は「循環」し、行/列のも​​う一方の端に表示されます)。プレイヤーのアクションの後、ゲームはボード全体をチェックして有効な単語を探し、ボードからそれらの単語を形成する文字を削除する必要があります。削除された文字の上の文字は、削除された文字の場所に落ち、ボードが再びいっぱいになるまで新しい文字が画面の上部からドロップします。 文字のシーケンスを指定して、それが有効な英語の単語であるかどうかを判断する線形アルゴリズムを既に作成しました。私が抱えている問題は、ボード上の有効な単語を確認するにはどうすればよいですか?ブルートフォースが唯一の方法ですか?ボードから可能なすべての組み合わせをテストして、それらが有効かどうかを確認するのは、小さな(5x5)ボードでも非常に遅いです。どんな助けでも大歓迎です、ありがとう!

3
純粋な関数型プログラミングとゲームの状態
関数型プログラミング言語で(一般に)状態を処理する一般的な手法はありますか?グローバル状態を処理するためのすべての(機能的な)プログラミング言語には解決策がありますが、できる限りこれを避けたいと思います。 純粋に機能的な方法でのすべての状態は、機能パラメーターです。そのため、特定の入力またはトリガーで世界を操作するすべての関数のパラメーターとして、ゲーム全体の状態(世界、プレイヤー、ポジション、スコア、アセット、敵などの巨大なハッシュマップ)を配置する必要があります。関数自体は、gamestate blobから関連情報を選択し、それを使用して、gamestateを操作し、gamestateを返します。しかし、これは問題に対する貧弱な解決策のように見えます。ゲームステート全体をすべての関数に入れた場合、グローバル変数や命令型アプローチとは対照的に、私にとってメリットはありません。 関連する情報だけを関数に入れて、指定された入力に対して実行されるアクションを返すことができます。そして、1つの関数がすべてのアクションをgamestateに適用します。しかし、ほとんどの機能には多くの「関連する」情報が必要です。move()オブジェクトの位置、速度、衝突のマップ、すべての敵の位置、現在のヘルスなどが必要です。したがって、このアプローチも機能しないようです。 私の質問は、関数型プログラミング言語で膨大な量の状態をどのように処理するのか、特にゲーム開発の場合ですか? 編集: Clojureでゲームを構築するためのゲームフレームワークがいくつかあります。この問題を部分的に解決するアプローチは、ゲーム内のすべてのオブジェクトを「エンティティ」としてスレッド化し、巨大なバッグに入れることです。ギガント主な機能は、画面を保持しているし、エンティティとハンドルイベント(:on-key-down、:on-initこのエンティティのため、...)とは、メインディスプレイのループを実行します。しかし、これは私が探しているクリーンなソリューションではありません。

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